在Linux中实际检测缓存未命中和命中

时间:2010-07-29 04:42:18

标签: c linux caching

我知道这是特定于平台的问题,但是,我想对应用程序进行一些运行时分析,以检测缓存未命中和命中。我知道cachegrind,valgrind和vtune的工具,还有一大堆其他的分析工具。但是,我感兴趣的是,在实现我自己的缓存未命中检测版本时。我知道cachegrind充当缓存模拟器。在不破坏内核的情况下,如何实用地检测缓存缺失?我觉得这对于用户土地申请来说几乎是不可能的,但我不得不问。

2 个答案:

答案 0 :(得分:5)

有办法做到这一点!在Linux上,您可以为此目的利用Linux性能计数器子系统。例如。看看这里:http://lxr.linux.no/#linux+v2.6.37.3/tools/perf/

答案 1 :(得分:3)

  

如何实用地检测缓存缺失[没有缓存模拟]?

缓存由硬件管理 - 而不是内核。它们的参数(高速缓存,大小,踢出策略,回写/直写等级)都是特定于处理器实现的。作为程序员,你“不应该知道它们存在”。因此,在没有缓存模拟的情况下测量缓存未命中性能是不可能的。

另一方面,操作系统管理VM页面(一个很多更粗糙的“缓存” - 在某种意义上,缓存保存了一块内存)。我想有办法通过黑客入侵内核甚至创建一个漂亮的用户应用程序来收集有关页面错误的统计信息。页面错误统计信息可能不是 对您有用(特别是因为它们受到其他正在运行的进程的影响),但是使用大量RAM 的应用程序可能(a有点像页面错误或页面访问模式,类似于CPU缓存访问模式。但是,我对细节不太确定。