首页 > 解决方案 > LBR vs DWARF vs fp 的性能记录选择有什么作用?

问题描述

当我perf record在我的代码上使用 时,我找到了三个--call-graph选项:(lbr最后一个分支记录)dwarffp.

这些有什么区别?

标签: linuxperf

解决方案


该选项--call-graph是指调用图/调用链的集合,即样本的函数堆栈。

默认值 ,fp使用帧指针。这是非常有效的,但可能不可靠,特别是对于优化的代码。通过显式使用-fno-omit-frame-pointer,您可以确保它可用于您的代码。然而,图书馆的结果可能会有所不同。

使用dwarf,perf实际上收集和存储堆栈内存本身的一部分,并通过后处理将其展开。这可能非常消耗资源并且可能具有有限的堆栈深度。默认堆栈内存块为 8 kiB,但可以配置。

lbr代表最后一个分支记录。这是 Intel CPU 支持的硬件机制。这可能会以便携性为代价提供最佳性能。lbr也仅限于用户空间功能。


推荐阅读