AMD perf events

问题描述:

我试图在我的设备上使用perf以及AMD cpu,但我无法真正找到任何有关如何从AMD获得的信息,例如cache-misses。我读到您需要编写-e rNNN,其中NNN是事件的十六进制代码,但我没有设法找到任何表或其他代码来查看这些代码。你能帮我解决这个问题吗?因为在互联网上似乎没有任何信息!实际上,在perf手册中有一些链接,但它们无效:(AMD perf events

检查perf list输出,在现代Linux内核版本中,它可能会报告一些架构特定的硬件事件。通过perf list(特别是对于较旧的内核),但并非所有的都映射到某个真实的硬件事件。cache-missescycles是这样的通用perfww事件,并不总是映射(映射位于amd的http://elixir.free-electrons.com/linux/latest/source/arch/x86/events/amd/core.c附近的perf源代码 - 与cache-misses映射到[PERF_COUNT_HW_CACHE_MISSES] = 0x077e,

也尝试从perf列表中的不同事件与perf stat -e event1,cycles,instructions,cpu-clock其中事件1是你想检查的事件,并且有一些工作事件。

要编码原始事件,它可以更容易地使用处理器文档,perf源(精确的十六进制编码)和some external tools。对于英特尔,ocperf.py来自http://github.com/andikleen/pmu-tools网站;并且在perfmon2/libpfm4中有通用的原始生成器,在“如何通过Bojan Nikolic与showevtinfo util监视CPU性能事件的全部范围”进行了描述(这也是获得常见问题的rXXXX代码的建议方法:http://web.eece.maine.edu/~vweaver/projects/perf_events/faq.html#q2e Q2e。如何确定合适的“原始”活动值):

为了充分利用这些计数器,一个目前已经向他们指定的perf工具作为原料的十六进制代码(-e rXXXX其中XXXX是代码)。这引出了两个明显的问题:

  • 需要使用什么编码?
  • 这些信息是什么意思?

我将这些在以后的文章第二,但目前这里是如何找出原始代码使用方法:

  1. 获取最新版本的perfmon2/libpfm(H/t这个developerworks文章):

    git clone git://perfmon2.git.sourceforge.net/gitroot/perfmon2/libpfm4; cd libpfm4; 使

  2. 运行showevtinfo程序(examples子目录),以获得所有可用事件的列表,以及所支持的面具和修饰符(请参阅下面的输出为全输出的例子)

  3. 找出你想要使用哪些事件以及掩码和修饰符。掩码的前缀为Umask,并以十六进制数字形式给出,并且在方括号中也包含符号名称。修饰符的前缀为Modif,它们的名字也放在方括号中。

  4. 使用check_events程序(也以实例子目录)到eventumaskmodifiers转换成原始代码。您可以通过运行以下命令来执行此操作: check_events <event name>:<umask>[(:modifers)*] 即,您提供的事件名称,umask和多个修饰符全部由冒号字符分隔。通过0x531003

  5. 这十六进制码可被用作参数的GNU/Linux perf工具,例如以perf stat:然后该程序将打印出来,除其他事项外,一个原始事件规范,例如:

    代码供应-e r531003选件