JVM-003-MESI
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缓存>内存。