2009-05-28 177 views
5

如何计算内存(RAM)使用的带宽?哪些性能计数器是必需的?内存带宽使用情况

我遇到了一个能够做到这一点的工具,即“Rightmark多线程内存测试”。但是与Rightmark的其他测试不同,我还没有找到它的源代码,只是二进制文件

+0

为什么被标记为c#,C++和c? – unwind 2010-11-30 11:07:36

回答

1

这是很难'计算'内存带宽使用情况。有很多不平凡的缓存和MMU问题需要解决。要做到这一点的唯一真正方法是通过使用模拟或实际测量。

通过调试代码并计算执行的内存加载和存储操作次数,您可以得到'粗糙'的想法。但是,知道它是否是缓存命中/未命中是另一个问题。

这取决于你的目的。如果要获得猜测,可以使用经验法则,大约30%的通用代码是内存加载和存储。如果你试图得到一个最坏的情况,你可以假设高速缓存错过了所有的时间并完成它。

你可以做的一件事就是看看虚拟化。有几个开源选项(QEMU想到)。可能会从中导出某些硬件测量结果。

1

巧合的是,MSDN杂志6月号的CLR Inside Out文章是关于分析.NET应用程序中的内存使用情况。

http://msdn.microsoft.com/en-us/magazine/dd882521.aspx

+1

但问题是关于/带宽/(从数据传输速率的意义上讲),而不是内存消耗。 – Frank 2010-11-30 11:29:26

1

如果你的代码可以运行在Linux,使用Cachegrind

Cachegrind是一个缓存探查。它 在您的CPU和 执行 I1,D1和L2缓存的详细模拟,因此可以准确查明您的代码中缓存未命中的来源 。它为 标识了对于每行源代码执行的存储器引用和指令 ,其中每个功能,每个模块和整个程序摘要执行了 缓存未命中的数量, 和 。这是有用的 与用任何语言编写的程序。 Cachegrind运行的程序约为 比正常情况慢20--100倍。

您可能需要使用KCacheGrind GUI