AMD 性能事件

Baz*_*sha 4 amd perf

我正在尝试perf在我的设备上使用 AMD cpu,但我真的找不到任何关于如何cache-misses从 AMD获取的信息。我读到你需要写-e rNNNNNN事件的十六进制代码在哪里,但我没有找到任何表格或其他东西来查看这些代码。你能帮我解决这个问题吗,因为互联网上似乎根本没有任何信息!实际上,在手册中perf有一些链接,但它们无效:(

osg*_*sgx 8

检查perf list输出,在现代 Linux 内核版本中,它可能会报告一些特定于体系结构的硬件事件。某些通用硬件事件可能总是由perf list(尤其是旧内核)报告,但并非所有这些事件都映射到某个真实的硬件事件。的cache-missescycles是这样的通用PERF HW事件,而不是总是被映射(映射是在Perf源代码周围http://elixir.free-electrons.com/linux/latest/source/arch/x86/events/amd/core.c为amd -cache-misses映射到[PERF_COUNT_HW_CACHE_MISSES] = 0x077e,)。

还可以从 perf 列表中尝试不同的事件,perf stat -e event1,cycles,instructions,cpu-clock其中 event1 是您要检查的事件,并且有一些工作事件。

要对原始事件进行编码,可以更轻松地使用处理器文档、性能源(用于精确的十六进制编码)和一些外部工具。对于英特尔,ocperf.py来自http://github.com/andikleen/pmu-tools站点;并且在 perfmon2/libpfm4 中有通用的原始生成器,在http://www.bnikolic.co.uk/blog/hpc-prof-events.html “How to monitor the full range of CPU performance events” by Bojan Nikolic 与showevtinfoutil(这也是在常见问题解答中为 perf 获取 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程序(也在 examples 子目录中)将event,umaskmodifiers转换为原始代码。您可以通过以下方式运行命令来执行此操作: check_events <event name>:<umask>[(:modifers)*] 即,您提供事件名称、umask 和多个修饰符,所有这些都由冒号字符分隔。然后程序将打印出原始事件规范,例如:

    代码:0x531003

  5. 此十六进制代码可用作 GNU/Linuxperf工具的参数,例如perf stat通过为其提供-e r531003选项