鉴于在多个内核上运行的程序,如果两个或多个内核在同一高速缓存行上运行,是否有办法测量存在的高速缓存一致性失效/丢失的次数(即,当Core1写入高速缓存行时,然后迫使Core2刷新其缓存行的副本,以便两个内核保持一致)?
让我知道我是否为此概念使用了错误的术语。
答案 0 :(得分:2)
是的,可以使用硬件性能计数器。
但是,获取它们的方式通常取决于操作系统和处理器。在Linux上, perf
也可以用于跟踪性能计数器(尤其是perf stat -e COUNTER_NAME_1,COUNTER_NAME_2,etc.
)。另外,在Linux和Windows上,英特尔VTune也可以做到这一点。
可以使用perf list
(或使用PMU-Tools)检索硬件计数器列表。
您要度量的度量标准类似于MESI cache-coherence protocol中的所有权请求(RFO)。希望大多数现代(x86_64)处理器都包含用于测量RFO的硬件事件。在Intel Skylake处理器上,存在称为l2_rqsts.all_rfo
的硬件事件,更确切地说是l2_rqsts.code_rd_hit
和l2_rqsts.code_rd_miss
在 L2缓存级别上执行此操作。另外,还有许多更高级的RFO相关的硬件事件可以在核心级别中使用。