如何访问英特尔 CPU 计数器

Posted

技术标签:

【中文标题】如何访问英特尔 CPU 计数器【英文标题】:How can i access the Intel CPU Counter 【发布时间】:2009-08-12 13:30:18 【问题描述】:

是否有任何小工具可以让我访问英特尔 CPU 计数器收集的数据(例如 L1/L2 缓存未命中、分支预测失败……您知道现代 Core2 CPU 上有很多此类数据)。

它必须在 Windows 上工作(同时能够在 Solaris、FreeBSD、Linux、MacOSX 上使用它当然很好)。

【问题讨论】:

好吧,与此同时我找到了 PAPI 库。但这或多或少只是 Linux(仅在 Sparc 上支持 Solaris)并且需要一些 linux 内核补丁——是的,我知道 Linus 说过性能监控是两个真正的弱点之一。我发现 perfmon2 和 rabbit(一个死项目)也只是 Linux。到目前为止,还没有一款适用于 Windows 的产品。 【参考方案1】:

查看英特尔 PCM(性能计数器监视器)工具,该工具完全符合您的要求。

链接:https://software.intel.com/en-us/articles/intel-performance-counter-monitor-a-better-way-to-measure-cpu-utilization

英特尔 PCM 提供了丰富的 API,可让您检测代码。此外,迄今为止,PCM 也是读取非核心事件的唯一工具。

【讨论】:

【参考方案2】:

这个帖子似乎有点老了,但如果你仍然感兴趣,我最近写了一个howto 关于这个主题,在 Linux 中只使用 rdmsr 和 wrmsr。它只处理用于 Westmere 的英特尔非核心的性能计数器,但我描述的过程可能会帮助您弄清楚您需要什么(如果您还没有的话)。我确信 Windows 对 RDMSR 和 WRMSR 有一些等效的程序或函数调用。问题是您需要成为 ring 0(内核模式)才能读取 MSR。我不知道如何在 Windows 中做到这一点。我无法帮助解决任何 Windows 问题,但如果您有任何问题,我可能能够回答一些与 MSR 相关的问题。不过,我绝不是专家。

【讨论】:

【参考方案3】:

PAPI 是一个非常有前途的领导者,但是,我相信他们在几年前就停止了对 Windows(以及因此 .NET C#)的支持。

在 Windows 前端,Visual Studio 2010 Premium 带有性能资源管理器。如果您在检测模式下运行任何项目或二进制文件,则可以访问硬件事件,例如已停用的指令。

根据外部因素,结果可能有些混杂和不一致,但它与 Visual Studio 很好地集成,您可以获得每个方法/模块级别的详细计数(平均、最大值、总计)。

英特尔 V-tune 性能分析器也原生公开了这些。我还没有玩过这个工具,但它可能是比 Visual Studio 2010 公开的更灵活的 API。

【讨论】:

谢谢,但我自己从事开发和销售 IDE 的业务。所以这显然对我没有帮助。【参考方案4】:

你没有写你正在寻找一个应用程序或一个库。

对于 Windows,有 Intel VTune。但这不完全是一个小工具。对于 linux,我使用了 oprofile,它可以在没有内核补丁的情况下工作。

【讨论】:

我正在寻找一个库,因为我想编写一个记录 INSTRUCTION_RETIRED 事件而不是毫秒的检测分析器。是的,也许还有一些其他的东西,所以你可以把它看作是我想自己写的一个类似于 VTune 的小工具。 我认为没有图书馆。通过 rdmsr 和 wrmsr 指令访问性能监视器寄存器。首先,您可以查看“Intel 64 and IA-32 Architectures Software Developers Manual”(谷歌获取最新版本)第 3B 卷,第 18.11 章ff。准确描述了访问性能计数器所需的内容。【参考方案5】:

在 OS X 上,Shark 可让您从 PMC 获取数据。我不确定 Windows 上除了 Intel 的工具(VTune,如 drhirsch 提到的)之外还有什么可用的。

【讨论】:

【参考方案6】:

试试这个 http://icl.cs.utk.edu/papi/ 它是一个完整的库,可让您读取任何 CPU 计数器数据,适用于 Windows 和 Linux [以及其他操作系统]

【讨论】:

【参考方案7】:

这个帖子看起来很旧。但是,上面提到的所有计数器都可以在Intel PCM 获得。这些计数器可以用作 Microsoft Perfmon 插件或命令提示符界面。英特尔 PCM 提供 L2 和 L3 缓存命中率、缓存未命中率等信息。

【讨论】:

以上是关于如何访问英特尔 CPU 计数器的主要内容,如果未能解决你的问题,请参考以下文章

CPU推理|使用英特尔 Sapphire Rapids 加速 PyTorch Transformers

英特尔wifi6ax201 160MHz如何屏蔽针脚

哪些intel cpu 支持硬件虚拟化?

英特尔CPU平台分类都有哪些?

英特尔CPU分类

如何对从 C# 应用程序中退出的指令进行采样