MESI协议

科技工作者之家  |   2020-11-17 18:07

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

状态首字母缩略词MESI中的字母表示可以标记高速缓存行的四种独占状态(使用两个附加位编码):

1、修改(M)

高速缓存行仅存在于当前高速缓存中,并且是脏的 - 它已从主存储器中的值修改(M状态)。在允许对(不再有效)主存储器状态的任何其他读取之前,需要高速缓存在将来的某个时间将数据写回主存储器。回写将该行更改为共享状态(S)。

2、独家(E)
缓存行仅存在于当前缓存中,但是干净 - 它与主内存匹配。它可以随时更改为共享状态,以响应读取请求。或者,可以在写入时将其改变为修改状态。

3、共享(S)
表示此高速缓存行可能存储在计算机的其他高速缓存中并且是干净的 - 它与主存储器匹配。可以随时丢弃该行(更改为无效状态)。

4、无效(I)
表示此缓存行无效(未使用)。

对于任何给定的高速缓存对,给定高速缓存行的允许状态如图1。

当块标记为M(已修改)时,其他高速缓存中块的副本将标记为I(无效)。

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

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

本词条内容贡献者为:

方正 - 副教授 - 江南大学