AMD性能事件

6

我正在尝试在我的AMD CPU设备上使用perf,但我无法找到任何关于如何获取例如cache-misses的信息。我看到需要编写-e rNNN,其中NNN是事件的十六进制代码,但我没能找到任何表格或其他东西来查看这些代码。因为互联网上似乎没有任何信息,所以你能帮助我吗?实际上,在perf手册中有一些链接,但它们已失效 :(

1个回答

9

检查 perf list 的输出,在现代Linux内核版本中,它可能会报告一些特定于架构的硬件事件。一些通用的硬件事件可能总是由 perf list 报告(特别是在旧内核中),但并非所有这些事件都映射到某个真实的硬件事件。 cache-missescycles 就是这样的通用 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” 事件值):

为了充分利用这些计数器,目前需要将它们作为原始十六进制代码(其中XXXX是代码)指定给perf工具。这引出了两个显而易见的问题:
1.使用哪些代码? 2.所有这些信息的含义是什么?
我将在后续文章中介绍第二个问题,但现在是如何找出要使用的原始代码的方法:
1.获取最新版本的perfmon2/libpfm(感谢此developerworks文章): git clone git://perfmon2.git.sourceforge.net/gitroot/perfmon2/libpfm4; cd libpfm4; make 2.运行showevtinfo程序(在examples子目录中),以获得所有可用事件、支持的掩码和修饰符列表(下面的输出示例是完整输出)。
3.确定要使用的事件、掩码和修饰符。掩码以Umask为前缀,以十六进制数字和方括号中的符号名称给出。修饰符以Modif为前缀,其名称也在方括号中。
4.使用check_events程序(也在examples子目录中),将事件、掩码和修饰符转换为原始代码。可以通过以下方式运行该命令: check_events <事件名称>:<掩码>[(:修饰符)*] 即,提供事件名称、掩码和多个修饰符,所有内容之间用冒号分隔。然后,程序将打印出原始事件规范等内容,例如: Codes:0x531003
5.此十六进制代码可用作GNU/Linux perf工具的参数,例如供perf stat使用,只需提供-e r531003选项即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接