perf 与火焰图读 C++ 热点
本文对应 成长路径 C++ / 系统调试:用 perf + 火焰图 找用户态 CPU 热点。
采样
perf record -g --call-graph dwarf -F 99 ./app
perf script > out.perf保留 调试符号:-g 编译,或安装 app.debug 分离符号。
火焰图(Brendan Gregg 工具)
git clone https://github.com/brendangregg/FlameGraph.git
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > fg.svg横条越宽 累计 CPU 越多;纵轴为 调用栈深度。
C++ 注意
- 模板栈可能 极深,关注 业务函数名。
- LTO 后符号可能合并,对比 优化前后 用同一工具链。
与 DPDK
数据面线程需 对指定 CPU 采样:
perf record -C 2 -g -- sleep 30