AMD perf events
我试图在我的设备上使用perf
以及AMD cpu,但我无法真正找到任何有关如何从AMD获得的信息,例如cache-misses
。我读到您需要编写-e rNNN
,其中NNN
是事件的十六进制代码,但我没有设法找到任何表或其他代码来查看这些代码。你能帮我解决这个问题吗?因为在互联网上似乎没有任何信息!实际上,在perf
手册中有一些链接,但它们无效:(AMD perf events
检查perf list
输出,在现代Linux内核版本中,它可能会报告一些架构特定的硬件事件。通过perf list
(特别是对于较旧的内核),但并非所有的都映射到某个真实的硬件事件。cache-misses
和cycles
是这样的通用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
是代码)。这引出了两个明显的问题:
- 需要使用什么编码?
- 这些信息是什么意思?
我将这些在以后的文章第二,但目前这里是如何找出原始代码使用方法:
获取最新版本的
perfmon2
/libpfm
(H/t这个developerworks文章):git clone git://perfmon2.git.sourceforge.net/gitroot/perfmon2/libpfm4; cd libpfm4; 使
运行
showevtinfo
程序(examples
子目录),以获得所有可用事件的列表,以及所支持的面具和修饰符(请参阅下面的输出为全输出的例子)找出你想要使用哪些事件以及掩码和修饰符。掩码的前缀为
Umask
,并以十六进制数字形式给出,并且在方括号中也包含符号名称。修饰符的前缀为Modif
,它们的名字也放在方括号中。使用
check_events
程序(也以实例子目录)到event
,umask
和modifiers
转换成原始代码。您可以通过运行以下命令来执行此操作:check_events <event name>:<umask>[(:modifers)*]
即,您提供的事件名称,umask和多个修饰符全部由冒号字符分隔。通过0x531003- 这十六进制码可被用作参数的GNU/Linux
perf
工具,例如以perf stat
:然后该程序将打印出来,除其他事项外,一个原始事件规范,例如:代码供应
-e r531003
选件