我正试图在我的设备上使用带有AMD CPU的perf
,但我无法找到任何有关如何从AMD获得cache-misses
的信息。我读到你需要写-e rNNN
,其中NNN
是事件的十六进制代码,但我没有找到任何表格或其他东西来查看这些代码。你能帮我解决这个问题吗,因为看来网上根本没有信息!实际上,在perf
的手册中有一些链接,但它们无效:(
答案 0 :(得分:2)
检查perf list
输出,在现代Linux内核版本中,它可能会报告一些特定于体系结构的硬件事件。某些通用硬件事件可能总是由perf list
报告(特别是对于较旧的内核),但并非所有事件都映射到某些真实的硬件事件。 cache-misses
和cycles
是这样的通用perf hw事件,并不总是映射(映射在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 stat -e event1,cycles,instructions,cpu-clock
的perf列表中的不同事件,其中event1是您要检查的事件,并且有一些工作事件。
要对原始事件进行编码,可以更轻松地使用处理器文档,perf源(用于精确十六进制编码)和some external tools。对于英特尔,http://github.com/andikleen/pmu-tools网站有ocperf.py
个;在perfmon2 / libpfm4中有一个通用的原始生成器,在http://www.bnikolic.co.uk/blog/hpc-prof-events.html描述“如何监控Bojan Nikolic与showevtinfo
util的所有CPU性能事件”(这也是推荐获取rXXXX代码的方法) for FAQ中的perf: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
选项