2

MESI(修改、独占、共享、无效)协议用于 CPU 缓存进行通信并确保它们都使用缓存行的最新值。当一个 CPU 修改高速缓存行值时,订阅此高速缓存行的所有其他 CPU 都会在高速缓存行发生更改时保持警报。

但是,在我读过的所有关于 MESI 的文献中,我没有看到在协议通信时是否有任何性能成本?这个成本是否只是 x86LOCK前缀成本的一部分?我相当确定即使 x86LOCK前缀不是,也可以使用 MESI?

注意英特尔实际上使用 MESIF 协议——其中 F 是附加的“转发”状态。

4

2 回答 2

1

是的,MESI(F) 协议用于所有内存操作(即读取和写入)。想象一下,您已经将某些内容写入缓存(即“M”状态),现在必须清除该行。协议说你需要把它写回内存。如果不使用该协议,那么我们要么需要始终写入内存(巨大的带宽成本),要么内存不一致(坏主意)。

也就是说,如果没有共享,仍将使用 MESI 协议,在这种情况下,线路将处于“E”、“I”或“M”状态,不会使用“S”。

附注:请记住,系统上的几乎所有应用程序通常都共享一些动态库代码。您认为代码将驻留在哪里以及如何管理其访问权限?

现在,回答您关于性能影响的问题。是的,实施 MESI(f) 或任何一致性协议将对性能产生影响,但与不存在一致性协议的情况相比,这种影响实际上是积极的。在这种情况下,每次读/写都需要进入主内存(即,您的应用程序将慢 100 倍)。

所以,底线:虽然 MESI(f) 协议确实对带宽有负面影响,但总体而言它对性能有积极影响。与我们不使用缓存一致性协议(即没有缓存)的情况相比,它实际上为我们带来了很多性能(和功率)

于 2016-01-14T20:17:31.150 回答
0

MESI 协议通过在 CPU 间总线上交换消息来工作(但是该总线是实现的)。该总线的吞吐能力有限,因此可以通过使用原子指令使其饱和。

这就是为什么写得不好的应用程序不必要地使用原子指令会对整个机器产生不利影响。

于 2014-11-25T11:13:10.817 回答