Perf record
perf record [-g] [--call-graph [fp,dwarf,lbr]] [command]
-g 记录采样点的stack trace
—call-graph 有3种采样方法
- fp
- 默认值
- 利用frame pointer访问stacktrace,编译时需要加上 -fno-omit-frame-pointer
- dwarf
- 不依赖frame pointer, 但是产生的数据非常大
- lbr
- Last branch record,依赖cpu架构
-fno-optimize-sibling-calls 阻止编译器优化siblingcall,siblingcall优化会使得被调用的函数直接覆盖调用者的Frame
Perf repord
perf report -i perf.data -g graph,0.5,caller
perf report -i perf.data -g graph,0.5,callee
这里0.5 指的是如果占比低于0.5%的stacktrace会被忽略
caller是从上而下
callee是自下而上 可以用来找到热点函数
Reference
https://zh-blog.logan.tw/2019/10/06/intro-to-perf-events-and-call-graph/