如何使用perf收集一些可读的堆栈跟踪?

时间:2018-03-17 20:16:31

标签: linux profiling perf

我想使用this answer中描述的随机抽样在Linux上分析C ++程序:

  

但是,如果你匆忙,你可以手动打断你的   调试器下的程序虽然主观上很慢,但是还有   找到性能问题的简单方法。

问题在于我无法使用gdb调试器,因为我想在负载很重的情况下对生产进行分析,调试器过于干扰并且大大减慢了程序的速度。但是,我可以使用perf recordperf report来查找瓶颈,而不会影响程序性能。有没有办法用perf而不是gdb收集许多可读(gdb like)堆栈跟踪?

1 个答案:

答案 0 :(得分:0)

next_ts确实提供了三种不同技术的callstack录音

  • 默认情况下使用帧指针(perf)。这通常得到支持并且运行良好,但它不适用于某些优化。使用fp等编译您的应用程序,以确保它运行良好。
  • -fno-omit-frame-pointer使用每个样本的袋子转储进行后处理。这有很大的性能损失
  • 现代系统可以使用硬件支持的最后一个分支记录dwarf

可以使用lbrperfperf report分析工具访问堆栈。

有关详细信息,请查看perf script