npx skills add ...
npx skills add nvidia/omniperf --skill perf-tuning
Resolve common Kit/Isaac Sim/Isaac Lab performance issues using specific settings and configuration changes. Covers PresentFrame stalls, resolveSamplerFeedback, headless mode, multi-GPU tradeoffs, DLSS/DLSS-G, PhysX tuning, RTX presets (isaaclab_performance/balanced/quality), viewport gizmos, HydraEngine waitIdle, fsWatcher overhead, and CPU governor. Use when profiling data shows a specific bottleneck and you need the fix, when someone asks "why is it slow" and you have Tracy/nsys evidence, or when tuning RTX settings for GPU-bound workloads. NOT for: initial triage (use diagnose-perf), capturing profiles (use profiling), or analyzing traces (use nsys-analyze).
npx skills add nvidia/omniperf --skill perf-tuning
Specific fixes for performance issues identified through profiling.
Prerequisite: you should already know where the bottleneck is (from diagnose-perf, profiling, or nsys-analyze skills).
Two causes:
GPU work exceeds frame budget → CPU waits for swapchain buffer.
Verify: Enable GPU zones in Tracy and check if GPU frametime > CPU frametime.
Fix: Reduce GPU workload — see RTX Tuning below.
Virtual framebuffer causes driver present timing issues.
Fix: Use a physical monitor or run in headless mode.
Texture Streaming bug causes per-frame thread waits proportional to RenderProduct count.
Fix: Disable Texture Streaming:
Impact: ~6.72 ms saved per frame (measured). VRAM usage may increase — verify headroom.
For simulation-only workloads (RL training, SDG, automated benchmarks):
Also disable viewport updates in Python:
Always check Tracy GPU zones to verify only intended cameras are rendering:
extrt/rtx/rtaTexturesMC_* (camera textures) and t_viewport_ViewportTexture_* (viewport textures)rtaTexturesMC_3_RP_1920x1080)TiledCameraSensor when the workflow supports it.Default profilerMask=1 hides internal PhysX zones. To diagnose PhysX bottlenecks, remove the mask arg (defaults to ALL).
| Setting | Effect |
|---|---|
--/physics/suppressReadback=true | Suppress GPU→CPU readback |
--/physics/updateToUsd=false | Skip physics→USD writeback (only if not reading state from USD) |
--/physics/disableContactProcessing=true | Skip contact event callbacks (if no subscriber needs them) |
Applicable when previous-frame physics results are acceptable (RL training, SDG).
The default solver is PGS. The profiling guide calls out switching PhysxSceneAPI.solverType to TGS as a scenario-dependent tuning option; verify with a WARM benchmark before keeping it.
~0.1 ms/frame overhead for hot-reload file monitoring. Disable for benchmarks:
Gizmos (manipulators, grid, selection outlines) cause significant CPU overhead in scenes with many objects.
DLSS-G inserts AI sub-frames between real frames:
| GPU Gen | Sub-frame Multiplier |
|---|---|
| Ada (RTX 40) | 2x |
| Blackwell (RTX 50) | 3–4x |
Rule: DLSS-G is for viewport display only. Disable for simulation/benchmarks:
When /app/hydraEngine/waitIdle=true (default), main thread blocks every frame until GPU finishes.
Safe for rendering-only workloads. Keep true if reading GPU results same-frame (physics readback, synchronous sensors).
Multi-GPU adds CPU overhead (job distribution, per-GPU setup, data gathering). Only effective when GPU is the clear bottleneck.
| Scenario | Recommendation |
|---|---|
| High-res (4K) × many cameras (4–8) | Multi-GPU effective |
| Low-res (1080p) × few cameras (1–2) | Single GPU faster |
| CPU-bottlenecked | Adding GPUs = pointless |
Always verify GPU-bound with Tracy/nsys before adding GPUs.
Real impact: powersave → performance saved ~4 ms/frame in measured cases.
Start from an IsaacLab preset, then selectively re-enable features you need.
| Preset | FPS | Δ vs default |
|---|---|---|
| (default) | 51.85 | — |
isaaclab_quality | 70.25 | +35.5% |
isaaclab_balanced | 87.81 | +69.4% |
isaaclab_performance | 111.90 | +115.8% |
| execMode | Mode | FPS | Δ vs default |
|---|---|---|---|
| 0 | Performance | 106.24 | +104.9% |
| 1 | Balanced | 87.08 | +68.0% |
| 2 | Quality | 71.42 | +37.7% |
~91% of isaaclab_performance's gain comes from this single setting.
For detailed per-parameter comparison across all three presets, see references/rtx-presets.md.
--/rtx-transient/dlssg/enabled=false)--/rtx/post/dlss/execMode=0 (biggest single lever)isaaclab_performance preset for maximum speed