Aggregate open benchmarking work - #6769
Conversation
Keep mock state buffers stable so timed samples measure accessor work instead of random-data allocation or mock-side copies. Initialize Newton dynamics metadata and make unsupported or deprecated properties explicit.
Benchmark articulation, rigid-object, and collection wrapper and data paths using the optional kitless OVPhysX runtime. Keep mock storage work outside timed operations so results reflect Isaac Lab overhead.
Measure synchronized updates, submission latency, and backend reads for contact, frame-transformer, IMU, PVA, joint-wrench, and ray-caster sensors without charging physics stepping to sensor timing.
Share synchronized latency sampling across PhysX and OVPhysX sensor workloads. Emit summary and JSON results with observer-floor, submission, completion, and native-read statistics so runs are directly comparable and failures remain visible.
Use the shared synchronized latency runner so Newton sensor results include consistent statistics, observer cost, metadata, and machine-readable output across backends.
Explain why isolated asset and sensor benchmarks exist, how to run each backend workload, and how to interpret and compare their outputs.
Keep the designated-workstation requirement public without exposing the private local SSH helper.
Lead with the supported typed Python workflows, document verified request and result contracts, and provide an executable lower-level extension example. Align API reference coverage and testing navigation with the three-part benchmark journey.
Connect the benchmark user, framework, and micro-benchmark guides through one coherent documentation path while preserving their distinct scopes.
Scope Torch and SKRL global backend settings to reusable in-process training and playback calls. Preserve attributes that were initially absent and add failure-path regressions for RSL-RL and SKRL.
Move shared state guards into the common entrypoint utilities and make RSL-RL's Torch backend policy explicit at the call site. Scope SKRL playback preservation to JAX calls and cover exceptional RSL-RL cleanup.
Use step terminology across runtime and play interfaces. Record the excluded count in environment-step timing so schema and flat formatter consumers share one contract.
Advance the rebased benchmark bundle schema from 1.2 to 1.3 for the additive learning success-rate curve.
# Conflicts: # scripts/benchmarks/test/test_benchmark_smoke.py
# Conflicts: # docs/source/testing/benchmarks.rst
| @@ -125,27 +125,10 @@ CPU: Intel(R) Xeon(R) Platinum 8362 CPU @ 2.80GHz | |||
| +-------------------------------------+-------------------+--------------+-------------------+--------------------+ | |||
There was a problem hiding this comment.
We can probably remove this whole file at this point
| learning = builders.build_learning( | ||
| reward_series=log_data.get(desc.reward_tag, []), | ||
| ep_length_series=log_data.get(desc.ep_length_tag, []), | ||
| success_rate_series=tracker.history if tracker is not None else None, |
There was a problem hiding this comment.
-> =tracker.history, if its none it'll get set to None
|
|
||
|
|
||
| def _build_learning_curve(values: Sequence[float], ema_alpha: float, keep_series: bool) -> LearningCurve: | ||
| samples = list(values) |
There was a problem hiding this comment.
is there a concern that this would be some other type? If it is why is the type hint Sequence?
| return stats | ||
|
|
||
|
|
||
| def _percentile(samples: Sequence[float], fraction: float) -> float: |
There was a problem hiding this comment.
Can we leverage numpy for doing our math here and elsewhere. numpy has percentiles, std_dev, and other strong helpers. The calculations can then be done in-place
| environment_step_calls: int | ||
| simulation_step_calls: int | None | ||
| measurement_mode: Literal["host_return", "serialized_synchronized"] | ||
| warmup_steps: int = 0 |
There was a problem hiding this comment.
is the default meant to be 0? I thought it was 1?
| wp.synchronize_device(sim.device) | ||
|
|
||
| # Time only sensor work. Physics steps happen outside the timed regions. | ||
| synchronize = partial(wp.synchronize_device, sim.device) |
There was a problem hiding this comment.
Not good to hide that you are using warp synchronize for a small refactor gain
| @@ -0,0 +1,201 @@ | |||
| # Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). | |||
There was a problem hiding this comment.
Does rigid body really need 3 different benchmark files. Code could be shared if they were together. I know they benchmark three different concepts but worth thinking if we can combine.
|
|
||
|
|
||
| @configclass | ||
| class RayCasterBenchmarkSceneCfg(InteractiveSceneCfg): |
There was a problem hiding this comment.
ray-plane is not that interesting of a benchmark. Similarly for the other benchmarks we might need to choose (and document) them a bit more carefully. Can be done in follow-up
| @@ -16,6 +16,8 @@ | |||
| from __future__ import annotations | |||
There was a problem hiding this comment.
Here and elsewhere, we should probably make these microbenchmarks callable from the main benchmarking command
uv run isaaclab microbenchmark --component contact_sensor physics=newton_mjwarp
Can be done in follow up or directly here, just leaving my brainstormed thoughts
| AppLauncher.add_app_launcher_args(parser) | ||
| args_cli = parser.parse_args() | ||
| if args_cli.num_envs <= 0: | ||
| parser.error("--num_envs must be greater than zero") |
There was a problem hiding this comment.
type check in add_argument?
Summary
Integration draft aggregating the currently open benchmarking pull requests after rebasing them onto
develop, which now contains #6564. The individual pull requests remain the intended review and merge units; this draft exists to exercise their combined behavior and CI.Included pull requests
Stack
The micro-benchmark and documentation work is linearized as:
#6565 -> #6566 -> #6567 -> #6568 -> #6587 -> #6595 -> #6627 -> #6629The aggregate then merges the independent #6624, #6631, and #6764 tips. Historical plan/spec commits were excluded from the rewritten branches.
Integration notes
num_stepsandwarmup_stepsconsistently.develophistory was not carried forward.Verification
./isaaclab.sh -f