Intel CPU 中的“Sub-NUMA 集群”和“半球和象限模式”有什么区别?

Fro*_*ter 5 x86 caching intel cpu-architecture numa

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

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

在Intel 64和IA-re架构优化参考手册中,第10章仅描述了“Sub-NUMA Clustering”,没有提及“半球和象限模式”。

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

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

Mar*_*oom 5

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

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


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

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

UMA集群模式

也称为 COD(片上簇)或 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模式 注意步骤的顺序是:紫色、蓝色、橙色、红色

注意:此图片适用于 Intel Phi 架构,不适用于 Xeon Scalable。然而,集群模式的描述是相同的,因此英特尔可能将它们重新用于至强可扩展。

SNC模式

在此模式下,物理地址空间被划分为单独的、大小相等的区域。在 SNC-2 中有两个区域,在 SNC-4 中有四个区域。
每个区域在逻辑上与内核和 iMC 的子集相关联。同样,SNC-2 创建两组核心和最接近的 iMC,SNC-4 创建四个核心。
因此,对于地址范围Mx,我们说我们有一个关联的核心组Cx和 iMC。
对属于地址范围Mx的地址的所有L2未命中仅在组Cx的CHA上交织。此外,查询的 iMC 也来自Cx(如果有多个 iMC,则交错,就像 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)。

这是最后一张照片。

象限模式