【发布时间】:2014-07-07 08:51:43
【问题描述】:
每当发生高速缓存未命中时,是否有可能知道该未命中高速缓存行的地址?现代处理器中是否有任何硬件性能计数器可以提供此类信息?
【问题讨论】:
-
MetallicPriest,您可以从使用 vallgrind 的工具 cachegrind 模拟缓存层次结构开始 - valgrind.org/docs/manual/cg-manual.html
-
还有一个项目来分析 Pentium4 PEBS 的数据地址 - lifl.fr/west/courses/cshp/doc/profguide/node10.html = sourceforge.jp/projects/hardmeter + ADAPTOR
-
您当然可以使用性能计数器获取导致缓存未命中的指令的地址。所以在 Linux 上你可以
perf record -e L1-dcache-loads ./a.out然后perf report -Mintel。通常你知道一条指令正在访问哪个数组,所以在很多情况下这已经足够了。 (也有其他级别缓存的计数器。获取ocperf.py并使用ocperf.py list获取支持的全套硬件计数器)。 -
@PeterCordes - PMU 还提供最近实现的数据地址,作为其“内存 PEBS”事件的一部分。它还告诉您访问是否是 L1 命中、LFB 命中、是否被锁定、TLB 行为是什么以及许多其他好东西!这在 Linux 上作为
perf mem的一部分公开。