linux - 使用 perf 监控原始事件计数器

标签 linux profiling intel perf

我正在尝试测量具有多个(物理)处理器的(英特尔至强)机器上的某些硬件事件。具体来说,我想知道为读取“offcore”数据发出了多少请求。

我找到了 the OFFCORE_REQUESTS英特尔文档中的硬件事件,它给出了事件描述符 0xB0 和数据需求,附加掩码 0x01。

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

是否正确?
perf record -e r0B1 ./mytestapp someargs

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

除了 tutorial entry 之外,这方面的 perf 文档相当稀疏。它没有说明它是哪个事件(虽然这个对我有用),或者它是如何编码的......

非常感谢任何帮助。

最佳答案

好吧,我想我明白了。

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

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

perf record -e r1B0 ./mytestapp someargs

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

  • the c't magazine 13/03 (subscription required) 中对原始事件使用 perf 的描述,其中描述了一些原始事件以及来自英特尔架构软件开发人员手册(第 3b 卷)的描述
  • kernel mailing list 上的补丁,讨论记录它的正确方法。它指定上面的模式是“...是特定于 x86 的并且当时不完整”
  • (已更新) 较新版本的手册页显示了 Intel 机器上的示例:man perf-list

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

关于linux - 使用 perf 监控原始事件计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16062244/

相关文章:

linux - 有没有办法提取 Artifactory 的存储摘要?

ios - 如何查找 iOS 应用程序的电池使用情况

python - undefined symbol : __intel_sse2_strcpy

caching - 为什么现代处理器中的集合缓存关联性是 8 路集合关联性?

assembly - 当 x86 机器上触发中断时 CR3 会改变吗?

c - 原始套接字发送和接收

linux - x86/ubuntu 上的 C++-Assembly 链接 - 对 ThreadRoot、SWITCH 的 undefined reference

performance - 如何分析 PostgreSQL 9.2 中的 plpgsql 函数

node.js - 从 VS Code 将 NodeJS 应用部署到 Azure

c - 函数的执行时间