提问人:Frontier_Setter 提问时间:4/28/2023 最后编辑:Peter CordesFrontier_Setter 更新时间:4/30/2023 访问量:1257
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?
问:
在英特尔发布的技术概述中,“Sub-NUMA Clustering”和“Hemisphere and Quadrant Modes”分别进行了描述。但它们之间的主要区别尚不清楚。
在这个答案中,它说“在象限或半球模式下,相同的 LLC 映射作为 SNC 完成,但它被公开为一个 numa 域和一个物理内存映射。
在英特尔 64 位和 IA-re 架构优化参考手册中,第 10 章“半球和象限模式”中仅介绍了“Sub-NUMA 集群”。
在本文档中,“半球和象限模式”被归类为“基于 UMA 的聚类”,并与 SNC 冲突。
我可以这样理解吗:对于CPU端和LLC行为端,这两种模式完全相同,只是暴露给操作系统的NUMA节点数量不同。
答:
您可以将象限和半球模式简化为非 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)。
注意:这张图片适用于英特尔融核架构,不适用于至强可扩展。但是,集群模式的描述是相同的,因此英特尔可能将它们重用于至强可扩展。
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 模式的图片。
象限端半球模式
这些是一种混合方法,它们旨在使非 NUMA 感知软件性能更好。
当存在 L2 未命中时,CHA 被指定为 UMA 模式,即具有哈希函数,该散列函数旨在交错所有可用 CHA 上的连续行。
但是,当 CHA 收到请求(并且必须从内存中提供请求)时,它会将其定向到最近的 iMC。平均而言,与 UMA 模式相比,这减少了延迟。
因此,与 SNC 模式相比,这些模式首先像 UMA(选择 CHA 时),然后像 SNC(因为它们不会将请求路由得很远)。
只有一个节点向操作系统公开。
象限和半球模式的性能不如 SNC 模式下的 NUMA 感知软件(因为选择的 CHA 可以在任何地方),但我认为它们比具有行为类似于 SNC 但具有单个节点(或没有节点)的集群模式要好操作系统。事实上,交错 CHA 有时会选择接近的 CHA,有时不会,而 SNC 中错误地址范围内的内存块总是会选择“坏”的 CHA(操作系统在这种假设模式下无济于事,因为固件告诉它机器是 UMA)。
这是最后一张照片。
评论