Perf record

  1. 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

  1. perf report -i perf.data -g graph,0.5,caller
  2. 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/