Caching 不同缓存级别(即L1、L2和L3)之间的缓存一致性(MESI协议)

Caching 不同缓存级别(即L1、L2和L3)之间的缓存一致性(MESI协议),caching,x86-64,cpu-architecture,cpu-cache,mesi,Caching,X86 64,Cpu Architecture,Cpu Cache,Mesi,这是关于跨缓存的不同层的缓存一致性协议。我对L1的理解(X86_64)是,它由一个内核独占,而L2位于两个内核之间,而L3则位于CPU插槽中的所有内核之间。我已经阅读了MESI协议功能,关于存储缓冲区、无效队列、无效消息等。我怀疑MESI是否仅适用于L1,还是同样适用于L2和L3。或者,对于L2和L3是否存在不同的缓存同步缓存缓存级别的数量,每个级别相对于系统中的其他处理器或核心的组织方式,以及每个缓存中实现的一致性协议由核心微体系结构、非核心微体系结构和,在某些情况下,可以选择相关的启动时配置

这是关于跨
缓存的不同层的缓存一致性协议。我对
L1
的理解(X86_64)是,它由一个内核独占,而
L2
位于两个内核之间,而
L3
则位于CPU插槽中的所有内核之间。我已经阅读了
MESI
协议功能,关于存储缓冲区、无效队列、无效消息等。我怀疑
MESI
是否仅适用于
L1
,还是同样适用于
L2
L3
。或者,对于
L2
L3

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

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

指令缓存(L1I)始终使用SI协议,因为在填充点和失效点之间从未修改过一条线。因此,条目可以是S或I状态。M和E状态仅相关,缓存支持修改现有行

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

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

以Nehalem EX开始的Intel处理器中的L3缓存使用MESIF协议,对整个NUMA节点使用包含目录(在命中时使用)。Nehalem EX还使用内存中的2状态目录来跟踪哪些行属于非包IOH。内存中目录协议在Westmile EX中更改,然后在Xeon E5中再次更改,在Xeon E5/E7 v2中再次更改,在Xeon E5/E7 v3中再次更改。这些处理器还支持三级未命中场景中的多个一致性协议,具有不同的权衡


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

是的,父/子缓存之间的“一致性”不同于兄弟缓存之间的一致性。e、 g.在包含L3的英特尔CPU中,L3标记充当“目录”,跟踪哪个内核可能具有共享或独占/修改状态下的线路副本。(因此,即使在每个核心的私有缓存之间,也不是简单的带有共享总线的经典MESI。)可能相关://。(事实证明,这些都是我的答案;我想其他一些用户也写了一些!)MESI实际上只是指缓存块可能处于的稳定状态,而不是协议、拓扑或实现的细节。如果您想对各种配置的不同缓存控制器上可用的状态和操作进行全面的解释,请参阅,特别是第8章。