这是关于跨cache不同层的缓存一致性协议。我对L1的理解(X86_64)是,它完全归一个内核所有,L2位于2个内核和L3之间,用于CPU插槽中的所有内核。我已经阅读了MESI协议的功能,关于存储缓冲区,无效队列,无效消息等。我在这里怀疑的是,MESI只适用于L1,或者它也适用于L2和L3。或者在L2和L3之间是否存在不同的缓存同步。
发布于 2021-03-23 03:14:58
高速缓存级别的数量、如何相对于系统中的其他处理器或核心组织每个级别、以及在每个高速缓存中实现的一致性协议由核心微体系结构、非核心微体系结构以及在某些情况下的相关引导时间配置选项来定义。这些设计方面因供应商和处理器代次以及同一代内的型号而异。即使你只考虑过去几年发布的处理器,也有很多不同的设计。
英特尔和AMD始终清楚地记录了缓存层次结构的组织。然而,一致性协议并不总是清楚地记录在案。在任何官方文档中,您都找不到直接告诉您缓存使用的所有协议的章节。一些硬件性能事件名称暗示事件应用于的高速缓存中使用的一致性协议。
指令高速缓存(L1I)始终使用SI协议,因为在填充点和无效点之间永远不会修改线路。因此,条目可以是S状态,也可以是I状态。M和E状态仅相关,并且高速缓存支持修改现有行。
一些微体系结构具有仅支持直写式写命中策略的缓存。例如,AMD Bulldozer中的L1D是直写式缓存。在直写式缓存中,M状态没有意义。这意味着L1D要么使用SI,要么使用ESI。SI更有可能,因为它只需要每个条目的单个状态位。
英特尔处理器几乎总是在所有数据和统一缓存中支持回写策略。具有两级缓存的旧英特尔处理器(90年代和21世纪初)在L1D和L2上使用MESI。具有三级高速缓存的英特尔处理器也将MESI用于L1D和L2。有四个状态可用并不一定意味着所有的状态都被使用了。物理地址落入直写(WT)存储器类型的区域内的高速缓存线不使用M状态。(可能是类型从WB更改为WT,因此第一个WT访问可能在M中命中。)因此,WT线路的有效协议是ESI或SI。
从Nehalem-EX开始的英特尔处理器中的L3缓存使用MESIF协议和整个NUMA节点的包含目录(用于hit)。Nehalem-EX还使用内存中的2状态目录来跟踪哪些行属于包外IOH。内存中的目录协议在Westmere EX中更改,然后在至强E5、至强E5/E7 v2和至强E5/E7 v3中再次更改。这些处理器还支持具有不同折衷的L3未命中场景中的多个相干协议。
我不知道还能说什么来回答你的问题。我猜你可以说MESI或多或少适用于L2和L3。
https://stackoverflow.com/questions/66731349
复制相似问题