perf-tuning

par nvidia

Résoudre les problèmes de performance courants de Kit/Isaac Sim/Isaac Lab à l'aide de paramètres et de modifications de configuration spécifiques. Couvre les blocages PresentFrame, …

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

Plus de skills de nvidia

compileiq-debug
nvidia
Utilisez quand quelque chose ne va pas : Search() bloque, toutes les évaluations retournent INVALID_SCORE, les scores ne s'améliorent pas, chaque configuration retourne le même nombre, erreurs ptxas…
create-github-pr
nvidia
Créer des pull requests GitHub en utilisant l'interface en ligne de commande gh. Utiliser lorsque l'utilisateur souhaite créer une nouvelle PR, soumettre du code pour révision, ou ouvrir une pull request. Mots-clés de déclenchement -…
nemoclaw-maintainer-cross-issue-sweep
nvidia
Analyse les autres problèmes ouverts pour trouver ceux qu’une PR donnée pourrait également corriger ou casser accidentellement. Génère des opportunités de correctifs adjacents et des risques de contradiction avec fichier:ligne…
fhir-basics
nvidia
Apprend aux agents comment fonctionnent les API FHIR R4, quelles ressources sont disponibles, comment les interroger avec des paramètres de recherche, et comment analyser correctement tous les formats de réponse…
compileiq-validate-result
nvidia
Utiliser APRÈS qu'une recherche soit terminée et AVANT de réclamer un accélérateur ou d'expédier un ACF. Charge le CSV dump_results, extrait les K meilleurs candidats (mono-objectif)…
changelog-audit
nvidia
Auditer le CHANGELOG.md de Warp avant une publication : récupérer les entrées perdues, trier par impact utilisateur, affiner le langage des entrées, ajuster les retours à la ligne et (en mode branche de publication) mettre à jour la comparaison…
maintain-dynamic-plugins
nvidia
Maintenir les chargeurs de plugins dynamiques NeMo Relay, les manifestes, les SDK natifs Rust, le protocole worker gRPC, le SDK worker Python, la documentation, les tests et la couverture du workflow de publication
dgx-diagnose
nvidia
Diagnostiquer les problèmes courants du DGX Station GB300 — plantages CUDA, ciblage incorrect du GPU, bugs de conteneur vLLM/SGLang, problèmes d'état MIG, erreurs NVLink/Fabric Manager,…