简介
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状态迁移图
| 当前状态 | 事件 | 行为 | 下一个状态 |
| M | Local Read |
| M |
| Local Write |
| M | |
| Remote Read |
| S | |
| Remote Write |
| I | |
|
E | Local Read |
| I |
| Local Write |
| M | |
| Remote Read |
| S | |
| Remote Write |
| I | |
| S | Local Read |
| S |
| Local Write |
| M | |
| Remote Read |
| S | |
| Remote Write |
| I | |
| I | Local Read |
| E/S |
| Local Write |
| M | |
| Remote Read |
| I | |
| Remote Write |
| I |
MESI 状态迁移表
MESI优于MSI的优势
两种协议之间最显着的差异是MESI协议中存在的额外“独占”状态。添加了这个额外状态,因为它有许多优点。如果处理器需要读取其他处理器都没有的块然后写入它,那么在MSI的情况下将发生两个总线事务。首先是BusRd请求,在写入块之前读取块,然后是BusRdX请求。这种情况下的BusRdX请求是无用的,因为没有其他缓存具有相同的块,但是一个缓存无法知道这一点。因此,MESI协议通过添加Exclusive状态克服了这一限制,从而节省了总线请求。这在顺序应用程序运行时会产生巨大差异。由于只有一个处理器正在处理它,所有访问都将是独占的。 MSI在这里表现得非常糟糕。即使在高度并行的应用程序中,数据共享最少,MESI也会快得多。
MESI的缺点
如果由特定块上的各种高速缓存执行连续读取和写入操作,则每次都必须将数据刷新到总线上。因此,主存储器将在每次冲洗时拉动它并保持清洁状态。但这不是一项要求,只是由于MESI的实施而导致的额外开销。
MESI协议是一种常见的CPU缓存一致性协议,它包括Modified、Exclusive、Shared和Invalid四种状态。协议保证了当多个缓存同时持有同一数据时的一致性。文章介绍了MESI状态的含义及转换,以及相对于MSI协议的优势,如减少不必要的总线请求,提高顺序和并行应用的效率。然而,MESI协议在连续读写操作时可能导致额外的内存刷新开销。
630

被折叠的 条评论
为什么被折叠?



