【问题标题】:Performance cost of MESI protocol?MESI 协议的性能成本?
【发布时间】:2015-01-23 08:17:16
【问题描述】:

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

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

NB Intel 实际上使用 MESIF 协议 - 其中 F 是附加的“转发”状态。

【问题讨论】:

  • 仅在执行原子指令时才需要缓存一致性协议的假设是错误的。性能受到的影响在很大程度上取决于情况。但是一个众所周知的缓存一致性协议对性能的影响的例子是false sharing
  • 这太宽泛了,你有很多类型的缓存类型(不同的参数,如包容性、WB/WT、私有/共享等),以及许多类型的 MESI 风格,有时甚至是多种类型同一个CPU。你问的是哪一个?您想检查什么替代方案作为基线?

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 如果你不使用原子指令,你也需要在 x86 上使用缓存一致性协议。原子指令更昂贵的原因是它们必须锁定总线。
    • @Voo 我很确定我没有。
    • 哦,你知道的。简单的例子:如果你不这样做,虚假分享就不会成为问题。
    • 当然可以,缓存一致性比单纯的原子性更广泛。如果一个核心写入一行,另一个核心稍后读取,则不能依靠修改自行到达内存/共享缓存级别。
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2019-09-23
    相关资源
    最近更新 更多