JVM-003-MESI

2020-11-13  本文已影响0人  Docker_Compose

MESI

一、缓存一致性协议

  缓存一致性协议有很多,不同的厂商使用的缓存一致性协议是不同的,其中intel使用的缓存一致性协议是MESI。

  MESI是一种广泛使用的支持写策略的缓存一致性协议。

1、缓存行

 缓存行,cache line。

 64 byte。缓存的最小单位。


2、MESI协议中的四种状态
M

 Modified,被修改的

 cache line 被某个cpu缓存,并被修改过,即与主存的data不一致。

 未来某个时间点,允许其他cpu读取主存中的相应内存之前,cache line将被写回主存。

E

 Exclusive,独享的

 cache line被某个cpu缓存,并未被修改过,即与主存的data一致。

 Exclusive-->Shared:任何时刻,其他cpu读取主存中相应的内存时,该cache line的状态就会变成Shared。

 Exclusive-->Modified:该cpu修改了cache line,cache line的状态就会变成Modified。

S

 Shared,共享的

  该缓存行被多个cpu缓存,并且与主存的data一致。

  Shared-->Invalid。某一个cpu修改了cache line,其他cpu的cache line的状态就会变成Invalid。

I

  Invalid,无效的

 cahce line是无效的。因为其他cpu修改过。



3、伪共享问题

cache line之间相互影响。x与y问题




二、合并写机制

 合并写机制也是底层优化的方式之一。
 它将多个指令load到了WCBuffer中,然后一块执行


WCBuffer

 WCBuffer是介于cpu与二级缓存之间的缓存。其只有4 byte,但效率比一级缓存还要快。它主要是用于合并写机制。

cpu读/写data流动:cpu->寄存器->WCbuffer>三级缓存->内存




三、cpu指令乱序执行

 由于cpu在寄存器,三级缓存以及内存执行的效率是不一样的,因此,cpu的指令顺序执行的话,cpu的执行效率就会十分的低下。
 因此,为了提高cpu的执行效率,cpu指令允许乱序执行。
 但是,cpu指令乱序执行有一个大前提,那就是多个指令之间不相干。
 cpu在不同位置执行的效率:寄存器>lv1缓存>lv2缓存>lv3缓存>内存。

上一篇下一篇

猜你喜欢

热点阅读