MESI协议的性能成本?

时间:2014-11-25 10:58:22

标签: multithreading x86 cpu-architecture cpu-cache mesi

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

然而,在我读过的关于MESI的所有文献中,我都没有看到在协议传达时是否有任何性能成本?这笔费用是否只是x86 LOCK前缀费用的一部分?我相当肯定即使x86 LOCK前缀不是?

,也可以使用MESI

NB英特尔实际上使用MESIF协议 - 其中F是额外的"转发"状态。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

是的,MESI(F)协议用于所有内存操作(即读取和写入)。想象一下,你已经在缓存中写了一些内容(即' M'州),现在该行必须被驱逐。协议说你需要把它写回内存。如果协议没有被使用,那么我们需要总是写入内存(巨大的带宽成本)或者内存不一致(糟糕的想法)。

也就是说,如果没有共享,仍然会使用MESI协议,在这种情况下,这些行将在E' I' I'中,或者' M'国家和没有' S'将会被使用。

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

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

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