Add OVPhysX asset micro-benchmarks#6566
Open
AntoineRichard wants to merge 33 commits into
Open
Conversation
Exclude configurable warmup frames from runtime metrics and compute throughput from total measured work over total wall time. Use longer defaults so the quick benchmark is less sensitive to startup and short sampling windows.
Add an opt-in runtime benchmark probe around the environment's SimulationContext step calls. Report host time inside and outside that boundary while preserving the original method after measurement.
Measure environment and synchronized simulation stepping across runtime, training, and play benchmarks. Store the resulting Isaac Lab overhead in benchmark schema 1.1 while leaving regular training and play entry points uninstrumented.
Require an explicit benchmark flag before wrapping environment and simulation steps. Disabled benchmarks now avoid method replacement and device synchronization while schema 1.1 continues to represent measured runs.
Delegate synchronization and elapsed-time measurement to the existing Isaac Lab Timer. Keep the interception layer focused on recording per-step samples so environment, simulation, and derived overhead metrics include standard deviation and peak values.
Record the env.step boundary in every benchmark workflow without adding explicit synchronization. Keep the nested synchronized simulation probe optional, and expose environment-step FPS in schema 1.2 so runtime, play, and training results can be compared on the same scope.
Name the opt-in instrumentation after the Isaac Lab overhead it reports instead of the implementation detail used to derive it.
Synchronize before environment and simulation timing begins so policy and action-generation work queued earlier is not attributed to Isaac Lab overhead.
Recalculate throughput standard deviation around the aggregate effective mean so benchmark MeanStd values use one consistent center.
Validate workload counts before launch and require positive environment timing samples so empty synchronized runs fail with actionable errors instead of division by zero.
Run the training and play smoke matrix without synchronized overhead measurement, retain one focused synchronized replay, and verify pending work before env.step is excluded from its metric.
Keep the first runtime step outside throughput regardless of overhead instrumentation and floor derived overhead at zero when nested wall timers cross due to measurement noise.
Rename the disputed overhead metric as a serialized synchronized step breakdown and expose explicit measurement modes. Mark every instrumented timing and rate as diagnostic, validate the additive partition, and document why outside-simulation time is not removable overhead.
Follow-up polish from review of the runtime/synchronized-timing changes; no behavior change. - Drop the redundant ``dest=``/``default=False`` on runtime.py's ``--measure_synchronized_step_breakdown`` (argparse derives both) so the flag matches the eight RL adapter scripts. - Remove the single-use ``timer_context`` alias and enter the step-timing recorder alongside ``BenchmarkMonitor`` on one line, matching the adapters' context-manager pattern. - Reorder the ``build_runtime`` Args block to signature order (``aggregate_throughput`` before ``frames_per_environment_step``). - Clarify ``MeanStd.mean``/``std``: for effective-throughput fields these are the aggregate rate and the dispersion about the effective mean, not the arithmetic sample mean and standard deviation.
Bring PR isaac-sim#6553 on top of the benchmark timing work from PR isaac-sim#6474 so the benchmark library can dispatch the new RL entrypoints directly.
Move the supported benchmark workflows into isaaclab.benchmark and expose typed in-process dispatch for runtime, startup, training, and play benchmarks. Keep deprecated script and test namespace shims so existing callers can migrate without an immediate break.
Replace per-file Python shims with lazy module proxies so legacy imports remain compatible while Git can recognize the benchmark implementation moves. Retain type forwarding stubs and document removal in Isaac Lab 3.1.
Add a warmup_steps parameter to EnvironmentStepTimingRecorder that drops the first N ``env.step()`` calls (CUDA graph capture, lazy kernel compilation) from the recorded environment-step timing. In serialized mode the skipped steps' simulation call-count and time are rolled back so the recorded aggregate stays consistent. Expose it as an opt-in ``--warmup_steps`` flag (default 0, validated non-negative, recorded in metadata) on the eight RL train/play benchmark adapters. ``runtime.py`` is unchanged: its ``--warmup_frames`` already excludes the startup step before the recorder is installed. Add recorder unit tests for the host-return and serialized exclusion paths and a parse-level test rejecting a negative ``--warmup_steps``.
Collaborator
Author
|
Workstation measurement follow-up (
End-to-end per-run durations were 26 s for articulation methods, 8-9 s for rigid-object methods, 10-11 s for collection methods, and 2-5 s per data suite. All 18 runs completed with zero skips and zero tracebacks. Raw JSON and logs are retained on the workstation under |
This was referenced Jul 16, 2026
Make runtime and startup help bypass the required task check so the unified benchmark CLI can render its full options. Cover the forwarded-argv path that exposed the parser ordering bug.
Target the public benchmark backend modules after the standalone scripts became compatibility wrappers. This keeps parser validation attached to the implementation that owns it.
This was referenced Jul 17, 2026
AntoineRichard
marked this pull request as ready for review
July 20, 2026 15:21
AntoineRichard
requested review from
StafaH,
kellyguo11,
marcodiiga,
matthewtrepte,
myurasov-nv,
ooctipus and
pv-nvidia
as code owners
July 20, 2026 15:21
Contributor
|
Too many files changed for review. ( Bypass the limit by tagging |
Keep typed training and play requests equivalent to the CLI added by PR isaac-sim#6474. Translate warm-up steps through dispatch so callers do not need backend-specific arguments.
Scope sys.argv to the typed request while benchmark workflows run so nested AppLauncher parsing sees the same arguments as the workflow entry point. Restore the caller arguments after dispatch.
Restore warm-up handling after rebasing the benchmark adapters. Preserve caller backend state for in-process runs, expose workflow-specific result types, fail clearly when schema output has no bundle, and complete the public API documentation.
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.
AntoineRichard
force-pushed
the
antoiner/ovphysx-asset-micro-benchmarks
branch
from
July 20, 2026 20:28
75b7fcb to
747b63f
Compare
kellyguo11
approved these changes
Jul 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds kitless OVPhysX method and data-property micro-benchmarks for articulations, rigid objects, and rigid object collections. The method matrix covers Torch list/tensor index paths and native Warp mask paths. Data benchmarks refresh cached properties by advancing timestamps without charging random-data allocation to accessor timing.
These micro-benchmarks isolate Isaac Lab wrapper and backend-adapter overhead. Benchmark-mode mocks reuse device-resident read sources and skip mock-only NumPy write scatter, so native OVPhysX binding and solver work is deliberately outside the measurement. Fill-ratio sensitivity therefore remains outside this PR because it requires a production binding to be meaningful.
The validation also exposed and fixed a mock binding defect: structured Warp destinations now preserve their dtype instead of being copied through a scalar float temporary.
The benchmarks require the optional
ovphysxruntime wheel. Current workstation validation usedovphysx-0.5.2+head.f62c22207c. Sensor workloads remain in the following PR.Dependencies
Type of change
Validation
./isaaclab.sh -f./isaaclab.sh -d(build completed)./isaaclab.sh -p -m pytest source/isaaclab_ovphysx/test/assets/test_articulation_helpers.py -q(5 passed)--modevalues fail during argument parsing.747b63f238e: articulation (44), rigid object (15), rigid object collection (15).747b63f238e: articulation (59), rigid object (40), rigid object collection (78).Checklist
CONTRIBUTORS.md