Isaac Lab Benchmarking
Parameter references may be outdated. Always verify with ./isaaclab.sh -p <script> --help.
For profiling details (Tracy, Nsight), see the profiling skill.
For installation, see the install-isaaclab skill.
Setup
See the install-isaaclab skill for installation (clone, conda env, Isaac Sim linking).
Before Running Any Benchmark
- Use a WARM run for headline FPS/frametime — see the COLD/WARM/TRACY method in the
profiling skill
- Set CPU governor to performance — see
perf-tuning skill
- Do not patch Isaac Sim shutdown by default. If Tracy shutdown hangs after outputs are complete, use the scoped last-resort guidance in the
profiling skill
Benchmark Scripts
All in scripts/benchmarks/. Run via ./isaaclab.sh -p scripts/benchmarks/<script>.py.
| Script |
What it measures |
Key params |
benchmark_non_rl.py |
Environment step FPS (most common) |
--task, --num_envs, --num_frames |
benchmark_rlgames.py |
RL-Games training throughput |
--task, --num_envs, --max_iterations |
benchmark_rsl_rl.py |
RSL-RL training throughput |
--task, --num_envs, --max_iterations |
benchmark_cameras.py |
Camera system FPS + autotune |
--num_tiled_cameras, --num_standard_cameras, --height, --width, --autotune |
benchmark_load_robot.py |
Robot loading time |
--num_envs, --robot {anymal_d,h1,g1} |
benchmark_startup.py |
App startup time profiling |
--task (required), --num_envs, --top_n |
benchmark_lazy_export.py |
Lazy export/import speed |
--iterations, --tasks (stdout only, no JSON backend) |
benchmark_view_comparison.py |
XformPrimView vs PhysX |
--num_envs, --num_iterations, --profile (stdout/cProfile, no JSON backend) |
benchmark_xform_prim_view.py |
XformPrimView performance |
--num_envs, --num_iterations, --profile (stdout/cProfile, no JSON backend) |
Note: benchmark_lazy_export.py, benchmark_view_comparison.py, and benchmark_xform_prim_view.py
do NOT support --benchmark_backend or --output_path. They output results to stdout.
Use --profile (where available) to save cProfile .prof files.
Common params: --device, --enable_cameras, --benchmark_backend, --output_path, --distributed
Note: --headless is deprecated. Omit --viz for headless mode, or use --viz none.
Passing Kit args (for profiling, output control, etc.):
./isaaclab.sh -p scripts/benchmarks/benchmark_non_rl.py \
--task=Isaac-Ant-Direct-v0 --viz none --num_envs=4096 \
--kit_args "--/app/profilerBackend=tracy --/log/file=/tmp/kit.log"
Batch suites
bash scripts/benchmarks/run_training_benchmarks.sh # RSL-RL, 500 iters
bash scripts/benchmarks/run_non_rl_benchmarks.sh # non-RL, various env counts
bash scripts/benchmarks/run_physx_benchmarks.sh # PhysX assets
Critical Gotcha: Parameter Format
Isaac Lab uses UNDERSCORES (standard argparse). Isaac Sim uses HYPHENS.
Isaac Lab: --num_envs 4096 --num_frames 100 --enable_cameras
Isaac Sim: --num-cameras 8 --num-gpus 1 --num-frames 600
Mixing them up is a common source of silent misconfiguration.
Common Tasks and Env Counts
Camera tasks (add --enable_cameras):
Isaac-Cartpole-RGB-Camera-Direct-v0: 512-4096 envs
Classic physics (4096 / 8192 / 16384 envs):
Isaac-Ant-Direct-v0, Isaac-Cartpole-Direct-v0, Isaac-Humanoid-Direct-v0
Locomotion (4096 envs):
Isaac-Velocity-Rough-Anymal-C-v0, Isaac-Velocity-Rough-H1-v0, Isaac-Velocity-Rough-G1-v0
Manipulation (128-8192 envs):
Isaac-Reach-Franka-v0, Isaac-Factory-GearMesh-Direct-v0
Output Files
benchmark_<type>_<task>_<timestamp>.json — main results file
kit.log — execution log (if --/log/file= is set via --kit_args)
*.tracy / *.nsys-rep — profiling traces (only with profiling args)
JSON structure
Array of phase objects, each with phase_name, measurements (list of {name, data, type, unit}),
and metadata (list of {name, data, type}). Phases: benchmark_info, startup, runtime,
hardware_info, version_info. RL benchmarks add a train phase.
1---2name: benchmark-isaaclab3description: Run Isaac Lab benchmark scripts and interpret their outputs. Covers RL training throughput, non-RL environment step FPS, camera/load/startup benchmarks, batch suites, parameter gotchas, output files, and JSON result structure. Use when the user asks to run or compare Isaac Lab benchmarks. NOT for RL convergence or policy-quality validation, profiling capture (use profiling), trace analysis (use nsys-analyze), or applying performance fixes (use perf-tuning).4---56# Isaac Lab Benchmarking78> **Parameter references may be outdated.** Always verify with `./isaaclab.sh -p <script> --help`.9> For profiling details (Tracy, Nsight), see the `profiling` skill.10> For installation, see the `install-isaaclab` skill.1112## Setup1314See the `install-isaaclab` skill for installation (clone, conda env, Isaac Sim linking).1516## Before Running Any Benchmark17181. **Use a WARM run for headline FPS/frametime** — see the COLD/WARM/TRACY method in the `profiling` skill192. **Set CPU governor to performance** — see `perf-tuning` skill203. **Do not patch Isaac Sim shutdown by default.** If Tracy shutdown hangs after outputs are complete, use the scoped last-resort guidance in the `profiling` skill2122## Benchmark Scripts2324All in `scripts/benchmarks/`. Run via `./isaaclab.sh -p scripts/benchmarks/<script>.py`.2526| Script | What it measures | Key params |27|--------|-----------------|------------|28| `benchmark_non_rl.py` | Environment step FPS (most common) | `--task`, `--num_envs`, `--num_frames` |29| `benchmark_rlgames.py` | RL-Games training throughput | `--task`, `--num_envs`, `--max_iterations` |30| `benchmark_rsl_rl.py` | RSL-RL training throughput | `--task`, `--num_envs`, `--max_iterations` |31| `benchmark_cameras.py` | Camera system FPS + autotune | `--num_tiled_cameras`, `--num_standard_cameras`, `--height`, `--width`, `--autotune` |32| `benchmark_load_robot.py` | Robot loading time | `--num_envs`, `--robot {anymal_d,h1,g1}` |33| `benchmark_startup.py` | App startup time profiling | `--task` (required), `--num_envs`, `--top_n` |34| `benchmark_lazy_export.py` | Lazy export/import speed | `--iterations`, `--tasks` (stdout only, no JSON backend) |35| `benchmark_view_comparison.py` | XformPrimView vs PhysX | `--num_envs`, `--num_iterations`, `--profile` (stdout/cProfile, no JSON backend) |36| `benchmark_xform_prim_view.py` | XformPrimView performance | `--num_envs`, `--num_iterations`, `--profile` (stdout/cProfile, no JSON backend) |3738> **Note:** `benchmark_lazy_export.py`, `benchmark_view_comparison.py`, and `benchmark_xform_prim_view.py`39> do NOT support `--benchmark_backend` or `--output_path`. They output results to stdout.40> Use `--profile` (where available) to save cProfile `.prof` files.4142**Common params:** `--device`, `--enable_cameras`, `--benchmark_backend`, `--output_path`, `--distributed`4344> **Note:** `--headless` is deprecated. Omit `--viz` for headless mode, or use `--viz none`.4546**Passing Kit args** (for profiling, output control, etc.):47```bash48./isaaclab.sh -p scripts/benchmarks/benchmark_non_rl.py \49 --task=Isaac-Ant-Direct-v0 --viz none --num_envs=4096 \50 --kit_args "--/app/profilerBackend=tracy --/log/file=/tmp/kit.log"51```5253### Batch suites54```bash55bash scripts/benchmarks/run_training_benchmarks.sh # RSL-RL, 500 iters56bash scripts/benchmarks/run_non_rl_benchmarks.sh # non-RL, various env counts57bash scripts/benchmarks/run_physx_benchmarks.sh # PhysX assets58```5960## Critical Gotcha: Parameter Format6162Isaac Lab uses **UNDERSCORES** (standard argparse). Isaac Sim uses **HYPHENS**.63```64Isaac Lab: --num_envs 4096 --num_frames 100 --enable_cameras65Isaac Sim: --num-cameras 8 --num-gpus 1 --num-frames 60066```67Mixing them up is a common source of silent misconfiguration.6869## Common Tasks and Env Counts7071**Camera tasks** (add `--enable_cameras`):72- `Isaac-Cartpole-RGB-Camera-Direct-v0`: 512-4096 envs7374**Classic physics** (4096 / 8192 / 16384 envs):75- `Isaac-Ant-Direct-v0`, `Isaac-Cartpole-Direct-v0`, `Isaac-Humanoid-Direct-v0`7677**Locomotion** (4096 envs):78- `Isaac-Velocity-Rough-Anymal-C-v0`, `Isaac-Velocity-Rough-H1-v0`, `Isaac-Velocity-Rough-G1-v0`7980**Manipulation** (128-8192 envs):81- `Isaac-Reach-Franka-v0`, `Isaac-Factory-GearMesh-Direct-v0`8283## Output Files8485- `benchmark_<type>_<task>_<timestamp>.json` — main results file86- `kit.log` — execution log (if `--/log/file=` is set via `--kit_args`)87- `*.tracy` / `*.nsys-rep` — profiling traces (only with profiling args)8889### JSON structure90Array of phase objects, each with `phase_name`, `measurements` (list of `{name, data, type, unit}`),91and `metadata` (list of `{name, data, type}`). Phases: `benchmark_info`, `startup`, `runtime`,92`hardware_info`, `version_info`. RL benchmarks add a `train` phase.9394---