【问题标题】:In MESI cache coherence protocol, when exactly does the state of a cache line change if the data needs to be fetched from memory?在 MESI 缓存一致性协议中,如果需要从内存中获取数据,缓存行的状态究竟何时发生变化?
【发布时间】:2020-03-13 18:19:24
【问题描述】:

在MESI协议中当一个CPU:

  • 执行读取操作
  • 发现缓存行处于无效状态
  • 其他缓存中没有其他非无效副本

它将需要从内存中获取数据。这将需要一定数量的周期才能做到这一点。那么缓存行的状态是立即从(I)变为(E)还是只有在从内存中获取数据之后?

【问题讨论】:

    标签: cpu-architecture cpu-cache mesi


    【解决方案1】:

    我认为缓存通常会等待数据到达当它不存在时,您实际上无法在缓存中命中同一行的其他请求,只能命中实际存在的其他行(未命中命中)。因此,该行的状态仍然无效;该标签的数据无效,因此您还不能将其设置为有效状态。

    您希望同一行的另一个未命中(未命中的未命中)注意到该行已经有一个未完成的请求,并将其自身附加到该行请求缓冲区。 (例如 Intel x86 LFB = 行填充缓冲区)。由于找到 Invalid triggers 查看填充缓冲区但 Exclusive 没有,因此您也希望 Invalid 基于此推理。

    例如Skylake 性能计数器事件 mem_load_retired.fb_hit 计数,来自 perf list 输出:

    [退休的加载指令哪些数据源被加载错过了L1但是 由于先前未命中数据而未命中同一缓存行的 FB 准备好了。
    精确时支持地址(Precise event)]

    在没有内存级别并行性的非常旧/简单或玩具 CPU 的缓存中(整个管道或仅内存访问完全停止执行,直到数据到达),区别是没有意义的;当请求的数据正在进行时,缓存不会发生任何其他事情。

    在这样的 CPU 中,它只是一个实现细节。 (除了在负载运行时它仍应处理来自其他内核的 MESI 请求,因此标签需要再次反映正确的状态,否则在决定如何回复时需要检查额外的东西。)

    【讨论】:

      【解决方案2】:

      从内存中取出数据后。

      在实践中,MESI(或任何其他协议)除了 M/E/S/I 的主要状态外,还有许多过渡状态。在您的示例中,一致性协议将转换为“等待数据填充”状态,并且仅在获取数据并设置有效位后才会转换为 E。

      参考:gem5/ruby 中的缓存一致性协议——http://learning.gem5.org/book/part3/MSI/cache-transitions.html(搜索“无效,正在共享”)可能有用。

      【讨论】:

      • 您能否链接有关实际具有这些其他临时状态并使用额外位记录的真实 CPU 设计的参考?有一个状态意味着“寻找现有的填充缓冲区,线路正在路上”是有道理的,但我主要是一个软件人(出于性能原因对架构感兴趣)并且没有听说过它。
      • 我在 gem5/opal 中修改缓存一致性协议时了解了这种过渡状态。例如:learning.gem5.org/book/part3/MSI/cache-transitions.html(搜索“无效,正在共享”)可能有用。如果我应该将此链接添加到我的主要答案中,请告诉我。谢谢。
      • 是的,值得将该评论+链接移动到您的答案中。真正的硬件是否会以这种方式工作并不确定,例如而不是每个缓存标记中的位来指示已经分配了哪个行填充缓冲区,发现“无效”的加载可能只是探测所有填充缓冲区以查看其中一个是否已经在等待该行。特别是如果检查所有填充缓冲区是出于其他原因需要发生的事情,因此并行比较器/选择硬件已经需要存在。 (例如,对于从 WC 内存中加载的 x86 NT,其中数据仅位于 LFB 中,而不是缓存中)
      • 你的直觉是绝对正确的。除了每个缓存行都有一个有效位(参见 [讲座幻灯片 57] (safari.ethz.ch/architecture/fall2018/lib/exe/…) 缓存还有 MSHR(未命中状态处理寄存器)。MSHR 的工作(相同的注释 - 幻灯片 113)是将请求合并到一个缓存行以避免冗余内存请求和后续传输。
      • 中间状态(Culler/Singh 的第 387 页并行计算机体系结构)的原因是总线/网络的非原子性质。这本书有一个带图片的文章——比我能写的要好得多。第 6.2.5 节的亚马逊预览 (amazon.com/Parallel-Computer-Architecture-Hardware-Software/dp/…) 应该足够了。
      猜你喜欢
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2018-10-03
      相关资源
      最近更新 更多