MESI:缓存一致性协议
- 背景:多核CPU有各自的高速缓存,对于同一主存数据修改后,访问时会有不一致问题。MESI就是为了解决多核CPU高速缓存访问同一主存数据一致性。
- 概念:
- MESI(Modified Exclusive Shared Or Invalid):是一种广泛使用的支持写回策略的缓存一致性协议。
- Write through(写通):每次CPU修改了cache中的内容,Cache立即更新内存的内容
- Write back(写回):内核修改cache的内容后,cache并不会立即更新内存中的内容,而是等到这个cache line因为某种原因需要从
cache中移除时,cache才会更新内存中的内容。
- Write through(写通)由于有大量的访问内存的操作,效率太低,大多数处理器都使用Writeback(写回)策略,在一定程度上减少了总线带宽压力。
- Cache如何知道这行有没有被修改?需要一个标志-dirty标志。Dirty标志为1,表示cache的内容被修改,和内存的内容不一致,当该cache line被移除时,数据需要被更新到内存,dirty标志位0(称为clean),表示cache的内容和内存的内容一致。
- 状态:
CPU
中每个缓存行(caceh line
)使用4种状态进行标记(使用额外的两位(bit
)表示):
状态 | 独占 | 与主存一致 | 备注 |
Modified(被修改) | ✔ | ✘ | 缓存行中的内存需要在未来的某个时间点(允许其它 |
Exclusive(独占的) | ✔ | ✔ | 该状态可以在任何时刻当有其它 |
Shared(共享的) | ✘ | ✔ | 当有一个 |
Invalid(无效的) | ✘ | ✘ | 该缓存是无效的(可能有其它 |
MESI 协议的状态图
参考