【问题标题】:Cache coherency(MESI protocol) between different levels of cache namely L1, L2 and L3不同级别缓存(即 L1、L2 和 L3)之间的缓存一致性(MESI 协议)
【发布时间】:2021-06-18 05:31:28
【问题描述】:

这是关于cache 不同层的缓存一致性协议。我对L1 的理解(X86_64)是,它由一个核心专有,L2 位于两个核心之间,L3 用于一个 CPU 插槽中的所有核心。我已经阅读了MESI 协议功能,关于存储缓冲区、无效队列、无效消息等。我的疑问是MESI 仅适用于L1,或者它适用于L2L3好吧。或者L2L3之间是否有不同的缓存同步。

【问题讨论】:

标签: caching x86-64 cpu-architecture cpu-cache mesi


【解决方案1】:

缓存级别的数量,每个级别相对于系统中其他处理器或内核的组织方式,以及在每个缓存中实现的一致性协议由核心微架构、非核心微架构定义,在某些情况下,相关的启动时配置选项。这些设计方面因供应商和处理器代以及同一代内的型号而异。即使您仅考虑过去几年发布的处理器,也有很多不同的设计。

英特尔和 AMD 始终清楚地记录缓存层次结构的组织。然而,一致性协议并不总是清楚地记录在案。您不会在任何官方文档中找到直接告诉您缓存使用的所有协议的部分。一些硬件性能事件名称暗示了事件应用到的缓存中使用的一致性协议。

指令高速缓存 (L1I) 始终使用 SI 协议,因为在填充点和失效点之间永远不会修改行。因此,条目可以处于 S 或 I 状态。 M 和 E 状态仅相关,缓存支持修改现有行。

某些微架构具有仅支持直写式写入命中策略的缓存。例如,AMD Bulldozer 中的 L1D 就是一个直写缓存。 M 状态在直写缓存中没有意义。这意味着 L1D 使用 SI 或 ESI。 SI 更有可能是因为它每个条目只需要一个状态位。

英特尔处理器几乎总是支持所有数据和统一缓存中的回写策略。具有两级高速缓存的旧 Intel 处理器(90 年代和 2000 年代初期)使用 MESI 作为 L1D 和 L2。具有三级缓存的英特尔处理器也将 MESI 用于 L1D 和 L2。四个状态可用的事实并不一定意味着所有状态都在使用。物理地址落在具有直写 (WT) 内存类型的区域内的高速缓存行不使用 M 状态。 (有可能是类型从 WB 变成了 WT,所以第一个 WT 访问可能会命中 M。)所以 WT 线路的有效协议是 ESI 或 SI。

从 Nehalem-EX 开始的 Intel 处理器中的 L3 缓存使用 MESIF 协议,其中包含整个 NUMA 节点的包含目录(在命中时使用)。 Nehalem-EX 还使用内存中的 2-state 目录来跟踪哪些行由外包装 IOH 拥有。内存目录协议在 Westmere-EX 中发生了更改,然后在 Xeon E5 中再次更改,在 Xeon E5/E7 v2 中再次更改,在 Xeon E5/E7 v3 中再次更改。这些处理器还支持 L3-miss 场景中的多种一致性协议,但需要权衡取舍。

我不知道还能说什么来回答你的问题。我想你可以说 MESI 或多或少适用于 L2 和 L3。

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2014-07-04
    • 1970-01-01
    • 2011-04-11
    • 2017-03-10
    • 2014-02-16
    相关资源
    最近更新 更多