Skylake 和更新的 Ring Bus

Skylake and newer Ring Bus

在 Intel Skylake 和更新版本中,每个内核的内存子系统是否可以直接参与环形总线流量? This block diagram (and the accompanying information) 似乎是这样暗示的。

如果是,附加了子系统的哪一部分?

您提到的框图是针对 Skylake 客户端处理器的,它包含 2 个或 4 个物理内核。在维基百科 page on Skylake, this includes all Mainstream Desktop processors, all Mobile processors, and all Xeon E3 v5 processors. All of them use a ring interconnect. Even though client-grade Skylake processors only include up to 4 physical cores, newer generations such as Coffee Lake may include 6 physical cores and also use the ring topology. In the case of other Skylake processors (the server ones), a mesh interconnect is used. These would be the first Intel high-end multicore processors that use a mesh interconnect. Intel has a patent 中,它实际上详细介绍了它是如何工作的以及什么与什么有关。

无论互连的拓扑如何,每个核心连接到互连的方式都是相似的。 L1 填充缓冲器和 L2 不直接连接到互连。将有一些组件扮演互连代理的角色,知道如何通过互连创建、发送和接收消息到一个或多个节点。尽管在您引用的页面中可能没有明确提到这一点,但在有关 Skylake 服务器处理器的页面中提到了它,它似乎在解释 how it works at a basic level 方面做得更好。至少,那里的数字比专利上的数字要好。

每个核心都连接到一个公共网状停止点 (CMS)1,它是非核心的一部分(所有核心之外的东西,但在芯片上)。 CMS 知道互连上所有节点的标识符,包括它自己的节点。当它收到一条不是发送给它的节点的消息时,它会将它转发到计划路线上的下一个节点。如果消息是要发送给节点的,它会被传送到一个组件,该组件是核心的一部分,称为缓存和本地代理 (CHA)2。根据该专利,CHA 将核心的 L2 连接到节点上的 L3 切片和 CMS(本质上是节点和互连之间的网关)。在客户端级 Skylake 处理器中,没有 CHA,只有 "CA"(我想出这个词只是为了讨论它)。我会更详细地讨论这个问题。

互连看起来像这样:

                        |
                        |
                  vertical ring
                        |
                        |
                      -----                        -----
 |node A| -- bus --   |CMS|  -- horizontal ring -- |CMS| -- bus -- |node B|
                      -----                        -----
                        |
                        |
                  vertical ring
                        |
                        |

每个节点看起来像这样:

-----            -----                                -----
|CMS|  -- bus -- |CHA| -- intra-node interconnect --  |L3 |
-----            -----                                -----
                   |
                   |
         -----------------------
         | (we are now in core)|
         |    L2 controller    |
         -----------------------
                   |
                   |
           the rest of the core

CHA 是做什么的?好吧,它叫做 cachehome 代理。什么?归属代理在节点上?请注意,归属代理负责将物理内存地址转换为内存通道地址,这些地址通过互连传递到目标内存通道的目标内存控制器。在服务器级 Skylake 处理器中,归属代理实际上分布在节点上。 CHA 的 cache 部分意味着 CHA 还负责确定哪个 LLC 切片包含映射到给定地址的缓存行,并将内存请求相应地路由到目标 LLC 切片控制器. CHA 还通过执行诸如向其他节点(MESIF 或其变体之一)提供(修改的)缓存行副本以及在节点上监听过滤器的帮助下响应一致性请求之类的事情来实现一致性协议。非临时请求也通过 CHA。此外,CHA 通过将请求发送到可以处理请求的目标节点(PCIe 节点)来处理 I/O 请求。

归属代理仅分布在服务器级Skylake处理器中。在客户端处理器中,归属代理(和内存控制器)存在于系统代理中(参考 Wikichip 文章中的图)。另一方面,在服务器处理器中,每个内存控制器都是网格上的一个节点 (NUMA)。

网状拓扑结构和分布式本地代理显着提高了服务器处理器在物理内核数量方面的可扩展性。英特尔专利讨论了在多个节点之间共享单个 CMS 以创建混合拓扑,这对于大量内核非常有用。不过,我认为没有任何 Skylake 处理器使用它。


(1) Wikichip 文章称其为聚合网格光阑。我不知道这个词的起源。英特尔称其为公共网状站、共享网状站或网状站。我将使用英特尔术语。

(2) Wikichip的文章称它为caching and home agent,而Intel称它为cache and home agent或cache-home agent。