Intel CPU 中的“Sub-NUMA Clustering”和“Hemisphere and Quadrant Modes”有什么区别?

What's the difference between "Sub-NUMA Clustering" and "Hemisphere and Quadrant Modes" in Intel CPU?

提问人:Frontier_Setter 提问时间:4/28/2023 最后编辑:Peter CordesFrontier_Setter 更新时间:4/30/2023 访问量:1257

问:

英特尔发布的技术概述中,“Sub-NUMA Clustering”和“Hemisphere and Quadrant Modes”分别进行了描述。但它们之间的主要区别尚不清楚。

在这个答案中,它说“在象限或半球模式下,相同的 LLC 映射作为 SNC 完成,但它被公开为一个 numa 域和一个物理内存映射。

在英特尔 64 位和 IA-re 架构优化参考手册中,第 10 章“半球和象限模式”中仅介绍了“Sub-NUMA 集群”。

在本文档中,“半球和象限模式”被归类为“基于 UMA 的聚类”,并与 SNC 冲突。

我可以这样理解吗:对于CPU端和LLC行为端,这两种模式完全相同,只是暴露给操作系统的NUMA节点数量不同。

缓存 x86 CPU 架构 Intel NUMA

评论


答:

5赞 Margaret Bloom 4/29/2023 #1

您可以将象限和半球模式简化为非 NUMA 感知软件的一种“自动魔术”SNC(子 NUMA 聚类),但事实并非如此。

这个 Xeon Phi (KNL) 演示文稿这个 Intel 的专利和您最初的第 4 代 Xeon 可扩展产品概述帮助我将各个部分联系在一起。主流至强可扩展处理器中的核心数量正在接近至强融核中的核心数量,看起来 Sub-NUMA 集群在 Xeon Phi 中运行良好,可以在主流 CPU 中使用相同的设计。


为了清楚起见,让我们首先回顾一下 L2 未命中时会发生什么。我在这里挥舞着细节,因为我不记得所有确切的命名法和协议。我只是给出一个高层次的概述,以了解集群模式,并确保这个答案对其他读者有用。

当核心 L2 中出现未命中时,缓存会向名为 CHA(缓存主代理)的指定组件发送请求。CHA 与网格的停止相关联:它管理 LLC 的切片,并且可以在 LLC 未命中时向内存控制器发送请求。
基本上,CHA 是内核查询以与 L2 上方的内存交互的组件,每个内核都有自己的 CHA 和 LLC 切片。

UMA 群集模式

也称为 COD(Cluster On Die)或 All-to-All/All-2-All。
这是经典的操作模式。如果发生 L2 未命中,内存(物理)地址用于指定插槽中所有可用的 CHA 中的任何一个。这是通过哈希函数完成的,该哈希函数旨在交错来自所有 CHA 中每个内核的请求。交错是在缓存行粒度上完成的,因为这是移动的单位。
例如,如果我们有 28 个内核,因此有 28 个 CHA,理想情况下,请求 28 个连续缓存行(不在 L2 中)的核心会将 28 个请求分散到所有 28 个 CHA 中。
然而,这还不是结束:一旦 CHA 收到请求,它就需要将其发送到内存控制器 (iMC),该控制器可以是任何内存控制器(至少具有填充的插槽)!(假设它在 LLC 中丢失,或者用于重写脏行。
因此,内核可能需要在整个插槽中达到 CHA,才能让它从插槽中远离自身的其他地方的 iMC 请求内存,从而远离更多的网格跳跃。

上面链接的演示文稿中的这张图片显示了各个步骤。

就操作系统而言,只有一个 NUMA 节点(即它实际上是一个 UMA)。

UMA mode 注意步骤的顺序是:紫色、蓝色、橙色、红色

注意:这张图片适用于英特尔融核架构,不适用于至强可扩展。但是,集群模式的描述是相同的,因此英特尔可能将它们重用于至强可扩展。

SNC 模式

在此模式下,物理地址空间被划分为大小相等的单独区域。在 SNC-2 中有两个区域,在 SNC-4 中有两个区域。
每个区域在逻辑上都与内核和 iMC 的子集相关联。同样,SNC-2 创建两组内核,它们最接近的 iMC,SNC-4 创建四组内核。
因此,对于地址范围 Mx,我们说我们有一个关联的组 Cx 内核和 iMC。
属于地址范围 Mx 的地址的所有 L2 未命中仅在组 Cx 的 CHA 之间交错。此外,查询的 iMC 也来自 Cx(如果有多个,则交错,就像 SNC-2 一样)。
如果 Cx 中的内核仅从 Mx 请求内存,则其请求将由关闭的 CHA 和 iMC 提供服务(在 Cx 中读取:)。

在 UMA 模式下,为了确保程序始终命中靠近请求内核的 CHA 或 iMC,我们需要进行跨步访问。这对于许多数据结构来说是不切实际的。
在 SNC-n 模式下,群集的所有内存地址都组合在一起,因此,借助公开必要 NUMA 元数据(通过 ACPI)的固件,NUMA 感知操作系统可以为同一节点中的程序分配内存。

这是 SNC 模式的图片。

SNC-4

象限端半球模式

这些是一种混合方法,它们旨在使非 NUMA 感知软件性能更好。
当存在 L2 未命中时,CHA 被指定为 UMA 模式,即具有哈希函数,该散列函数旨在交错所有可用 CHA 上的连续行。
但是,当 CHA 收到请求(并且必须从内存中提供请求)时,它会将其定向到最近的 iMC。平均而言,与 UMA 模式相比,这减少了延迟。
因此,与 SNC 模式相比,这些模式首先像 UMA(选择 CHA 时),然后像 SNC(因为它们不会将请求路由得很远)。
只有一个节点向操作系统公开。

象限和半球模式的性能不如 SNC 模式下的 NUMA 感知软件(因为选择的 CHA 可以在任何地方),但我认为它们比具有行为类似于 SNC 但具有单个节点(或没有节点)的集群模式要好操作系统。事实上,交错 CHA 有时会选择接近的 CHA,有时不会,而 SNC 中错误地址范围内的内存块总是会选择“坏”的 CHA(操作系统在这种假设模式下无济于事,因为固件告诉它机器是 UMA)。

这是最后一张照片。

Quadrant mode

评论

0赞 Peter Cordes 4/30/2023
您的图表来自有关Xeon Phi(骑士登陆)的演示文稿。我认为它们的网格在许多方面与 OP 所询问的 Xeon 可扩展(Skylake 及更高版本)处理器中的网格互连相似。所以这可能没问题,只是值得一提。(Xeon Phi 可能是他们在主流 Xeon 中对互连所做的事情的试验场。
0赞 Margaret Bloom 4/30/2023
@PeterCordes 是的,他们来自皮岛。我忘了提那个。我同意,英特尔可能首先解决了 Phi 中许多核心架构的问题,然后在主流至强中重用了(好的)解决方案。我会把它添加到答案中。
0赞 John D McCalpin 5/1/2023
对于第 4 代至强可扩展处理器 (Sapphire Rapids),不再支持旧的“All-to-All”模式。默认模式似乎是 SNC-4,每个 NUMA 节点对应于 4 芯片封装中的一个芯片。可以在 BIOS 中选择单 NUMA 节点配置。这种单节点配置使用“象限”映射 -- 连续地址几乎均匀地分配给所有 CHA,但每个地址的内存控制器始终与拥有该地址的 CHA 位于同一象限中。我认为英特尔通常称之为“扁平模式”。
0赞 Frontier_Setter 5/5/2023
我还有两个问题:1.在这三种模式的第四步中,为什么数据被发送到原始瓦片,而不是第二步中的瓦片,因为后者是根据哈希函数“拥有”这个地址的人?2. 我是否可以将象限模式视为具有“更智能”哈希函数的全对全模式,确保每个内存地址都散列到最接近其 iMC 的图块?
0赞 Frontier_Setter 5/5/2023
对于 Q1,是因为 Xeon Phi 没有 L3 吗?在 Xeon Scalable 中,由于一个芯片中的内核共享 L3 空间,数据是否会发送到请求内核以外的 L3 切片?