CPU多级缓存——CPU缓存一致性协议(MESI)

MESI协议是一种常见的CPU缓存一致性协议,它包括Modified、Exclusive、Shared和Invalid四种状态。协议保证了当多个缓存同时持有同一数据时的一致性。文章介绍了MESI状态的含义及转换,以及相对于MSI协议的优势,如减少不必要的总线请求,提高顺序和并行应用的效率。然而,MESI协议在连续读写操作时可能导致额外的内存刷新开销。

简介

MESI协议是基于Invalidate的高速缓存一致性协议,并且是支持回写高速缓存的最常用协议之一。 它也被称为伊利诺伊州协议(由于其在伊利诺伊大学厄巴纳 - 香槟分校的发展)。 回写高速缓存可以节省很多通常在写入缓存上浪费的带宽。 

四种状态的介绍

每一块被写入cache的内容都会使用4种状态进行标记。它们分别为:

M:被修改的(Modified)

此高速缓存行仅存在于当前的cache当中,并且是脏数据(即该部分内容与主内存对应的内容是不一致的,因为它被CPU修改了)。在允许其他cache在主存读取该部分内容的任何状态之前需要cache将数据回写主存。

E:独享的(Exclusive)

此高速缓存行仅存在于当前的cache当中,与主存数据一致。

S:共享的(Shared)

此高速缓存行可能存储在计算机其他的cache中,与主存数据一致,可以随时丢弃改行。

I:无效的(Invalid)

表示此缓存行无效。

四种状态的转换

四种状态之间的转换可以通过下面这张MESI状态迁移图来表示。

local read表示此cache或CPU读取本高速缓存行;local write表示此CPU修改本高速缓存行;

remote read表示其他cache或CPU读取本高速缓存行;remote write表示其他CPU修改本高速缓存行。

关于这张图的解读可参考表格。

                                                    

                                                                                           MESI状态迁移图

当前状态事件行为下一个状态
MLocal Read
  • 从cache中直接读取数据,状态不变
M
Local Write
  • 修改cache中的数据,状态不变
M
Remote Read
  • cache中的该数据回写内存,cache line转为S
S
Remote Write
  • cache中的该数据回写内存,其他CPU会修改该数据,因此cache line状态转为I
I

E

Local Read
  • 从cache中直接取数据,状态不变
I
Local Write
  • 修改cache中的数据,cache line状态转为M
M
Remote Read
  • 数据与其他cache块或其他CPU共用,cache line状态转为S
S
Remote Write
  • 数据被其他CPU修改,cache line状态转为I
I
SLocal Read
  • 直接从cache中取数据,状态不变
S
Local Write
  • 修改cache中对应的目标数据,cache line状态转为M
  • 其他cache的cache line状态转为I
M
Remote Read
  • /
S
Remote Write
  • 数据被其他CPU修改,本cache对应数据的cache line状态转为I
I
ILocal Read
  • 其他cache没有目标数据,本cache从内存中取数据,cache line状态为E
  • 其他cache有这份数据,但这份数据状态为M,要求数据回写内存,本cache再从内存中读写目标数据,2个cache line状态都为S
  • 其他cache有这份数据,且状态为E或者S,本cache从其他cache或内存中读取目标数据,关于该数据的cache line状态都转为S
E/S
Local Write
  • 从内存或其他cache中读取数据并修改,cache line为M
  • 其他cache有这份数据且cache line为M,需要先将数据回写内存
  • 其他cache有这份数据且cache line不为M,其他cache的cache line转为I
M
Remote Read
  • /
I
Remote Write
  • /
I

                                                                                            MESI 状态迁移表

 

MESI优于MSI的优势

两种协议之间最显着的差异是MESI协议中存在的额外“独占”状态。添加了这个额外状态,因为它有许多优点。如果处理器需要读取其他处理器都没有的块然后写入它,那么在MSI的情况下将发生两个总线事务。首先是BusRd请求,在写入块之前读取块,然后是BusRdX请求。这种情况下的BusRdX请求是无用的,因为没有其他缓存具有相同的块,但是一个缓存无法知道这一点。因此,MESI协议通过添加Exclusive状态克服了这一限制,从而节省了总线请求。这在顺序应用程序运行时会产生巨大差异。由于只有一个处理器正在处理它,所有访问都将是独占的。 MSI在这里表现得非常糟糕。即使在高度并行的应用程序中,数据共享最少,MESI也会快得多。

 

MESI的缺点

 

如果由特定块上的各种高速缓存执行连续读取和写入操作,则每次都必须将数据刷新到总线上。因此,主存储器将在每次冲洗时拉动它并保持清洁状态。但这不是一项要求,只是由于MESI的实施而导致的额外开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值