CPU缓存一致性协议:MESI

今天在看《架构解密》的时候,看到一段介绍CPU缓存一致性的介绍,文章详细解析了Intel多核处理器是如何解决数据一致性问题的,这本书在2020年看过一遍,现在又拿出来学习,感觉要学习的知识还有很多,关于CPU的多核协作的可以看看原先写的一篇文章《多线程开发中Cache伪共享问题及@Contended的使用》里面有关多核协作的简单介绍。

MESI

MESI协议是基于Invalidate的高速缓存一致性协议,并且是支持回写高速缓存的最常用协议之一。 它也被称为伊利诺伊州协议(由于其在伊利诺伊大学厄巴纳 - 香槟分校的发展)。 回写高速缓存可以节省很多通常在写入缓存上浪费的带宽。 回写高速缓存中总是存在脏状态,表示高速缓存中的数据与主存储器中的数据不同。 如果块驻留在另一个缓存中,则Illinois协议要求缓存在未命中时缓存传输。 该协议相对于MSI协议减少了主存储器事务的数量。 这标志着性能的显着改善。- 来源于百度百科

MESI状态

在MESI协议中,每个Cache line有4个状态,可用2个bit表示

M Modified E Exclusive S Shared I Invalid
修改状态 独享状态 共享状态 无效状态

M: 被修改(Modified)

CPU缓存一致性协议:MESI_第1张图片

该缓存行只被缓存在该CPU(核1)的缓存中,并且是被修改过的(核1的cache line),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU(核2)读取(第①步)主存中相应内存之前)写回(第②步)主存,然后重新读取(第③步)。当被写回主存之后,该缓存行的状态会变成独享(exclusive)状态。

E: 独享的(Exclusive)

CPU缓存一致性协议:MESI_第2张图片

该缓存行只被缓存在该CPU的缓存中,它是未被修改过的(核1的cache line),与主存(memory)中数据一致。该状态可以在任何时刻当有其它CPU(核2)读取该内存时变成共享状态(shared)。同样地,当CPU修改该缓存行中内容时,该状态可以变成Modified状态。

S: 共享的(Shared)

CPU缓存一致性协议:MESI_第3张图片

该状态意味着该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存数据一致(clean),当有一个CPU修改该缓存行中,

其它CPU中该缓存行可以被作废(变成无效状态(Invalid))。

I: 无效的(Invalid)CPU缓存一致性协议:MESI_第4张图片

该缓存(核1 核2的cache line)是无效的(可能有其它CPU(核3)修改了该缓存行)。

你可能感兴趣的:(系统架构,MESI,缓存一致性,cache,line)