perf-tuning

작성자: nvidia

Resolve common Kit/Isaac Sim/Isaac Lab performance issues using specific settings and configuration changes. Covers PresentFrame stalls,…

npx skills add https://github.com/nvidia/omniperf --skill perf-tuning

Performance Tuning for Kit / Isaac Sim / Isaac Lab

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).

PresentFrame is Abnormally Slow

Two causes:

GPU Backpressure

GPU work exceeds frame budget → CPU waits for swapchain buffer.

Verify: Enable GPU zones in Tracy and check if GPU frametime > CPU frametime.

--/profiler/gpu/tracyInject/enabled=true --/profiler/gpu=true --/rtx/addTileGpuAnnotations=true

Fix: Reduce GPU workload — see RTX Tuning below.

VNC / Remote Desktop

Virtual framebuffer causes driver present timing issues.

Fix: Use a physical monitor or run in headless mode.

resolveSamplerFeedback is Abnormally Slow

Texture Streaming bug causes per-frame thread waits proportional to RenderProduct count.

Fix: Disable Texture Streaming:

--/rtx-transient/resourcemanager/enableTextureStreaming=false

Impact: ~6.72 ms saved per frame (measured). VRAM usage may increase — verify headroom.

Headless Mode (3–4 ms GPU savings)

For simulation-only workloads (RL training, SDG, automated benchmarks):

# Isaac Sim via SimulationApp
simulation_app = SimulationApp({"headless": True, "disable_viewport_updates": True})
# Kit args
--no-window --/app/window/hideUi=True

Also disable viewport updates in Python:

from omni.kit.viewport.utility import get_active_viewport
get_active_viewport().updates_enabled = False

Multi-Camera Render Count Verification

Always check Tracy GPU zones to verify only intended cameras are rendering:

  • Count extrt/rtx/rtaTexturesMC_* (camera textures) and t_viewport_ViewportTexture_* (viewport textures)
  • Verify resolution in zone names matches intent (e.g., rtaTexturesMC_3_RP_1920x1080)
  • In headless mode, check that unnecessary viewport textures aren't rendering in background

Common Multi-Camera Fixes

  • Remove per-camera viewports; keep render products only.
  • Replace separate camera render products with TiledCameraSensor when the workflow supports it.
  • Destroy or disable the default viewport after sensor setup in headless benchmark/simulation runs.
from isaacsim.sensors.experimental.camera import TiledCameraSensor

sensor = TiledCameraSensor(
    camera_paths,          # List[str]
    resolution=(H, W),     # Height, Width
    annotators=["rgb"],
)
data, info = sensor.get_data("rgb")

PhysX Tuning

Expose Full PhysX Detail

Default profilerMask=1 hides internal PhysX zones. To diagnose PhysX bottlenecks, remove the mask arg (defaults to ALL).

Key Settings

SettingEffect
--/physics/suppressReadback=trueSuppress GPU→CPU readback
--/physics/updateToUsd=falseSkip physics→USD writeback (only if not reading state from USD)
--/physics/disableContactProcessing=trueSkip contact event callbacks (if no subscriber needs them)

Async Physics (USD Schema)

from pxr import UsdPhysics, PhysxSchema

stage = omni.usd.get_context().get_stage()
for prim in stage.Traverse():
    if prim.IsA(UsdPhysics.Scene):
        api = PhysxSchema.PhysxSceneAPI.Apply(prim)
        api.CreateUpdateTypeAttr().Set(PhysxSchema.Tokens.asynchronous)

Applicable when previous-frame physics results are acceptable (RL training, SDG).

Solver Type

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.

api = PhysxSchema.PhysxSceneAPI.Apply(physics_scene_prim)
api.CreateSolverTypeAttr().Set("TGS")

Extension Change Detection (fsWatcher)

~0.1 ms/frame overhead for hot-reload file monitoring. Disable for benchmarks:

--/app/extensions/fsWatcherEnabled=false

Viewport Gizmo Overhead

Gizmos (manipulators, grid, selection outlines) cause significant CPU overhead in scenes with many objects.

--/persistent/app/viewport/displayOptions=0
--/persistent/app/viewport/gizmo/enabled=false

DLSS-G (Frame Generation) — Know What You're Measuring

DLSS-G inserts AI sub-frames between real frames:

  • Viewport HUD FPS includes sub-frames → inflated by 2–4x
  • Tracy/benchmark frametime FPS = actual rendering FPS
GPU GenSub-frame Multiplier
Ada (RTX 40)2x
Blackwell (RTX 50)3–4x

Rule: DLSS-G is for viewport display only. Disable for simulation/benchmarks:

--/rtx-transient/dlssg/enabled=false  # default is off, but verify

HydraEngine waitIdle

When /app/hydraEngine/waitIdle=true (default), main thread blocks every frame until GPU finishes.

--/app/hydraEngine/waitIdle=false  # allow CPU-GPU pipelining

Safe for rendering-only workloads. Keep true if reading GPU results same-frame (physics readback, synchronous sensors).

Multi-GPU — Not Always Faster

Multi-GPU adds CPU overhead (job distribution, per-GPU setup, data gathering). Only effective when GPU is the clear bottleneck.

ScenarioRecommendation
High-res (4K) × many cameras (4–8)Multi-GPU effective
Low-res (1080p) × few cameras (1–2)Single GPU faster
CPU-bottleneckedAdding GPUs = pointless

Always verify GPU-bound with Tracy/nsys before adding GPUs.

CPU Governor

# Check
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor | sort | uniq -c
# Fix
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Real impact: powersaveperformance saved ~4 ms/frame in measured cases.

RTX Tuning When GPU-Bound

Recommended Approach

Start from an IsaacLab preset, then selectively re-enable features you need.

IsaacLab Presets (ChessRTX path-traced, RTX PRO 6000 Blackwell)

PresetFPSΔ vs default
(default)51.85
isaaclab_quality70.25+35.5%
isaaclab_balanced87.81+69.4%
isaaclab_performance111.90+115.8%

DLSS execMode — Single Biggest Lever

execModeModeFPSΔ vs default
0Performance106.24+104.9%
1Balanced87.08+68.0%
2Quality71.42+37.7%
--/rtx/post/dlss/execMode=0  # always specify 0/1/2 — mode 3 (Auto) broken in headless

~91% of isaaclab_performance's gain comes from this single setting.

Full Preset Parameter Table

For detailed per-parameter comparison across all three presets, see references/rtx-presets.md.

Tuning Checklist

  1. Confirm GPU-bound with Tracy/nsys
  2. Verify DLSS-G off for simulation (--/rtx-transient/dlssg/enabled=false)
  3. Set --/rtx/post/dlss/execMode=0 (biggest single lever)
  4. Apply isaaclab_performance preset for maximum speed
  5. Selectively re-enable visual features as needed
  6. Scene-dependent — numbers will vary

nvidia의 다른 스킬

compileiq-debug
nvidia
Use when something is wrong: Search() hangs, all evaluations return INVALID_SCORE, scores aren't improving, every config returns the same number, ptxas errors…
official
create-github-pr
nvidia
gh CLI를 사용하여 GitHub 풀 리퀘스트를 생성합니다. 사용자가 새 PR을 만들거나, 코드 리뷰를 제출하거나, 풀 리퀘스트를 열고자 할 때 사용합니다. 트리거 키워드 -…
official
diagnose-perf
nvidia
First-responder performance triage for Isaac Sim and Isaac Lab. Identifies bottleneck category (GPU-bound, CPU-bound, VRAM, loading) using nvidia-smi and…
official
eagle3-review-logs
nvidia
Review EAGLE3 pipeline experiment logs from the launcher's experiments/ directory. Summarizes pass/fail status for all 4 tasks, diagnoses failures with root…
official
nemoclaw-maintainer-cross-issue-sweep
nvidia
다른 열린 이슈들을 스캔하여 주어진 PR이 함께 수정하거나 실수로 망가뜨릴 수 있는 이슈를 찾습니다. 인접 수정 기회와 모순 위험을 file:line…과 함께 출력합니다.
official
karpathy-guidelines
nvidia
일반적인 LLM 코딩 실수를 줄이기 위한 행동 지침입니다. 코드 작성, 검토 또는 리팩토링 시 과도한 복잡성을 피하고 정밀한 변경을 위해 사용하세요.
official
fhir-basics
nvidia
에이전트에게 FHIR R4 API의 작동 방식, 사용 가능한 리소스, 검색 매개변수를 사용한 쿼리 방법, 모든 응답 형식을 올바르게 파싱하는 방법을 가르칩니다…
official
underdeclared-agent
nvidia
유용한 도우미 에이전트
official