我可以从Windows中的用户模式程序读取CPU性能计数器吗?

我想编程并阅读所有最近x86硬件上提供的硬件性能计数器 。

在Linux上,有各种perf_events系统可以做到这一点(并且perf工具可以在未经修改的程序之外完成)。

Windows中是否有这样的内置工具? 如果没有内置设施,第二好的可能是使用第三方代码的另一种方法,但这并不要求我签署驱动程序。

Solutions Collecting From Web of "我可以从Windows中的用户模式程序读取CPU性能计数器吗?"

简短的回答

不,Windows中没有内置的工具。 此外,linux perf命令不适用于Windows 10的Linux子系统。

长答案

要访问这些计数器,您需要结合使用这些说明:

  • rdpmc __readpmc (查看相关答案 )
  • rdmsr __readmsr
  • wrmsr __writemsr

不幸的是,这些指令只能从内核模式调用,所以你需要与驱动程序接口。 虽然编写驱动程序代码本身很容易,但签署驱动程序并不是那么容易(特别是当你提到你想以个人身份进行操作时)。

这就是为什么我建议您查看现有的项目,如英特尔Open Hardware Monitor和pcm项目。

打开硬件监视器

这个开源项目是用C#编写的,包含由OpenLibSys.org开发的WinRing0.sys(32位)/ WinRing0x64.sys(64位)驱动程序的二进制文件和C源代码 。 如果你想在你的项目中使用这个驱动程序,你只需要包含他们的版权声明 。

PCM

这个开源项目是用C ++编写的,也包含类似驱动程序的源代码(请参阅WinMSRDriver目录),但是您必须自己构建它,以便再次转入签名问题。

无论如何,想要提到这个项目,因为它可能包含了很多可能是你感兴趣的代码。

用户模式访问

现在,一旦你有这个驱动程序加载(打开硬件监视器提取并加载驱动程序自动启动应用程序是非常整洁),您可以开始调用这些驱动程序IOCTL的使用Windows API函数CreateFile / DeviceIoControl ,当然还有CloseHandle您的用户模式应用程序。