【问题标题】:Is there a way to measure cache coherence misses有没有办法测量缓存一致性未命中
【发布时间】:2020-11-17 09:38:21
【问题描述】:

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

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

【问题讨论】:

  • 当前形式的问题过于宽泛。指定您感兴趣的架构、供应商和微架构。将相应的标签添加到问题中。询问是否计算无效或未命中?提及您将使用它们的目的可能也很有用。关于,Core2 刷新它的副本,大多数真正的处理器都不是这样工作的。

标签: performance cpu-cache


【解决方案1】:

是的,硬件性能计数器可用于执行此操作。 但是,获取它们的方法是依赖于操作系统和您的处理器。在 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。在英特尔 Skylake 处理器上,有称为 l2_rqsts.all_rfo 的硬件事件,更准确地说是 l2_rqsts.code_rd_hitl2_rqsts.code_rd_missL2 缓存级别执行此操作。另外,还有许多更高级的 RFO 相关硬件事件可以在offcore 级别使用。

【讨论】:

  • 完美,谢谢。我搜索了perf list,但正在搜索“连贯性”和“连贯性”等术语;知道要使用的术语是“请求所有权”也会很有帮助。
  • l2_rqsts.all_rfo 并没有真正计算甚至近似一致性失效,因为它包括 RFO 命中和未命中,并非所有未命中都会导致失效。不过,核心外响应事件以适当的方式进行,具体取决于微架构。
  • @HadiBrais 您能否发布一份可能的offcore 响应事件 列表,这些事件可用于测量英特尔skylake xp 处理器上的缓存一致性缺失?有没有关于事件的详细解释的好消息来源?英特尔手册中的一行定义描述性不够。
  • @ajit 这些事件记录在英特尔 SDM 第 3 卷的第 18.3.8.2.1 节中。如果该部分有不清楚的地方,您可以在此处或英特尔性能中发布新问题监控论坛。
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 2012-03-12
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
相关资源
最近更新 更多