如何编程硬件性能计数器

时间:2009-05-24 00:16:54

标签: c# c++ wmi performancecounter server-hardware

我一直在为我的论文处理这个问题。 目标是专门为Windows 2K8服务器开发.net服务器监控工具。 到目前为止,我可以访问的只是软件性能计数器。表示通过perfmon和WMI类可用的那些。

但是还有一个问题是我需要能够监控发生的TLB未命中数或当前内存带宽等问题。这就是我被困的地方...... 由于没有标准的.net方式来获取这些计数器,我一直在阅读来自开源程序(如Oprofile)的一些代码。但由于我不知道到底在寻找什么,在这方面没有取得多大进展。

所以我谦卑地问,这里是否有人,谁有这方面的经验,可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

用于阅读性能计数器的最广泛使用的库是Performance API (PAPI)。 PAPI实际上是两个API(high-levellow-level)。我倾向于使用低级别的,因为我发现它更直观,但那可能只是我。

PAPI中有两种类型的事件。 Preset events应该是与平台无关的,尽管它们可以根据它们在内部计算的方式而略有不同。它们确实包括TLB未命中和内存停滞,所以也许你可以从那里开始。如果这不符合您的需求,您可能需要查看特定于您的特定硬件的本机事件,并且通常包括硬件可以计数的每个事件。使用papi_native_aval获取这些列表。

PAPI支持Windows,但我实际上从未尝试过。我在专门针对Windows 2008的文档/自述文件中找不到任何内容,但至少可以查看源代码以查看如何访问所需的计数器,即使您无法直接访问它们。

如果您需要更多,那么可以查看perfmon2,这是PAPI的新版本在Linux上使用的,如果它可用的话。