tracy-memory
Skill34 starsChanged 7 months agoApache-2.0View on GitHub
Profile CPU and GPU memory allocations using Tracy in Kit-based applications after Tracy capture tooling is installed. Covers LD_PRELOAD setup for liballocwrapper.so, Kit memory-channel flags, capture binary isolation (unset LD_PRELOAD), tracy-update strip-test verification, Tracy Memory tab analysis, and debug symbol requirements. Use when investigating memory leaks, allocation hotspots, or VRAM growth in Isaac Sim, Isaac Lab, or Kit apps. Requires profiling capture setup plus install-profilers. NOT for generic trace capture (use profiling) or non-memory trace analysis (use nsys-analyze).
In this repository12 other files it gives its agents.
- benchmark-isaaclabSkill
- benchmark-isaacsimSkill
- diagnose-perfSkill
- install-isaaclabSkill
- install-isaacsimSkill
- install-profilersSkill
- kit-app-streaming-debugSkill
- nsys-analyzeSkill
- nvtx-pythonSkill
- perf-tuningSkill
- profiling-apiSkill
- profilingSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 49
Only Kit should use the interposer.
- Distinctive: line 61
Do not rely on Kit log lines alone.
- Distinctive: line 75
Must see both lines:
- Very specific: line 81
If you see Failed to load library: 'liballocwrapper.so' → LD_PRELOAD path is wrong.
- Very specific: line 90
If Memory tab is empty: recheck LD_PRELOAD path and cpu.memory channel setting.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Tracy Memory Profiling for Kit-Based Applications
Capture per-allocation CPU and GPU memory data in Tracy.
Prerequisite: Tracy capture setup (see profiling skill), install-profilers for binaries.
Step 1: Environment Variables (Linux, required)
The omni.cpumemorytracking extension uses LD_PRELOAD to intercept malloc/free. Without it, Kit logs Failed to load library: 'liballocwrapper.so' and zero memory events are captured.
# Path varies by packman version
export LD_PRELOAD=~/.cache/packman/chk/allocmemwrapper/<version>/liballocwrapper.so
export TRACY_USE_LIB_UNWIND_FOR_BT=1 # libunwind-based backtrace
export TRACY_NO_SYS_TRACE=1 # reduce overhead
export TRACY_PORT="${TRACY_PORT:-8086}" # use 8087 for Isaac Sim 6.0+ when neededStep 2: Kit Flags
# Base Tracy backend
--/app/profilerBackend=tracy
--/app/profileFromStart=true
--/profiler/enabled=true
--/plugins/carb.profiler-tracy.plugin/skipEventsOnShutdown=true
--/plugins/carb.profiler-tracy.plugin/memoryTraceStackCaptureDepth=16
# Reduce noise
--/profiler/channels/carb.tasking/enabled=false
--/profiler/channels/carb.events/enabled=false
# CPU memory tracking
--enable omni.cpumemorytracking
--/profiler/channels/cpu.memory/enabled=true
--/plugins/carb.cpumemorytracking.plugin/minCpuAllocSizeInBytesToTrack=1024
# GPU memory tracking
--/plugins/carb.memorytracking.plugin/enabled=true
--/profiler/channels/graphics.memory/enabled=trueStep 3: Unset LD_PRELOAD Before Capture Binary
Only Kit should use the interposer. The Tracy capture binary must NOT inherit it:
# After launching Kit with LD_PRELOAD in background
unset LD_PRELOAD
TRACY_CAPTURE_BIN=$(command -v capture || command -v capture-release || command -v tracy-capture)
[ -n "$TRACY_CAPTURE_BIN" ] || { echo "Missing capture/capture-release/tracy-capture binary"; exit 1; }
"$TRACY_CAPTURE_BIN" -o memtrace.tracy -f -p "${TRACY_PORT:-8086}"Step 4: Verify — Strip Test (MANDATORY)
Do not rely on Kit log lines alone. Verify actual memory data in the output:
# Strip memory events and compare file sizes
TRACY_UPDATE_BIN=$(command -v update || command -v tracy-update)
[ -n "$TRACY_UPDATE_BIN" ] || { echo "Missing update/tracy-update binary; see install-profilers"; exit 1; }
"$TRACY_UPDATE_BIN" -s M memtrace.tracy memtrace_no_mem.tracy
# Good: 67 MB → 44 MB (~23 MB of memory data)
# Broken: 18 MB → 18 MB (zero memory data — LD_PRELOAD failed)Kit Log Verification
Must see both lines:
[carb.cpumemorytracking] Loaded shared library: 'liballocwrapper.so'
[carb.cpumemorytracking] set memory alloc/free callbacks successfully!If you see Failed to load library: 'liballocwrapper.so' → LD_PRELOAD path is wrong. Stop and fix before re-running.
Step 5: Analysis in Tracy
Open in Tracy GUI → Memory tab. A successful capture shows:
- Live counters: Active allocations, Memory usage
- Callstack tree grouping allocations by function
- Timeline showing allocation/free events
If Memory tab is empty: recheck LD_PRELOAD path and cpu.memory channel setting.
Debug Symbols
?? and [unknown] ??:??? in allocation callstacks = debug symbols missing. Stripped release binaries only have addresses.
To see function names and source locations:
- Build with
RelWithDebInfoor keep.debug/.pdbfiles - Or use
debuginfod/ Tracy's symbol path setting (Tools → Resolve symbol path)
Without symbols: allocation size/count/lifetime analysis still works, but code-level attribution doesn't.
Common Mistakes
- Missing
LD_PRELOAD=liballocwrapper.so→ extension starts but hooks never install - Missing
TRACY_USE_LIB_UNWIND_FOR_BT=1→ poor backtrace quality - Missing GPU memory: need both
carb.memorytracking.plugin/enabled=trueANDgraphics.memorychannel - LD_PRELOAD bleeding into capture binary → corrupt capture
- Trusting Kit log text without strip test → false positive
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

