CPU多级缓存分析--状态MESI变化
首先介绍一下MESI是什么
M : modified 被修改的缓存行, 随时准备写入主缓存的状态
E : exclusive 独享的缓存航, 当前cpu的独享状态
S : shared 共享的缓存行
I : invalid 失效的状态
当前状态 | 事件 | 行为 | 下一个状态 |
I(invalid) | local read |
1.如果其他处理器中没有这份数据,本缓存从内存中取该数据,状态变为E 2.如果其他处理器中有这份数据,且缓存行状态为M,则先把缓存行中的内容写回到内存。本地cache再从内存读取数据,这时两个cache的状态都变为S 3.如果其他缓存行中有这份数据,并且其他缓存行的状态为S或E,则本地cache从内存中取数据,并且这些缓存行的状态变为S |
E或S |
local write |
1.先从内存中取数据,如果其他缓存中有这份数据,且状态为M,则先将数据更新到内存再读取(个人认为顺序是这样的,其他CPU的缓存内容更新到内存中并且被本地cache读取时,两个cache状态都变为S,然后再写时把其他CPU的状态变为I,自己的变为M) 2.如果其他缓存中有这份数据,且状态为E或S,那么其他缓存行的状态变为I |
M | |
remote read | remote read不影响本地cache的状态 | I | |
remote write | remote read不影响本地cache的状态 | I | |
E(exclusive) | local read | 状态不变 | E |
local write | 状态变为M | M | |
remote read | 数据和其他核共享,状态变为S | S | |
remote write | 其他CPU修改了数据,状态变为I | I | |
S(shared) | local read | 不影响状态 | S |
local write | 其他CPU的cache状态变为I,本地cache状态变为M | M | |
remote read | 不影响状态 | S | |
remote write | 本地cache状态变为I,修改内容的CPU的cache状态变为M | I | |
M(modified) | local read | 状态不变 | M |
local write | 状态不变 | M | |
remote read | 先把cache中的数据写到内存中,其他CPU的cache再读取,状态都变为S | S | |
remote write | 先把cache中的数据写到内存中,其他CPU的cache再读取并修改后,本地cache状态变为I。修改的那个cache状态变为M | I |