引言
在现代数据中心,服务器的性能不再仅仅取决于 CPU 的核心数量与频率,内存子系统的架构与配置同样扮演着至关重要的角色。从我们熟悉的内存条(DIMM),到其上焊接的黑色颗粒(DRAM Chip),再到芯片内部由数十亿晶体管构成的存储矩阵,这是一个精密而复杂的多层级系统。理解这个系统,不仅需要从上层(如操作系统和BIOS)视角看清 UMA 、NUMA 、SNC 等系统级内存模式的差异,更需要从底层硬件视角,探究 DRAM 本身的工作原理,例如 Bank 、Rank 、Channel 这些概念如何最终影响性能。
本文将基于您的测试总结,并融合业界公开的技术文档与实践,构建一个从"底层物理"到"顶层架构"的完整知识框架。我们将首先深入 DRAM 颗粒的内部,理解其基本工作原理,然后将这些基础知识与 UMA、NUMA、SNC 及 Hemisphere/Quadrant 等系统级内存访问模式相结合,并以 Intel Emerald Rapids (EMR) 和 Granite Rapids (GNR) 的真实 CPU 架构为例,为系统架构师和运维工程师提供一份真正贯穿软硬件、清晰可落地的调优指南。
1. 内存物理世界:从内存条到存储单元
在我们探讨复杂的系统架构之前,必须先建立一个坚实的物理基础。我们通常所说的"内存",其物理实体和组织形式远比"一个大仓库"要复杂得多 [6]。
1.1 物理层级:Channel, DIMM, Rank, Chip, Bank
- 内存条 (DIMM):全称双列直插内存模块,是我们能直接看到的硬件实体。它是一块电路板,承载着多颗 DRAM 芯片,并通过金手指与主板上的内存插槽连接。
- 通道 (Channel):内存控制器与一组 DIMM 之间的数据通路。CPU 通过内存控制器同时指挥一个通道内的所有内存协同工作。现代服务器 CPU 支持多通道技术(如双通道、四通道、八通道),这相当于将数据传输的马路从单车道扩展为多车道,直接成倍提升内存总带宽 [6]。
- 芯片 (Chip/Device):内存条上焊接着的黑色方形颗粒,是 DRAM 的基本单元。每个芯片都有自己的位宽(如 x4, x8, x16),代表它一次能提供多少比特的数据。
- 列组 (Rank):为了满足 CPU 的数据位宽(通常是64位),需要将多颗芯片组合起来并行工作。一个 Rank 内的所有芯片共享同一套命令/地址总线,并在同一时钟周期内一起动作,共同提供 64 位的数据。例如,使用 8 颗 x8 芯片或 16 颗 x4 芯片可以组成一个 64 位的 Rank [7]。一个 DIMM 上可以有一个或多个 Rank。
- 逻辑 Bank (L-Bank) :在单颗 DRAM 芯片内部,存储矩阵又被划分为多个独立的"小仓库",即逻辑 Bank。其核心目的是实现操作的并行化。当内存控制器在访问 L-Bank 0 时,可以同时对 L-Bank 1 进行预充电(Precharge),并对 L-Bank 2 进行行激活(Activate),从而隐藏操作延迟,提高效率 [6]。
1.2 核心工作原理:Cell, Burst 与 Prefetch
- 存储单元 (Cell) :DRAM 存储数据的最小单位,其结构是一个晶体管加一个电容(1T1C)。电容中有无电荷代表逻辑的"1"或"0"。这个结构决定了 DRAM 的两个基本特性:易失性 (断电即丢失数据)和需要刷新(电容会漏电,必须周期性地重写数据以维持状态)[7]。
- 突发传输 (Burst):CPU 从内存中读取数据并非一个比特一个比特地进行,而是一次性读取一个"数据块",这个过程就是突发传输。Burst Length (BL) 定义了在一次读/写命令后,连续传输多少个数据周期。例如,DDR4 的 BL 通常是 8。
- 预取 (Prefetch) :为了匹配 CPU 与内存核心之间日益增长的速度差,DRAM 引入了预取技术。它指的是在一次内存访问中,DRAM 内部一次性从存储阵列中读取并准备好 Prefetch Size × 内部总线位宽 的数据量。例如,DDR4 的 Prefetch 是 8n,意味着它一次内部操作会读取 8 个数据单元。这些数据被锁存在 I/O 缓冲中,然后通过 Burst 方式高速传输出去。一个常见的误区是将 Prefetch 和 Burst Length 混淆,Prefetch 是 DRAM 内部一次操作的数据量,而 Burst 是对外连续传输的周期数 [6]。
2. UMA (Uniform Memory Access):简化的一体化模型
UMA,即统一内存访问,在这一模型中,所有物理内存被视为一个单一的、连续的地址空间,理论上任何一个 CPU 核心访问任意内存地址的延迟都是相同的。在现代多路服务器上,通过在 BIOS 中明确设置 NUMA=off 可以强制系统工作在 UMA 模式。此时,两个 CPU 插槽的内存控制器(IMC)会进行地址交织(Interleaving),操作系统层面仅看到一个庞大的内存池 [1]。
核心挑战 在于 UPI 总线的带宽是有限的。当大量核心并发进行跨槽内存访问时,UPI 链路会迅速饱和,成为整个系统的性能瓶颈。您的测试数据雄辩地证明了这一点:UMA 模式下,全局内存带宽相比 NUMA 模式下降了 26% ,这正是 UPI 饱和的直接后果。对于现代多路服务器,关闭 NUMA 采用 UMA 模式通常是一种性能陷阱 [2]。
3. NUMA (Non-Uniform Memory Access):性能优化的基石
NUMA 架构承认并利用了"内存物理位置不同,访问成本亦不同"这一物理事实,是现代多路服务器的标准配置。在 NUMA 模式下,每个 CPU 插槽及其直接连接的内存条共同构成一个 NUMA 节点(Node)。一个双路服务器就拥有两个 NUMA 节点,操作系统对此完全可见 [1]。
- 本地访问(Local Access):核心访问本节点内存。请求仅通过本地 IMC 完成,数据路径最短,延迟最低,带宽最高。
- 远程访问(Remote Access):核心访问另一节点的内存。请求必须经由本地的 CHA(Caching and Home Agent)→ UPI 链路 → 远程 CHA → 远程 IMC → 远程 DRAM,再循原路返回数据。
您的测试数据清晰地量化了这种差异:跨节点延迟(450 ns)是本地延迟(130 ns)的 3.5 倍 ,而跨节点带宽(250 GB/s)仅为本地带宽(550 GB/s)的 45% 。这巨大的性能鸿沟正是 NUMA 调优的核心依据。保持 NUMA 开启是发挥多路服务器内存性能的首要原则。
4. Die 拓扑与集群模式实战解析 (SNC, Hemisphere, Quadrant)
SNC(Sub-NUMA Clustering)、Hemisphere(半球模式)和 Quadrant(象限模式)是在 NUMA 基础上的进一步细分。它们的核心思想是在单个 CPU 插槽内部,根据物理布局将核心、LLC 和 IMC 划分为更小的集群,以追求更低的"超本地"内存访问延迟。这些模式的可用性与 CPU 的物理 Die 拓扑紧密相关。
4.1 核心概念:SNC vs. UMA-Based Clustering (Hemisphere/Quadrant)
- SNC (Sub-NUMA Clustering) :这是一种显式 的集群模式。启用 SNC2 或 SNC4 后,CPU 内部的集群会作为独立的 NUMA 节点暴露给操作系统。例如,一台启用 SNC2 的双路服务器,OS 会看到 4 个 NUMA 节点。这种模式性能潜力最高,但强依赖 于应用通过
numactl进行精确的绑核和内存绑定,否则性能可能不升反降。 - Hemisphere / Quadrant (UMA-Based Clustering) :这是一种隐式 的、对软件透明的集群模式。启用后,OS 依然只看到每个插槽是一个 NUMA 节点(UMA 的表象),但其内部的内存访问机制却借鉴了 SNC 的思想(SNC 的内核)。其访问流程分为两步:
- CHA 选择 (类 UMA) :L2 缓存未命中时,请求通过哈希函数被分发到插槽内所有 CHA 之一。
- IMC 路由 (类 SNC) :被选中的 CHA 会智能地将请求路由到物理距离其最近的 IMC,而非随机访问 [4] [5]。
这种模式是为非 NUMA 感知的遗留应用设计的"即插即用"优化,无需修改代码即可获得优于纯 UMA 的性能。
4.2 架构实例 1:Intel EMR MCC (Emerald Rapids, 单体 Die)
5th Gen Xeon 中的 MCC (Medium Core Count) SKU,如 Xeon Gold 6542Y,采用单颗整体式 Die 设计,最高 32 核,内部集成 4 个 IMC(对应 8 个 DDR5-5600 通道)[8] [10]。由于所有资源都在一颗 Die 上,它的集群模式支持最为灵活。
- Quadrant / SNC4:这是 MCC Die 上最细粒度的分区。Die 被划分为 4 个集群,每个集群分配约 8 个核心、1/4 的 LLC 和 1 个 IMC(2 个内存通道)。启用 SNC4 后,OS 会看到 4 个 NUMA 节点;启用 Quadrant 模式,OS 则只看到 1 个 NUMA 节点。
- Hemisphere / SNC2:Die 被划分为 2 个集群,每个集群分配约 16 个核心、1/2 的 LLC 和 2 个 IMC(4 个内存通道)。启用 SNC2 后,OS 看到 2 个 NUMA 节点;启用 Hemisphere 模式,OS 只看到 1 个 NUMA 节点。
4.3 架构实例 2:Intel EMR XCC (Emerald Rapids, 双 Tile)
5th Gen Xeon 中的 XCC (Extreme Core Count) SKU,如 Xeon Platinum 8592+,采用双 Tile 封装,通过 EMIB 桥连接。每个 Tile 最多 32 核,拥有自己的 2 个 IMC(4 个内存通道)和 160MB LLC。整个 CPU 共 64 核、4 个 IMC(8 通道)、320MB LLC [8] [10]。
由于物理上只有两个对等的 Tile,EMR XCC 不再支持 4 分区的 Quadrant 和 SNC4 模式,这是一个从 4th Gen SPR XCC(4-Tile 设计)到 5th Gen EMR XCC(2-Tile 设计)的重要架构变化 [10]。
- Hemisphere / SNC2:这是 EMR XCC 支持的主要集群模式。每个 Tile 构成一个集群。在 Hemisphere 模式下,OS 看到 1 个 NUMA 节点;在 SNC2 模式下,每个 Tile 成为一个独立的 NUMA 节点,OS 看到 2 个 NUMA 节点(双路系统共 4 个)。
4.4 架构实例 3:Intel GNR XCC (Granite Rapids, 双计算 Die)
Xeon 6 P-core (Granite Rapids) 采用了更彻底的 Chiplet 设计,将 CPU 分为计算 Die (Compute Die, Intel 3 工艺) 和 IO Die (Intel 7 工艺)。GNR XCC SKU 由 2 个计算 Die 和 2 个 IO Die 构成 [9] [11]。
每个计算 Die 拥有最多约 60 个核心和 4 个 IMC(对应 4 个 DDR5-6400 通道)。整个 GNR XCC CPU 拥有最多约 120 核和 8 个 IMC(8 通道)[11] [12]。与 EMR XCC 类似,由于物理上是两个对等的计算 Die,GNR XCC 同样只支持 Hemisphere 和 SNC2 模式,不支持 Quadrant 和 SNC4。
- Hemisphere / SNC2:每个计算 Die 构成一个集群。在 Hemisphere 模式下,OS 看到 1 个 NUMA 节点;在 SNC2 模式下,每个计算 Die 成为一个独立的 NUMA 节点,OS 看到 2 个 NUMA 节点(双路系统共 4 个)。
架构演进启示:从 SPR 的 4-Tile 到 EMR/GNR 的 2-Tile/2-Die 设计,虽然简化了封装,但也限制了集群模式的最高分区数。这表明 Intel 在追求更高核心密度的同时,也在物理拓扑层面进行了取舍,将最细粒度的分区能力(SNC4/Quadrant)保留给了单体 Die 的 MCC SKU。
5. 综合对比与最终调优建议
下表对不同架构下的内存模式进行了总结:
| 特性 | UMA (NUMA=off) | NUMA (SNC=off) | SNC (SNC=on) | Hemisphere/Quadrant |
|---|---|---|---|---|
| OS 可见节点 (单插槽) | 1 | 1 | 2 (SNC2) / 4 (SNC4) | 1 |
| CHA 选择 | 全局交织 | 本地优先 | 集群内交织 | 全局交织 |
| IMC 路由 | 全局交织 | 本地优先 | 集群内优先 | 本地化路由 |
| 最适用场景 | 遗留单路应用 | 通用多路服务器 | 内存访问高度局部化 (HPC) | 非 NUMA 感知的应用 |
| 核心权衡 | 简单但性能差 | 需软件配合 | 极致本地延迟 vs 全局带宽 | 透明优化 vs 性能上限 |
基于以上分析,我们更新并完善最终的调优建议:
| CPU 架构 | 应用类型 | 推荐 BIOS 设置 | 额外操作 | 核心理由 |
|---|---|---|---|---|
| 通用 | 大型数据库 (OLTP/OLAP) | NUMA=on, SNC=disable | 绑定实例到节点 | 随机访问模式下,稳定的全局带宽比极致的局部延迟更重要。 |
| 通用 | 虚拟化 / 容器云 | NUMA=on, SNC=disable | 使用 NUMA-aware 调度器 | 为上层租户提供稳定、可预测的全局内存性能基线。 |
| 通用 | AI 训练 (单机多卡) | NUMA=on, SNC=disable | 确保 GPU 与 NUMA 节点亲和 | GPU 与 CPU 间的数据传输频繁且跨域,SNC 的分区反而可能增加开销。 |
| EMR MCC | 遗留应用 / 非 NUMA 感知 | Quadrant | 无需特殊操作 | 在单体 Die 上利用 4 分区硬件优势,对软件透明地降低平均延迟。 |
| EMR/GNR XCC | 遗留应用 / 非 NUMA 感知 | Hemisphere | 无需特殊操作 | XCC 架构下对软件透明的最佳选择,利用 2-Tile/Die 物理分区。 |
| EMR MCC | HPC (需极致延迟) | NUMA=on, SNC4 | 每 NUMA 域严格绑定进程 | 单体 Die 支持 4 分区,可实现最精细的绑核,最大化局部性收益。 |
| EMR/GNR XCC | HPC (需极致延迟) | NUMA=on, SNC2 | 每 NUMA 域严格绑定进程 | 2-Tile/Die 架构下最细粒度的 NUMA 划分,每个 Tile/Die 一个节点。 |
最终原则:任何 BIOS 级别的性能调优都必须服务于上层的应用负载。在修改配置前,请务必深刻理解目标应用的内存访问模式,并结合严谨的基准测试(如 Stream, MLC, Sysbench)进行量化验证。没有放之四海而皆准的"最佳配置",只有最适合特定工作负载的解决方案。
参考文献
- 酷毙的我啊. (2024). Linux的NUMA机制. CSDN.
- 酷毙的我啊. (2024). 华为服务器BIOS性能调优实战指南. CSDN.
- Intel Corporation. (2022). Technical Overview Of The 4th Gen Intel® Xeon® Scalable processor family. Intel Developer Zone.
- Intel Corporation. (2022). Intel® Xeon® Scalable processor Max Series. Intel Developer Zone.
- Bloom, M. (2023). What's the difference between "Sub-NUMA Clustering" and "Hemisphere and Quadrant Modes" in Intel CPU? Stack Overflow.
- dapp9builder. (2024). 从"内存条"到"内存颗粒":你真的懂Dram吗?. CSDN.
- OurPlay. (2024). DRAM内存架构全解析:从Cell到Channel的硬件工程师指南. CSDN.
- Paul Alcorn. (2023). Intel 'Emerald Rapids' 5th-Gen Xeon Platinum 8592+ Review. Tom's Hardware.
- Timothy Prickett Morgan. (2024). Intel Shoots "Granite Rapids" Xeon 6 Into The Datacenter. The Next Platform.
- Brad Bourque. (2024). Intel 5th Gen Xeon Processors Debut: Emerald Rapids Benchmarks. HotHardware.
- Patrick Kennedy. (2023). 5th Gen Intel Xeon Processors Emerald Rapids Resets Servers by Intel. ServeTheHome.
- Chips and Cheese. (2025). A Look into Intel Xeon 6's Memory Subsystem. Chips and Cheese.