AMD性能事件

时间:2017-09-07 20:37:47

标签: amd perf

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

1 个答案:

答案 0 :(得分:2)

检查perf list输出,在现代Linux内核版本中,它可能会报告一些特定于体系结构的硬件事件。某些通用硬件事件可能总是由perf list报告(特别是对于较旧的内核),但并非所有事件都映射到某些真实的硬件事件。 cache-missescycles是这样的通用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是代码)。这提出了两个明显的问题:

     
      
  • 使用什么代码?
  •   
  • 所有这些信息意味着什么?
  •   
     

我将在后面的帖子中介绍其中的第二个,但暂时还有如何找出要使用的原始代码:

     
      
  1. 获取perfmon2 / libpfm的最新版本(h / t此developerworks文章):

         

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

  2.   
  3. 运行showevtinfo程序(在examples子目录中)以获取所有可用事件的列表,以及支持的掩码和修饰符(有关示例,请参阅下面的输出)完整输出)

  4.   
  5. 找出要使用的掩码和修饰符的事件和内容。掩码以Umask为前缀,并以十六进制数字和方括号中的符号名称给出。修饰符以Modif为前缀,其名称也在方括号中。

  6.   
  7. 使用check_events程序(也在示例子目录中)将eventumaskmodifiers转换为原始代码。您可以通过运行以下命令来执行此操作:     check_events <event name>:<umask>[(:modifers)*]   即,您提供由冒号字符分隔的事件名称,umask和多个修饰符。然后,该程序将打印出原始事件规范,例如:

         

    代码:0x531003

  8.   
  9. 此十六进制代码可用作GNU / Linux perf工具的参数,例如perf stat提供-e r531003选项
  10.