我对缓存一致性系统在现代多核 CPU 中的功能有些困惑。我已经看到基于侦听的协议(例如基于 MESIF/MOESI 侦听的协议)已在 Intel 和 AMD 处理器中使用,另一方面,基于目录的协议对于多核来说似乎更加高效,因为它们不广播而是将消息发送到具体节点。
AMD 或 Intel 处理器中的现代缓存一致性解决方案是什么?它是基于侦听的协议(例如 MOESI 和 MESIF),还是只是基于目录的协议,或者是两者的组合(基于侦听的协议,用于同一节点内的元素之间的通信) ,以及基于目录的节点到节点通信)?
MESI 是根据监听共享总线来定义的,但现代 CPU 实际上并不是这样工作的。每个缓存行的 MESI 状态可以通过消息和窥探过滤器(基本上是一个目录)进行跟踪/更新,以避免广播这些消息,而这正是 Intel (MESIF) 和 AMD (MOESI) 实际所做的。
例如Intel CPU 中的共享包容性 L3 缓存(在 Skylake 服务器之前 https://www.guru3d.com/news-story/intel-steps-away-from-ringbus-skylake-x-sp-comminicate-through-mesh.html) 让 L3 标签充当窥探过滤器;除了跟踪 MESI 状态外,它们还记录哪个核心(如果有)拥有线路的私有副本。intel core i7 处理器使用哪种缓存映射技术? https://stackoverflow.com/questions/49092541/which-cache-mapping-technique-is-used-in-intel-core-i7-processor
例如,具有环形总线的 Sandybridge 系列 CPU(现代客户端芯片、直至 Broadwell 的服务器芯片)。核心 #0 读取一行。该线路在核心 #1 上处于修改状态。
-
核心 #0 上的 L1d 和 L2 缓存中的读取未命中,导致在环形总线上向包含该行的 L3 切片发送请求(通过某些物理地址位上的哈希函数进行索引)
-
L3 的那部分获取消息,检查其标签。如果此时发现 tag = Shared,则响应可以通过双向环形总线返回数据。
-
否则,L3 标记告诉它核心 #1 拥有一行的独占所有权:Exclusive,可能已提升为 Modified = dirty。
-
该 L3 切片中的 L3 缓存逻辑将生成一条消息,要求 1 号核心写回该行。
-
消息到达核心 #1 的环形总线站,并获取其 L2 或 L1d 写回该行。
IDK 如果一条环形总线消息可以直接由 Core #0 以及 L3 缓存的相关切片读取,或者如果该消息可能必须一直到达 L3 切片并且then从那里到核心#0。 (最坏情况的距离 = 基本上是围绕环的所有距离,而不是双向环的一半。)
这是超级手波;做not在具体细节上请相信我的话,但发送共享请求、RFO 或写回等消息的一般概念是正确的思维模型。BeeOnRope 有一个答案 https://stackoverflow.com/questions/61129773/how-do-the-store-buffer-and-line-fill-buffer-interact-with-each-other/61143498#61143498它具有类似的细分步骤,涵盖微指令和存储缓冲区以及 MESI / RFO。
在类似的情况下,如果核心 #1 只获得了独占所有权但从未写入该行,则它可以在不修改该行的情况下默默地删除该行。 (缓存中未命中的加载默认加载到独占状态,因此单独的存储不必为同一行执行 RFO)。在这种情况下,我假设核心没有线路,毕竟必须发送一条消息来表明这一点。或者,它可能会直接向也在环形总线上的内存控制器之一发送消息,而不是往返返回 L3 切片以强制其执行此操作。
显然,每个核心都可以并行发生这样的事情。 (每个核心可以等待多个未完成的请求:单个核心内的内存级并行性。在 Intel 上,L2 超级队列在某些微架构上有 16 个条目,而有 10 或 12 个 L1 LFB。)
四插槽及更高版本的系统在插槽之间具有监听过滤器;具有 Broadwell 及更早版本的 E5-xxxx CPU 的双路 Intel 系统只是通过 QPI 链路互相窥探垃圾邮件。 (除非您在双插槽系统中使用支持四插槽的 CPU (E7-xxxx))。多插槽很难,因为缺少本地 L3 并不一定意味着需要使用 DRAM; / 其他套接字可能已修改线路。
还相关:
-
https://www.realworldtech.com/sandy-bridge/ https://www.realworldtech.com/sandy-bridge/Kanter 的 SnB 文章涵盖了一些有关英特尔环形总线设计 IIRC 的内容,尽管它主要是关于每个内核的内部结构。共享包容性 L3 在 Nehalem 中是新的(当英特尔开始使用“酷睿 i7”品牌名称时),https://www.realworldtech.com/nehalem/ https://www.realworldtech.com/nehalem/
-
为什么 Skylake 在单线程内存吞吐量方面比 Broadwell-E 好很多? https://stackoverflow.com/questions/39260020/why-is-skylake-so-much-better-than-broadwell-e-for-single-threaded-memory-throug- 对于具有更多内核的 Intel CPU,环形总线上的更多跳数会损害 L3 和 DRAM 延迟,因此带宽 = 最大并发/延迟。
-
MOESI 缓存一致性协议相对于 MESI 有何优势? https://stackoverflow.com/questions/49983405/what-is-the-benefit-of-the-moesi-cache-coherency-protocol-over-mesi更多链接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)