C# 获取CPU缓存未命中性能计数器

6

我知道CPU会记录所有的L1/2/3缓存未命中情况,并且这些信息原则上是可以被访问的。例如,英特尔有一个性能查看器。只是我找不到C#的示例。这些数据是否可以从.NET中获取?


你指的性能查看器是英特尔性能计数器监视器吗? - Evk
它没有内置的性能计数器。它们很难获取,只有ring 0代码才能读取它们。而且它们严重依赖于处理器的制造和型号。当然,这是英特尔软件存在的原因。不要在AMD处理器上运行它 :) - Hans Passant
1个回答

5

如果你在Windows系统上,可以使用Intel Perfomance Counter Monitor来实现这个目标。除了其他一些工具,它还包含PCM-Service——一个Windows服务,用于添加PCM Windows性能计数器。下载、编译和安装此服务后,你就可以像这样轻松地访问L2缓存未命中率:

var pc = new PerformanceCounter("PCM Core Counters", "L2 Cache Misses", "total_"); // instead of total_ you can use number of core
var value = pc.RawValue; // or pc.NextValue() and so on.

当然,Intel PCM添加了更多有趣的计数器,而不仅仅是缓存丢失,所有这些计数器都可以从.NET访问。


能否通过P/Invoke调用本地库?我不想要系统依赖项,如Windows服务,但可以使用本地可复制的依赖项。 - V.B.
该库是用C++编写的,并提供了所有源代码。因此,我想应该可以使用p-invoke进行调用,尽管我个人没有详细调查过。在上面的链接中,您可以看到他们建议如何从代码(C++代码)中使用他们的库的示例,因此您可以尝试创建一个C++\CLI库来完成任务。 - Evk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接