使用perf监视原始事件计数器

Pat*_*ick 6 linux profiling intel perf

我试图测量具有多个(物理)处理器的(Intel Xeon)机器上的某些硬件事件.具体来说,我想知道为读取'offcore'数据发出了多少请求.

在Intels文档中找到了OFFCORE_REQUESTS硬件事件,它给出了事件描述符0xB0和数据需求,附加掩码0x01.

然后告诉perf记录事件0xB1(即0xB0 | 0x01)并将其称为:

perf record -e r0B1 ./mytestapp someargs
Run Code Online (Sandbox Code Playgroud)

或者这是不正确的?因为perf report这样输入的事件没有显示输出.

这个领域的perf文档相当稀疏,除了一个教程条目,它没有说明它是哪个事件(尽管这个对我有用),或者它是如何编码的......

任何帮助是极大的赞赏.

Pat*_*ick 13

好的,所以我想我明白了.

对于我使用的Intel机器,格式如下: <umask><eventselector>两者都是十六进制值.可以删除umask的前导零,但不能删除事件选择器.

所以对于0xB0带面具的事件0x01我可以打电话:

perf record -e r1B0 ./mytestapp someargs
Run Code Online (Sandbox Code Playgroud)

我无法在perf内核代码中找到它的确切解析(这里有任何内核黑客?),但我找到了这些来源:

  • 关于使用perf与原始事件的描述13/03(需要订阅),描述了一些原始事件及其描述来自英特尔架构软件开发人员Manuel(Vol 3b)
  • 内核邮件列表上的补丁,讨论了记录它的正确方法.它指出上面的模式是"...... x86具体而且不完整"
  • (更新)较新版本的手册页显示了Intel机器上的示例:man perf-list

更新:正如评论中指出的那样(谢谢!),libpfm转换器可用于获取正确的事件描述符.用户'osgx'发现的评论中链接的网站(Bojan Nikolic:如何监控所有CPU性能事件)更详细地解释了它.

  • 有一个关于libpfm4用法的页面http://www.bnikolic.co.uk/blog/hpc-prof-events.html借助`showevtinfo`和`check_events`来编码perf的原始事件.帕特里克,谢谢你的问题和答案. (2认同)
  • 帕特里克,你不会相信.我刚刚发现了由Andi Kleen(英特尔开源技术中心)制作的英特尔CPU的名为`ocperf`的精彩python perf包装器[作为`pmu-tools`实用程序集的一部分(ML宣布)(https://lwn.net/文章/ 556983 /).项目主页是http://github.com/andikleen/pmu-tools,英特尔在其01.org网站上维护和更新了cpu事件列表:https://download.01.org/ perfmon /(autodownloader包含在pmu-tools中),演示在http://halobates.de/modern-pmus-yokohama.pdf (2认同)