我知道这是特定于平台的问题,但是,我想对应用程序执行一些运行时分析来检测caching未命中和命中。 我知道cachegrind,valgrind和vtune的工具,还有一些其他的分析工具。 不过,我感兴趣的是,在实现我自己的caching未命中检测版本。 我知道cachegrind充当caching模拟器。 在不破解内核的情况下,如何实际检测到cache-miss? 我有一种感觉,用户应用程序几乎是不可能的,但是我不得不问。
如何实际检测到cache-miss [没有缓存模拟]?
缓存由硬件管理,而不是内核。 它们的参数(高速缓存,大小,踢出策略,回写/直写等)都是特定于处理器的实现。 作为程序员,你“不应该知道他们存在”。 因此,在不进行缓存模拟的情况下测量缓存未命中性能是不可能的
另一方面,虚拟机页面(一个非常粗糙的“缓存” – 在某种意义上,缓存保存大量的内存)由操作系统管理。 我想有办法通过黑客攻击内核来收集有关页面错误的统计信息,甚至创建一个漂亮的用户应用程序。 页面错误统计可能没有太多用处(尤其是因为它们受到其他正在运行的进程的影响),但是使用大量RAM的应用程序可能 (小小一点)具有页面错误或页面访问模式类似于CPU缓存访问模式。 不过,我不太清楚细节。
有一种方法可以做到这一点! 在Linux上,您可以利用Linux性能计数器子系统来达到此目的。 例如看看这里: http : //lxr.linux.no/#linux+v2.6.37.3/tools/perf/