Kay*_*Kay 1 x86 intel cpu-architecture cpu-cache
在 Intel Skylake 及更新版本中,每个核心的内存子系统可以直接参与环形总线流量吗?这个框图(以及随附的信息)似乎表明了这一点。
如果是这样,子系统的哪一部分被连接?
您提到的框图适用于 Skylake 客户端处理器,其中包含 2 或 4 个物理核心。在 Skylake 的维基百科页面中,这包括所有主流桌面处理器、所有移动处理器和所有 Xeon E3 v5 处理器。它们都使用环形互连。尽管客户端级 Skylake 处理器仅包含最多 4 个物理核心,但Coffee Lake等新一代处理器可能包含 6 个物理核心,并且也使用环形拓扑。对于其他Skylake 处理器(服务器处理器),使用网状互连。这将是首款使用网状互连的英特尔高端多核处理器。英特尔为此拥有一项专利,它实际上详细介绍了它的工作原理以及与什么相关的内容。
无论互连的拓扑如何,每个内核连接到互连的方式都是相似的。L1 填充缓冲器和 L2 不直接连接到互连。将会有一些组件扮演互连代理的角色,它知道如何通过互连创建、发送和接收消息到一个或多个节点。尽管您引用的页面中可能没有明确提及这一点,但 Skylake 服务器处理器的页面中提到了这一点,这似乎更好地解释了它在基本层面上的工作原理。至少,那里的数字比专利中的数字要好。
每个核心都连接到一个公共网格停止点 (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
|
|
Run Code Online (Sandbox Code Playgroud)
每个节点看起来都是这样的:
----- ----- -----
|CMS| -- bus -- |CHA| -- intra-node interconnect -- |L3 |
----- ----- -----
|
|
-----------------------
| (we are now in core)|
| L2 controller |
-----------------------
|
|
the rest of the core
Run Code Online (Sandbox Code Playgroud)
CHA 是做什么的?嗯,它被称为缓存和本地代理。什么?家乡代理在节点上吗?请注意,归属代理负责将物理内存地址转换为内存通道地址,这些地址通过互连传递到目标内存通道的目标内存控制器。在服务器级 Skylake 处理器中,归属代理实际上分布在节点上。CHA 的缓存部分意味着 CHA 还负责确定哪个 LLC 片包含映射到给定地址的缓存行,并将内存请求相应地路由到目标 LLC 片控制器。CHA 还通过执行以下操作来实现一致性协议:向其他节点(MESIF 或其变体之一)提供缓存行的(修改后的)副本,并在节点内窥探过滤器的帮助下响应一致性请求。非临时请求也通过 CHA。此外,CHA 通过将 I/O 请求发送到可以处理请求的目标节点(PCIe 节点)来处理 I/O 请求。
归属代理仅分布在服务器级 Skylake 处理器中。在客户端处理器中,主代理(和内存控制器)存在于系统代理中(请参阅 Wikichip 文章中的图)。另一方面,在服务器处理器中,每个内存控制器都是网格(NUMA)上的一个节点。
网状拓扑和分布式归属代理显着提高了服务器处理器在物理核心数量方面的可扩展性。英特尔专利讨论了在多个节点之间共享单个 CMS 以创建混合拓扑,这对于大量内核非常有用。但我认为没有任何 Skylake 处理器使用它。
(1) Wikichip 文章将其称为聚合网格停止点。我不知道这个词的由来。英特尔将其称为公共网格站、共享网格站或网格站。我将使用英特尔术语。
(2) Wikichip 文章将其称为缓存和主代理,但英特尔将其称为缓存和主代理或缓存主代理。