MESI:缓存一致性协议

  • 背景:多核CPU有各自的高速缓存,对于同一主存数据修改后,访问时会有不一致问题。MESI就是为了解决多核CPU高速缓存访问同一主存数据一致性。
  • 概念:
  • MESI(Modified Exclusive Shared Or Invalid):是一种广泛使用的支持写回策略的缓存一致性协议。
  • Write through(写通):每次CPU修改了cache中的内容,Cache立即更新内存的内容
  • Write back(写回):内核修改cache的内容后,cache并不会立即更新内存中的内容,而是等到这个cache line因为某种原因需要从
    cache中移除时,cache才会更新内存中的内容。
  1. Write through(写通)由于有大量的访问内存的操作,效率太低,大多数处理器都使用Writeback(写回)策略,在一定程度上减少了总线带宽压力。
  2. 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 协议的状态图

缓存一致性协议java 缓存一致性协议简介_多核

参考

MESI&MOESI协议

MESI--CPU缓存一致性协议

《大话处理器》Cache一致性协议之MESI

既然CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字?

10 张图打开 CPU 缓存一致性的大门

正确理解MESI协议