【问题标题】:Cache coherence- MESI protocol缓存一致性 - MESI 协议
【发布时间】:2018-05-20 20:38:58
【问题描述】:

在使用 MESI 协议(使用 l1 和 l2 包容性)的缓存中是否存在这样的情况,其中 l2 可以向 l1 中已经无效的行发送无效指令。

【问题讨论】:

    标签: cpu-architecture cpu-cache second-level-cache mesi


    【解决方案1】:

    “无效请求”,你的意思是?

    我猜是这样,如果 L2 不根据它对 L1 的了解过滤它的请求,它可能只会在每次驱逐一行时向 L1 发送一个 INVD。不知道这对于真正的设计是否合理。 (从 L2 逐出可能是由硬件或软件预取到 L2 引起的,而不是响应 L1 回写。)

    或者,如果 CPU 内核可以在 L2 发送无效的同时使 L1 中的一条线无效,则 INVD 可能在它已经使该线无效之后到达 L1。

    【讨论】:

    • 很好地抓住了场景一,错过了。只是想知道这是否是维护包容性财产的一部分。
    • @IsuruH:包容性是一种单向属性。较大的缓存包含内部缓存,但也包含内部缓存不包含的行。它必须是包含标签的,所以它总是知道内部缓存有什么,即使内部缓存有 M 状态,因此外部有 I。但是内部缓存应该能够随时删除一行。 (通常,例如在 x86 上运行 clflush 或 NT 存储指令之后,我认为它也会将无效发送到外部缓存,但这需要时间并且为了保持包容性,L1D 必须删除 before 行它发送一个请求,要求 L2 这样做。)
    【解决方案2】:

    可能存在这样一种情况,即 L2 根本不知道 L1 是否有线路,因为允许 L1 静默丢弃它。

    事实上,如果 L2 是包容性的,那么在从 L1 驱逐未修改的线路(容量驱逐)时几乎没有任何理由浪费带宽,因为 L2 已经有一个副本并且没有任何更改。因此,L2 中的许多线路很可能在它们被从 L1 驱逐之后很长时间仍然存在。当它最终到达时(后来,因为它更大)从 L2 驱逐将不得不发送回一个窥探以强制执行包容性,因为它无法确定线路是否仍在 L1 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 2021-06-18
      • 2015-01-23
      • 1970-01-01
      • 2015-10-30
      • 2014-11-24
      相关资源
      最近更新 更多