问题:
什么是MESI协议?
MESI协议
1. MESI的状态
基础概念
状态 是指的专用缓存块的状态。
即:每个核的私有缓存上,某个缓存块的状态。
- 对于单核处理器,每个 cache line 有 2 个标志:dirty 和 valid。
- 对于多核处理器,要多出来一些保证一致性的标志,MESI 包含 4 个标志:Modified, Exclusive, Shared, Invalid。
-
4 个状态可以使用两个 bit 来表示。
-
四种状态的意思:
NOTE:(这里的内存,也可能是共享LLC)
状态 含义 M 这个缓存块有效,被本cache修改了,和内存中 不一致,只存在于本cache中 E 这个缓存块有效,和内存中一致,只存在于本cache中 S 这个缓存块有效,和内存中一致,存在于 多个cache 中 I 这个缓存块 无效
-
MSI 状态的拓展
- 引入 E(Exclusive) 状态
- 表示缓存块仅驻存在一个缓存中,而且是清洁的。
-
问:什么是清洁?
dirty bit 代表:被修改后未下一级缓存,与下一级缓存不一致
清洁就是不dirty —— 与下一级缓存(即内存或共享LLC)一致
-
- 好处:
- 在同一核心对于处于独占状态的块进行后续写入时,不需要访问总线,也不会生成失效操作
- 因为处理器知道这个块在本地缓存中是独占的,只需要将独占改为已修改
- 引入 O(Owned) 状态
- 表示这个缓存块有效,被本cache修改了,和内存中不一致,但是存在于多个cache中,
- 区别:
- 在 MESI 中,共享 M 状态下的缓存块,会将其状态改为 S,并必须将这个块写回内存中;
- 在 MOESI 中,会在原缓存中由 M 变为 O,不再将其写回内存中;新共享这个块的缓存保持 S 状态;
- 因为存储器中没有最新内容,这个块的拥有者必须在发生缺失时提供该快
2. MESI 的状态转换
- 共有四种事件可能会导致缓存块的状态发生变化:
- Local Read
- Local Write
- 本地core发出的读、写请求
- Remote Read
- Remote Write
- 其他core发出的读、写请求
- 对于每个缓存块,都有 当前状态——》事件——》触发行为——》下一个状态 的过程。
- 在触发行为时,需要考虑到其他 cache 中对这个缓存块的状态,也可能会改变其他 cache 中这个缓存块的状态!
- 状态转换:
.