npx skills add ...
npx skills add nvidia/omniperf --skill nsys-analyze
Analyze profiling data from Kit-based apps. Covers Omniverse-specific NVTX zone interpretation, phase detection using sqlite3, Tracy Statistics/Range Limit analysis, csvexport fallback queries, and two-version comparison methodology. Use after capturing profiles with the profiling skill. NOT for capturing traces (use profiling), adding zones to code (use profiling-api), or applying fixes (use perf-tuning).
npx skills add nvidia/omniperf --skill nsys-analyze
Analyze profiling data from Kit, Isaac Sim, and Isaac Lab using sqlite3 (for .nsys-rep), Tracy Statistics/Range Limit (primary .tracy path), and csvexport (automated .tracy fallback).
For capturing profiles and installing tools, see the profiling and install-profilers skills.
Required tools: nsys, sqlite3, csvexport; Tracy GUI is needed for the primary .tracy Statistics workflow. See install-profilers skill.
| Zone Pattern | Meaning | Phase |
|---|---|---|
App Update / App Main loop | Frame boundaries | Runtime |
UsdFileOp / UsdFileOp::open / UsdFileOp::newStage | Stage operations | Startup/Loading |
UsdContext::Impl::render | USD render context | Runtime |
RtxHydraEngine::render* | RTX render passes | Runtime |
Hydra render views* | Hydra render delegate ops | Runtime |
OmniGraph::* / ComputeGraphImpl::* | OmniGraph compute | Runtime |
GeoTreeNode::* / Fabric::* | Fabric/scene population | Loading/Runtime |
Carbonite::* / carb::* | Low-level framework (noise — exclude) | All |
Thread waiting... | Idle thread (noise — exclude) | All |
Executing task / Running fiber | Task scheduler (noise — exclude) | All |
Kit apps have phases: startup → loading → runtime → shutdown.
App Update frameApp Update zone (NOT App::beginUpdate)Note: Loading in Kit apps often happens during runtime as a long frame, not as a separate phase before the first frame. The 5× median threshold reliably separates loading spikes from runtime frames.
| Table | Use |
|---|---|
NVTX_EVENTS | NVTX ranges/markers. No name column — use text (inline) or join textId→StringIds.id. |
StringIds | String lookup (id → value) |
CUPTI_ACTIVITY_KIND_KERNEL | CUDA kernel launches (empty for Kit/RTX apps — normal) |
TARGET_INFO_GPU | GPU hardware info |
TARGET_INFO_SYSTEM_ENV | System environment |
Use Tracy GUI Statistics for .tracy files when the goal is hotspot ranking, regression analysis, or optimization comparison.
.tracy file in Tracy Profiler.Do not compare a single frame unless the issue is known to occur in one frame and is reproduced across multiple runs.
Inspect the header before scripting against csvexport output. Tracy versions and builds can differ:
name, mean, count, and total_time.total_ns, counts, and mean_ns.Normalize the column names in scripts instead of assuming one schema.
Data is pre-aggregated — one row per unique zone, covering the entire trace (no phase separation).
Tracy CSV limitation: No per-invocation timestamps — only aggregates. For phase-aware analysis, prefer the nsys SQLite path.
Run the overview/frames/zones queries (Steps 2-3) on both databases, save outputs, then compare.
Compare with Python:
The goal: not just "FPS dropped 10%" but "FPS dropped 10% because
rtUpdatePipeline added 59ms/frame in v2, a new shader pipeline
recompilation step not present in v1."