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

标签 windows performance x86 hardware

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

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

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

最佳答案

简答

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

长答案

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

不幸的是,这些指令只能从内核模式调用,因此您需要与驱动程序交互。虽然编写驱动程序代码本身很容易,但让驱动程序签名并不那么容易(尤其是正如您提到的,您希望作为个人完成此操作)。

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

打开硬件监视器

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

PCM

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

无论如何,想提一下这个项目,因为它可能包含很多您可能感兴趣的代码。

用户模式访问

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

关于windows - 我可以从 Windows 中的用户模式程序读取 CPU 性能计数器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45428588/

相关文章:

java - JMeter - 如何将多行响应数据传递给 ForEach Controller 请求

JavaScript、Ajax : How to visualize Boomerang. js 结果?

linux - 获取系统(主机)名称的程序集/Shellcode

c++ - 使用 AVX 从结构中提取整数和短裤?

java - Netbeans 不断重启

windows - 如何跟踪 WinRT 应用程序(在 Win32 中很简单)?

windows - 在 Windows 中创建自定义命令(不是应用程序)快捷方式

c++ - 将 LPTHREAD_START_ROUTINE 转换为 int

assembly - AVX-512中的压缩和扩展指令之间有什么区别?

c - 堆与堆栈在读/写速度方面的比较