我正试图在我的设备上使用perf和一个AMD,但我真的找不到任何关于如何从AMD获得cache-misses的信息。我读到您需要编写-e rNNN,其中NNN是事件的十六进制代码,但我没有找到任何表或其他东西来查看这些代码。你能帮我解决这个问题吗,因为互联网上似乎根本没有任何信息!实际上,在perf的手册中有一些链接,但是它们是无效的:
发布于 2017-09-22 17:24:13
检查perf list输出,在现代Linux内核版本中,它可能报告一些特定于体系结构的硬件事件。一些通用硬件事件可能总是由perf list报告(特别是旧内核),但并不是所有这些事件都映射到一些实际的硬件事件。cache-misses和cycles是这样的泛型perf事件,并不总是映射(映射是围绕着http://elixir.free-electrons.com/linux/latest/source/arch/x86/events/amd/core.c的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源(用于精确的十六进制编码)和some external tools。对于英特尔,有来自ocperf.py站点的http://github.com/andikleen/pmu-tools;在http://github.com/andikleen/pmu-tools2/libpfm4 4中有一个通用的原始生成器,由Bojan Nikolic和showevtinfo util在http://www.bnikolic.co.uk/blog/hpc-prof-events.html上描述“如何监视所有的CPU性能事件”(这也是在FAQ:events/faq.html#q2e Q2e中获取perf的rXXXX代码的推荐方法。如何确定正确的“原始”事件值):
为了充分利用这些计数器,目前必须将它们指定为
perf工具作为原始十六进制代码(-e rXXXX,其中XXXX是代码)。这就引出了两个明显的问题:
我将在后面的文章中讨论其中的第二个,但现在我们来看看如何使用原始代码:
perfmon2/libpfm的最新版本(h/t这篇developerworks文章):
git克隆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和多个修饰符,所有这些修饰符都由冒号字符分隔。然后,该程序将打印出一个原始事件规范,例如:
代码: 0x531003perf工具的参数,例如向perf stat提供-e r531003选项。https://stackoverflow.com/questions/46104738
复制相似问题