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

时间:2017-08-01 03:41:30

标签: windows performance x86 hardware

我想编程并阅读最近所有x86硬件上提供的hardware performance counters

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

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

1 个答案:

答案 0 :(得分:6)

简短回答

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

答案很长

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

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

这就是为什么我建议您查看英特尔等Open Hardware Monitorpcm项目等现有项目。

打开硬件监视器

open-source project是用C#编写的,包含由OpenLibSys.org开发的WinRing0.sys(32位)/ WinRing0x64.sys(64位)驱动程序的二进制文件和C source-code。如果要在项目中使用此驱动程序,则只需要包含copyright notice

<强> PCM

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

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

用户模式访问

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