我正在尝试在我的AMD CPU设备上使用perf
,但我无法找到任何关于如何获取例如cache-misses
的信息。我看到需要编写-e rNNN
,其中NNN
是事件的十六进制代码,但我没能找到任何表格或其他东西来查看这些代码。因为互联网上似乎没有任何信息,所以你能帮助我吗?实际上,在perf
手册中有一些链接,但它们已失效 :(
我正在尝试在我的AMD CPU设备上使用perf
,但我无法找到任何关于如何获取例如cache-misses
的信息。我看到需要编写-e rNNN
,其中NNN
是事件的十六进制代码,但我没能找到任何表格或其他东西来查看这些代码。因为互联网上似乎没有任何信息,所以你能帮助我吗?实际上,在perf
手册中有一些链接,但它们已失效 :(
检查 perf list
的输出,在现代Linux内核版本中,它可能会报告一些特定于架构的硬件事件。一些通用的硬件事件可能总是由 perf list
报告(特别是在旧内核中),但并非所有这些事件都映射到某个真实的硬件事件。 cache-misses
和 cycles
就是这样的通用 perf 硬件事件,不总是映射(映射在 perf 源代码中,例如对于 amd,http://elixir.free-electrons.com/linux/latest/source/arch/x86/events/amd/core.c 中将 cache-misses
映射为 [PERF_COUNT_HW_CACHE_MISSES] = 0x077e,
)。
还可以尝试使用 perf stat -e event1,cycles,instructions,cpu-clock
中的不同事件来检查 perf 列表,其中 event1 是您想要检查的事件,并且有一些可行的事件。
要编码原始事件,可以更轻松地使用处理器文档、perf 源代码(用于精确的十六进制编码)和一些外部工具。对于英特尔,有来自http://github.com/andikleen/pmu-tools 网站的 ocperf.py
;在 perfmon2/libpfm4 中有通用的原始生成器,在 Bojan Nikolic 的“如何监视 CPU 性能事件的全部范围” 中进行了描述,并使用 showevtinfo
实用程序(这也是获取 perf 中 rXXXX 代码的推荐方法,在 FAQ 中: http://web.eece.maine.edu/~vweaver/projects/perf_events/faq.html#q2e Q2e. 如何确定正确的 “raw” 事件值):