perf record 进阶
更新时间:2026-10-01。已有 perf record,本文讲采集质量和开销控制。
一、调用栈三种方式
- fp:靠帧指针,最省,但二进制
-fomit-frame-pointer时栈断裂。 - dwarf:用调试信息回溯,准但开销/数据量大(注意
--call-graph dwarf,大小)。 - lbr:用硬件最后分支记录,开销低、适合深栈/内核,但深度有限。
二、过滤与开销
:u/:k 限定用户态/内核态;-C/-p/-t 按 CPU/进程/线程;选择合适 -F,避免高频把 perf.data 撑爆和扰动目标;多事件同采注意复用。

三、常见坑
- fp 栈断裂得到残缺火焰图。
- 频率过高扰动结果、磁盘爆。
- 忘记带符号(strip)导致地址无名。
- dwarf 栈缓冲太小,深层调用截断。
小结
调用栈按 fp/dwarf/lbr 取舍,配合范围过滤和克制频率,才能低扰动拿到完整可解释样本。下一篇 火焰图深入。
总结
perf record 的质量取决于调用栈采集方式:fp 最省但二进制 -fomit-frame-pointer 时栈会断裂,dwarf 靠调试信息回溯最准但开销和数据量大、缓冲过小会截断深栈,lbr 用硬件最后分支记录、开销低适合深栈/内核但深度有限;再用 :u/:k 限定用户/内核态、-C/-p/-t 收敛范围、克制 -F 频率避免 perf.data 撑爆和扰动目标——忘记带符号(strip)会只剩无名地址,低扰动拿到完整可解释的栈才是目标。