有没有办法衡量缓存一致性未命中

Is there a way to measure cache coherence misses

给定一个在多核上运行的程序 运行,如果两个或更多核在同一个缓存行上运行,是否有办法测量存在的缓存一致性 invalidations/misses 的数量(即当 Core1 写入缓存行时,这会强制 Core2 刷新其缓存行副本,以便两个内核保持一致)?

如果我对这个概念使用了错误的术语,请告诉我。

是的,可以使用硬件性能计数器。 但是,获取它们的方式取决于操作系统和您的处理器。在 Linux 上,perf 也可用于跟踪性能计数器(尤其是 perf stat -e COUNTER_NAME_1,COUNTER_NAME_2,etc.)。或者,在 Linux 和 Windows 上,Intel VTune 也可以做到这一点。

可以使用 perf list(或使用 PMU 工具)检索硬件计数器列表。

您要衡量的指标类型类似于 MESI cache-coherence protocol 中的 所有权申请 (RFO)。希望大多数现代 (x86_64) 处理器都包含用于测量 RFO 的硬件事件。在 Intel Skylake 处理器上,有称为 l2_rqsts.all_rfo 的硬件事件,更准确地说是 l2_rqsts.code_rd_hitl2_rqsts.code_rd_missL2 缓存级别 执行此操作。或者,还有许多更高级的 RFO 相关硬件事件可用于 offcore 级别