首页 > 解决方案 > 有没有办法测量缓存一致性未命中

问题描述

给定在多个内核上运行的程序,如果两个或多个内核在同一缓存行上运行,是否有办法测量缓存一致性失效/未命中的数量(即当 Core1 写入缓存行时,然后强制Core2 刷新它的缓存行副本以使两个内核保持一致)?

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

标签: performancecpu-cache

解决方案


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

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

您要测量的指标类型类似于MESI 缓存一致性协议中的所有权请求(RFO) 。希望大多数现代 (x86_64) 处理器都包含硬件事件来测量 RFO。在 Intel Skylake 处理器上,有称为 的硬件事件,更准确地说,是在L2 缓存级别执行此操作。或者,有许多更高级的 RFO 相关硬件事件可以在核心层级使用。l2_rqsts.all_rfol2_rqsts.code_rd_hitl2_rqsts.code_rd_miss


推荐阅读