![](/img/trans.png)
[英]Why do these instruction counts of ls differ so much? (ptrace vs perf vs qemu)
[英]What do the perf record choices of LBR vs DWARF vs fp do?
当我使用perf record
在我的代码,我找了三个选项--call-graph
选项: lbr
(最后一个分支记录), dwarf
和fp
。
这些有什么区别?
选项--call-graph
指的是调用图/调用链的集合,即样本的函数堆栈。
默认值fp
使用帧指针。 这非常有效,但可能不可靠,特别是对于优化代码。 通过显式使用-fno-omit-frame-pointer
,您可以确保这可用于您的代码。 然而,图书馆的结果可能会有所不同。
使用dwarf
, perf
实际上收集和存储堆栈内存本身的一部分,并通过后处理展开它。 这可能非常消耗资源,并且堆栈深度可能有限。 默认堆栈内存块为 8 kiB,但可以配置。
lbr
代表最后一个分支记录。 这是 Intel CPU 支持的硬件机制。 这可能会以便携性为代价提供最佳性能。 lbr
也仅限于用户空间功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.