【问题标题】:How to get perf stat list all possible events如何获取性能统计列表所有可能的事件
【发布时间】:2015-12-29 08:11:24
【问题描述】:

我正在使用 perf 分析一些奇怪的程序运行时行为,并在 IRC 上提供了一些帮助。默认情况下perf stat 只列出几个计数器,而不是那些感兴趣的计数器,所以有一个烦人的“在输出中包含这个计数器”的乒乓球,我将它添加到通过-e 传递的参数列表中并粘贴结果。

有没有办法让perf stat 简单地发出所有计数器,以便专家需要帮助我只需要一份报告?

【问题讨论】:

  • 我猜这对stackoverflow.com/questions/14674463/… 也有帮助。
  • Give this a try. 事实上,您认为 CPU 事件计数器会告诉您任何有用的信息,这意味着您可能需要一种不同的方式来看待它。
  • 因此,在名义上的报告之后,您得出的结论是这些事件并不有趣。你不能使用所有的计数器,但即使是这样,我认为你会被太多的信息淹没。您应该首先检查您的程序是否使用过多的 CPU,是否存在缓存或 TLB 相关问题,或者是否花费时间等待来自 IO 的信息(例如,它是否大量访问文件系统?)。它是否管理不好内存分配?不妨试试 valgrind 及其 massif 工具。
  • Joachim Breitner,对于 Intel CPU,有来自 Intel 的 pmu-tools 开源项目,能够编码、列出和选择现代 CPU 的许多硬件事件(还有很好的 toplev.py 脚本,其中包含许多有用预定义集)。在perfmon2 / libpfm4 项目中还有showevtinfo 工具,它将列出多个 AMD/Intel CPU 的批次事件:bnikolic.co.uk/blog/hpc-prof-events.html“如何监控所有 CPU 性能事件”(“事件总数:2332 可用, 166 supported"),但你不应该将它们全部传递给 stat。

标签: linux profiling perf


【解决方案1】:

简短回答:不。

理由: 实现了 CPU 的性能监视器计数器 (PMU) 单元 通过一些额外的寄存器,因此,对于某些选定的事件 设计的寄存器递增。 现在,寄存器的数量是有限的,因为添加寄存器 对 CPU 来说是非常“昂贵”的事情。 因此,除了可用的 PMU 寄存器之外,还有更多的事件可供计数 他们。

底线,您必须选择要监控的 CPU 事件子集 使用 CPU PMU 单元。

【讨论】:

  • 我一开始也是这么想的,但根据the perf wiki,“理论上可以提供的事件数量没有限制。如果事件多于实际硬件计数器,内核将自动多路复用它们。软件事件的数量没有限制。可以同时测量来自不同来源的事件。”,所以这可能不是真的。
  • Joachim Breitner,perf stat -d 变体试图启用大约 10-12 个事件。但是现代硬件只能同时访问多达 7 个硬件事件; perf 复用了 10 个事件。在我的测试中,任何多路复用都会极大地干扰结果,我得出的结论是我不会使用 perf 多路复用...现代 x86 CPU 中有数百个硬件事件,您应该从基本集合开始(这些由 perf stat 或 perf stat -d 选择,但使用 -e ... 运行其中的一部分而不以 5-7 为一组进行多路复用 - 当没有 [25%]、[50%] 或 [75%] 时统计输出)
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多