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

6

这是关于跨不同层次的缓存的一致性协议。我对L1的理解(X86_64)是,它由一个核心独占,L2位于两个核心之间,L3则为CPU插槽中所有核心的共享缓存。我已经阅读了MESI协议的功能,包括存储缓冲区、使无效队列、无效消息等。我的疑问是,MESI只适用于L1,还是也适用于L2L3?或者对于L2L3有不同的缓存同步机制。


1
是的,“一致性”在父/子缓存之间与兄弟之间是不同的。例如,在具有包容性L3的英特尔CPU中,L3标记充当“目录”,以跟踪哪个核心可能拥有共享状态或独占/修改状态下行的副本。Intel Core i7处理器使用哪种缓存映射技术?(因此,即使在每个核心私有缓存之间,也不是简单的经典MESI与共享总线。) - Peter Cordes
也许相关:MESI协议中L3$角色的作用是什么? / 现代x86 CPU使用哪种缓存一致性解决方案? / 缓存一致性-MESI协议。(这些大多是我的答案,但我认为其他一些用户也写了一些!) - Peter Cordes
1
MESI实际上只是指缓存块可以处于的稳定状态 - 不涉及协议、拓扑或实现的细节。如果您想了解各种配置下不同缓存控制器可用的状态和操作的详细说明,请参阅《内存一致性和缓存一致性入门》第二版,特别是第8章。 - hayesti
1个回答

5
缓存级数、每个级别与系统中其他处理器或核心的组织方式以及每个缓存中实现的一致性协议是由核心微架构、非核心微架构和在某些情况下相关的启动时配置选项定义的。这些设计方面因供应商、处理器代和同一代内的型号而异。即使仅考虑过去几年发布的处理器,也有很多不同的设计。
缓存层次结构的组织方式总是由英特尔和AMD清楚地记录。然而,一致性协议并不总是清晰记录。您不会在任何官方文档中找到一个直接告诉您所有缓存使用的协议的部分。一些硬件性能事件名称暗示了适用于事件所涉及的缓存的一致性协议。
指令缓存(L1I)始终使用SI协议,因为在线填充点和无效点之间永远不会修改行。因此,条目可以处于S或I状态。 M和E状态仅与缓存支持修改现有行有关。
一些微体系结构具有仅支持写穿透写命中策略的缓存。例如,AMD Bulldozer中的L1D是一个写穿透缓存。 M状态在写穿透缓存中没有意义。这意味着L1D使用SI或ESI。 SI更有可能,因为每个条目只需要一个状态位。
英特尔处理器几乎总是支持所有数据和统一缓存的写回策略。具有两级缓存的旧英特尔处理器(90年代和21世纪初)对L1D和L2使用MESI。具有三级缓存的英特尔处理器也对L1D和L2使用MESI。可用四种状态并不一定意味着所有状态都在使用。物理地址落在具有写穿透(WT)内存类型的区域中的缓存行不使用M状态。(类型可能从WB更改为WT,因此第一个WT访问可能会命中M。)因此,WT行的有效协议为ESI或SI。
Intel处理器中的L3缓存从Nehalem-EX开始使用MESIF协议,并具有整个NUMA节点的包含目录(用于命中)。 Nehalem-EX还采用了内存2状态目录,以跟踪由离线IOH拥有的行。内存目录协议在Westmere-EX中更改,然后在Xeon E5中再次更改,然后在Xeon E5 / E7 v2中再次更改,然后在Xeon E5 / E7 v3中再次更改。这些处理器还支持在L3-miss场景下使用多个一致性协议,具有不同的权衡。
我不知道还有什么可以回答您的问题。我想您可以说MESI或多或少适用于L2和L3。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接