linux - LBR vs DWARF vs fp 的性能记录选择有什么作用?
问题描述
当我perf record
在我的代码上使用 时,我找到了三个--call-graph
选项:(lbr
最后一个分支记录)dwarf
和fp
.
这些有什么区别?
解决方案
该选项--call-graph
是指调用图/调用链的集合,即样本的函数堆栈。
默认值 ,fp
使用帧指针。这是非常有效的,但可能不可靠,特别是对于优化的代码。通过显式使用-fno-omit-frame-pointer
,您可以确保它可用于您的代码。然而,图书馆的结果可能会有所不同。
使用dwarf
,perf
实际上收集和存储堆栈内存本身的一部分,并通过后处理将其展开。这可能非常消耗资源并且可能具有有限的堆栈深度。默认堆栈内存块为 8 kiB,但可以配置。
lbr
代表最后一个分支记录。这是 Intel CPU 支持的硬件机制。这可能会以便携性为代价提供最佳性能。lbr
也仅限于用户空间功能。
推荐阅读
- python - 在 Tkinter 中执行此操作的更好方法?
- python - 函数内部对象的模拟方法[python]
- javascript - 图像最大高度和最大宽度,同时保持纵横比
- google-apps-script - 例外:Blob 对象必须具有此操作的非空数据。(第 19 行)
- javascript - 不在视图中时的画布外选项卡链接
- reactjs - 如何使用 Redux Promise 中间件传递额外的元数据?
- amazon-web-services - aws quicksight 中的大数据折线图
- c - 如何在 C makefile 中执行通用目标?
- sql - SQL Oracle - 多个表上的多个计数查询
- cmake - 如何制作一个在外部范围列表变量中收集目标的 cmake 函数?