MESI:缓存一致性协议
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(被修改) | ✔ | ✘ | 缓存行中的内存需要在未来的某个时间点(允许其它CPU读取请主存中相应内存之前)写回(write back)主存 |
| Exclusive(独占的) | ✔ | ✔ | 该状态可以在任何时刻当有其它CPU读取该内存时变成共享状态(shared) |
| Shared(共享的) | ✘ | ✔ | 当有一个CPU修改该缓存行中,其它CPU中该缓存行可以被作废(变成无效状态(Invalid))。 |
| Invalid(无效的) | ✘ | ✘ | 该缓存是无效的(可能有其它CPU修改了该缓存行)。 |
MESI 协议的状态图


浙公网安备 33010602011771号