Flamegraphs

mohitmishra786/low-level-dev-skills/skills/profilers/flamegraphs

作者 mohitmishra786bdc58472fa9f无许可证253 个星标收录于 2026年10月9日更新于 2026年10月9日仓库3个月前更新

Flamegraph generation and interpretation skill. Use when converting perf, Valgrind Callgrind, or other profiler output into SVG flamegraphs using Brendan Gregg's FlameGraph tools, or when reading flamegraphs to identify performance bottlenecks. Activates on queries about flamegraphs, stackcollapse, flamegraph.svg, identifying hot frames, wide vs tall frames, or performance visualisation.

AI 生成的概览

指导如何从性能分析器输出生成 SVG 火焰图,并解读火焰图以定位性能瓶颈。

功能
该技能引导智能体使用 Brendan Gregg 的 FlameGraph 工具,完成从性能分析器数据到 SVG 火焰图的完整流程,涵盖 perf、Valgrind Callgrind、Go pprof、DTrace 和 async-profiler 等输入。它还讲解如何阅读火焰图,包括宽帧与高帧的含义、前后对比的差分火焰图,以及 flamegraph.pl 的各类选项。它输出的是命令步骤和解读指导,本身不生成文件。
适用场景
适用于将 perf、Callgrind 或其他性能分析器输出转换为 SVG 火焰图,或阅读已有火焰图以找出热点帧。也适合用差分火焰图对比优化前后的性能剖析结果。
运行要求
需要 FlameGraph 工具脚本(stackcollapse-perf.pl、flamegraph.pl、difffolded.pl 等),以及相应的性能分析器,如 perf、Valgrind Callgrind、Go pprof、DTrace 或 async-profiler。该技能本身不附带脚本,也不需要凭据,但克隆 FlameGraph 仓库需要网络访问。

Flamegraphs

Purpose

Guide agents through the pipeline from profiler data to SVG flamegraph, and teach interpretation of flamegraphs to drive concrete optimisation decisions.

Triggers

  • "How do I generate a flamegraph from perf data?"
  • "How do I read a flamegraph?"
  • "The flamegraph shows a wide frame — what does that mean?"
  • "How do I generate a flamegraph from Callgrind?"
  • "I want to compare two flamegraphs (before/after)"

Workflow

1. Install FlameGraph tools

bash
git clone https://github.com/brendangregg/FlameGraph# No install needed; scripts are in the repoexport PATH=$PATH:/path/to/FlameGraph

2. perf → flamegraph (most common path)

bash
# Step 1: recordperf record -F 999 -g -o perf.data ./prog
# Step 2: generate script outputperf script -i perf.data > out.perf
# Step 3: collapse stacksstackcollapse-perf.pl out.perf > out.folded
# Step 4: generate SVGflamegraph.pl out.folded > flamegraph.svg
# Step 5: viewxdg-open flamegraph.svg     # Linuxopen flamegraph.svg          # macOS

One-liner:

bash
perf record -F 999 -g ./prog && perf script | stackcollapse-perf.pl | flamegraph.pl > fg.svg

3. Differential flamegraph (before/after)

bash
# Collect two profilesperf record -g -o before.data ./prog_oldperf record -g -o after.data ./prog_new
# Collapseperf script -i before.data | stackcollapse-perf.pl > before.foldedperf script -i after.data  | stackcollapse-perf.pl > after.folded
# Diff (red = regressed, blue = improved)difffolded.pl before.folded after.folded | flamegraph.pl > diff.svg

4. Callgrind → flamegraph

bash
valgrind --tool=callgrind --callgrind-out-file=cg.out ./progstackcollapse-callgrind.pl cg.out | flamegraph.pl > fg.svg

5. Other profiler inputs

bash
# Go pprofgo tool pprof -raw -output=prof.txt progstackcollapse-go.pl prof.txt | flamegraph.pl > fg.svg
# DTracedtrace -x ustackframes=100 -n 'profile-99 /execname=="prog"/ { @[ustack()] = count(); }' \  -o out.stacks sleep 10stackcollapse.pl out.stacks | flamegraph.pl > fg.svg
# Java (async-profiler)async-profiler -d 30 -f out.collapsed PIDflamegraph.pl out.collapsed > fg.svg

6. Reading flamegraphs

A flamegraph is a call-stack visualisation:

  • X axis: time on CPU (not time sequence) — wider = more time
  • Y axis: call stack depth — taller = deeper call chain
  • Color: random (no significance) — unless using differential mode

What to look for:

PatternMeaningAction
Wide frame near bottomFunction itself is hotOptimise that function
Wide frame with tall narrow towersCalling many different calleesHot dispatch; reduce call overhead
Very tall stack with wide baseDeep recursionCheck recursion depth; consider iterative approach
Plateau at the topLeaf function with no calleesThis leaf is the actual hotspot
Many narrow identical stacksMany threads doing the same workConsider parallelism or batching

Identifying the actionable hotspot:

  1. Find the widest top frame (a frame with no or narrow children above it)
  2. That is where CPU time is actually spent
  3. Trace down to understand what called it and why

Differential flamegraph:

  • Red frames: more time in new profile (regression)
  • Blue frames: less time in new profile (improvement)
  • Frames only in one profile appear solid colored

7. flamegraph.pl options

bash
flamegraph.pl --title "My App" \              --subtitle "Release build, workload X" \              --width 1600 \              --height 16 \              --minwidth 0.5 \              --colors java \              out.folded > fg.svg
OptionEffect
--titleSVG title
--widthWidth in pixels
--heightFrame height in pixels
--minwidthOmit frames < N% (reduces clutter)
--colorsPalette: hot (default), mem, io, java, js, perl, red, green, blue
--invertedIcicle chart (roots at top)
--reverseReverse stacks
--cpConsistent palette (same frame = same color across SVGs)

References

For tool installation, stackcollapse scripts, and palette options, see references/tools.md [blocked].

Related skills

  • Use skills/profilers/linux-perf to collect perf data
  • Use skills/profilers/valgrind to collect Callgrind data
  • Use skills/compilers/clang for LLVM PGO from sampling profiles

来源与署名

来源:mohitmishra786/low-level-dev-skills位于skills/profilers/flamegraphs提交bdc5847

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架