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

Bee*_*ope 9 windows hardware performance x86

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

在Linux上有各种各样的perf_events系统来执行此操作(以及perf从未修改的程序外部执行此操作的实用程序).

Windows中是否有这样的内置工具?如果不存在内置工具,那么第二种方法可能是使用第三方代码的另一种方法,但这并不需要我签署驱动程序.

huy*_*itw 6

简短的回答

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

答案很长

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

不幸的是,这些指令只能从内核模式调用,因此您需要与驱动程序进行交互.虽然编写驱动程序代码本身很容易,但是获取驱动程序签名并不是那么容易(特别是当你提到你想要以个人身份执行此操作时).

这就是为什么我建议你研究一下现有的项目,比如Open Hardware Monitor和英特尔的pcm项目.

打开硬件监视器

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

PCM

这个开源项目是用C++编写的,也包含类似驱动程序的源代码(请参阅WinMSRDriver目录),但是你必须自己构建它,这样你就会再次变成签名问题.

无论如何,想要提及这个项目,因为它可能包含许多您可能感兴趣的代码.

用户模式访问

现在,一旦您加载了该驱动程序(Open Hardware Monitor在应用程序启动时自动提取并加载驱动程序非常简洁),您可以使用Windows API函数CreateFile/ DeviceIoControl当然也可以CloseHandle从您的用户开始调用这些驱动程序IOCTL.模式应用.

  • 优秀。不知何故,我忽略了那个“许可证”文件。我已经使用`WinRing0.sys`(更准确地说,它是64 位对应物,`WinRing0x64.sys`)让所有东西都能正常工作,所以这对我来说很简单。我更关心的是该驱动程序的模糊法律和源代码可用性情况,但如果它是干净的,那就是干净的。我想知道我们是否还会看到一个新的签名版本……@WouterHuysentruit (2认同)