NUMA (Non-Uniform Memory Access)
3 秒看懂
一句話: NUMA 是多處理器伺服器的記憶體訪問架構——每個 CPU 能”快”訪問自己的本地記憶體,“慢”訪問其他 CPU 的遠端記憶體。記憶體的位置決定了訪問的速度,這就是”非均勻”的含義。
關鍵詞: 本地記憶體 / 遠端記憶體 / NUMA 節點 / 記憶體親和性
為什麼重要: AI 大型模型訓練/推論伺服器幾乎全是多路 NUMA 架構,忽視 NUMA 拓撲可導致記憶體頻寬損失 30%~50%(視負載而定),是基礎設施層最容易被忽略卻代價極高的效能陷阱。
3 分鐘產業解釋
問題的起源
早期對稱多處理器(SMP/UMA)架構中,所有 CPU 通過同一條前端匯流排訪問同一塊共享記憶體。CPU 核數增長後,匯流排成為瓶頸——所有處理器”搶”同一條通道,頻寬和延遲同時惡化。
NUMA 的解法: 不再把所有記憶體放在一起。給每個 CPU(或 CPU 組)分配一塊”本地記憶體”,CPU 之間通過高速互聯鏈路互相訪問對方的記憶體。本地訪問快、遠端訪問慢——架構由此”非均勻”。
┌─────────────────────────────────────────────────┐
│ 伺服器主機板 │
│ │
│ ┌──────────────┐ 互聯匯流排 ┌──────────────┐│
│ │ CPU 0 │◄══════════════►│ CPU 1 ││
│ │ ┌────────┐ │ (UPI/IF/QPI) │ ┌────────┐ ││
│ │ │本地記憶體 │ │ │ │本地記憶體 │ ││
│ │ │ (快) │ │ │ │ (快) │ ││
│ │ └────────┘ │ │ └────────┘ ││
│ └──────────────┘ └──────────────┘│
│ NUMA Node 0 NUMA Node 1 │
└─────────────────────────────────────────────────┘
產業中誰在用?
| 場景 | 為何需要關心 NUMA |
|---|---|
| AI 訓練伺服器 | 多路 Xeon/EPYC,GPU 通過 PCIe/CXL 掛在特定 NUMA 節點下,跨節點訪問 GPU 視訊記憶體回傳的資料會穿透遠端記憶體 |
| 資料庫(OLTP/OLAP) | In-memory DB 的 Buffer Pool 分配在哪個 NUMA 節點直接影響 QPS |
| 雲端運算/虛擬化 | Hypervisor 的 vCPU-pCPU 繫結和記憶體分佈直接影響 VM 效能 SLA |
| HPC | MPI 程序繫結 NUMA 節點是基操 |
| 高頻交易 | 納秒級敏感,任何跨節點延遲不可接受 |
15 分鐘專家深入
NUMA 的核心代價:遠端訪問的延遲與頻寬懲罰
在現代雙路伺服器中,CPU 訪問本地記憶體與跨 Socket 訪問遠端記憶體的延遲比大約在 1:1.5 至 1:2+ 範圍內(具體取決於平台代際和互聯方案,此處為定性估算,不同平台差異顯著)。頻寬方面,跨 Socket 訪問受限於互聯鏈路(如 Intel UPI 或 AMD Infinity Fabric)的可用頻寬,遠端有效頻寬通常低於本地記憶體通道頻寬之和。
延遲示意(相對值,非精確 ns,平台相關):
本地 DRAM 訪問: ████████████████████ ~1.0x (基準)
遠端 DRAM (1-hop): ████████████████████████████████ ~1.5x - 2.0x+
↑
互聯鏈路額外延遲
NUMA 拓撲的”距離”概念
Linux 核心通過 ACPI SLIT(System Locality Information Table) 獲取每個 NUMA 節點之間的”距離”。這是一個相對值,本地節點到自身的距離固定為 10,遠端節點的距離大於 10(常見的雙路系統中遠端距離約 20~30,具體值由韌體/BIOS 報告)。
# 檢視 NUMA 距離矩陣
$ numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
node 0 size: 131072 MB
node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...
node 1 size: 131072 MB
node distances:
node 0 1
0: 10 21
1: 21 10
距離值越大,延遲和頻寬劣勢越明顯。
晶片粒(Chiplet)時代的 NUMA 更復雜
這是當前最容易被誤解的地方。
傳統單 Die 多核 CPU 上,一個 Socket = 一個 NUMA 節點。但 AMD EPYC 的 Chiplet 架構 在單個 Socket 內部也存在非均勻記憶體訪問特性:
- 每個 CCD(Core Complex Die)包含若干核心和本地 L3 Cache
- 不同 CCD 訪問同一 Socket 內不同記憶體通道的延遲不同(取決於 Infinity Fabric 路由拓撲)
- 因此 BIOS 中可設定 NPS(NUMA Per Socket) 引數:
- NPS1:整個 Socket 作為一個 NUMA 節點(簡化拓撲,但隱藏了內部非均勻性)
- NPS2:Socket 分為 2 個 NUMA 節點
- NPS4:Socket 分為 4 個 NUMA 節點(最細粒度,最貼近真實拓撲)
這意味著 一個 2 路 EPYC 伺服器在 NPS4 模式下可以呈現 8 個 NUMA 節點,而非直覺中的 2 個。
Intel 的 Xeon Scalable(至強可擴充套件)系列在 Sapphire Rapids / Emerald Rapids 代際也開始採用多 Tile 設計,但 NUMA 模式設定的靈活性和粒度與 AMD 有差異,此處不做具體代際歸屬(因具體 BIOS 選項與韌體版本相關)。
記憶體分配策略
Linux 核心的 NUMA 策略(通過 set_mempolicy() 或 mbind() 系統呼叫配置):
| 策略 | 行為 |
|---|---|
| default(本地分配) | 程序在哪個 CPU 上首次觸及頁面,記憶體就分配在哪個節點(First-Touch) |
| bind | 強制分配到指定節點(集),即使該節點記憶體不足 |
| interleave | 在多個節點間輪轉分配,適合大塊共享記憶體(如資料庫共享緩衝池) |
| preferred | 優先分配到指定節點,不足時回退到其他節點 |
AI 場景中常見問題: PyTorch DataLoader 的 worker 程序在 CPU 0 上初始化張量(First-Touch 分配到 Node 0),但實際訓練計算在綁到 Node 1 的 GPU/執行緒上執行——造成所有記憶體訪問都是遠端訪問。
技術原理
NUMA 系統的硬體拓撲
┌──────────────────────────────────────────────────────────┐
│ 雙路 NUMA 伺服器 │
│ │
│ ┌─────────────────────────┐ UPI/IF ┌─────────────────────────┐
│ │ Socket 0 │◄═══════════►│ Socket 1 │
│ │ │ │ │
│ │ ┌─────┐ ┌─────┐ │ │ ┌─────┐ ┌─────┐ │
│ │ │Core0│ │Core1│ ... │ │ │CoreN│ │CoreN+1│ ... │
│ │ └──┬──┘ └──┬──┘ │ │ └──┬──┘ └──┬──┘ │
│ │ └───┬───┘ │ │ └───┬───┘ │
│ │ ┌────▼────┐ │ │ ┌────▼────┐ │
│ │ │ L3 Cache│ │ │ │ L3 Cache│ │
│ │ └────┬────┘ │ │ └────┬────┘ │
│ │ ┌────▼────┐ │ │ ┌────▼────┐ │
│ │ │記憶體控制器│◄───┐ │ │ │記憶體控制器│◄───┐ │
│ │ └─────────┘ │ │ │ └─────────┘ │ │
│ │ ┌───┴───┐ │ │ ┌───┴───┐ │
│ │ │DIMM×N │ │ │ │DIMM×N │ │
│ │ │(本地) │ │ │ │(本地) │ │
│ │ └───────┘ │ │ └───────┘ │
│ │ │ │ │
│ │ ┌──────┐ ┌────────┐ │ │ ┌──────┐ ┌────────┐ │
│ │ │ PCIe │ │PCIe/GPU│ │ │ │ PCIe │ │PCIe/GPU│ │
│ │ │Root │ │ Root │ │ │ │Root │ │ Root │ │
│ │ └──────┘ └────────┘ │ │ └──────┘ └────────┘ │
│ └─────────────────────────┘ └─────────────────────────┘
│ NUMA Node 0 NUMA Node 1 │
└──────────────────────────────────────────────────────────┘
關鍵機制:快取一致性與互聯協議
在 NUMA 多處理器系統中,各 Socket 的 L3 Cache 之間需要保持一致性。主流方案:
- Intel: 基於目錄(Directory-based)的快取一致性協議,通過 UPI(Ultra Path Interconnect) 傳輸 snoop 和資料。UPI 鏈路頻寬為平台代際相關,Sapphire Rapids 代際的 UPI 鏈路速率有具體規格但此處不編造精確數字。
- AMD: Infinity Fabric 承載快取一致性流量和記憶體訪問流量。EPYC 代際間的 Infinity Fabric 代際和速率不同,此處不列精確數字。
當 Socket 0 的核心需要讀取 Socket 1 的記憶體資料時,流程大致為:
Core0 (Socket 0) 讀取遠端地址
│
▼
本地 L1/L2 Cache 未命中
│
▼
本地 L3 Cache 未命中
│
▼
記憶體控制器判斷為遠端地址
│
▼
通過互聯鏈路 (UPI / Infinity Fabric) 傳送請求到 Socket 1
│
▼
Socket 1 的記憶體控制器從本地 DRAM 讀取資料
│
▼
資料通過互聯鏈路返回 Socket 0
│
▼
Core0 收到資料(總延遲 = 本地記憶體控制器處理延遲 + 遠端 DRAM 訪問延遲 + 2× 互聯延遲)
延遲的額外來源: 互聯鏈路的序列化/反序列化(SerDes)、協議層開銷、擁塞競爭。
NUMA 對 AI 基礎設施的具體影響
1. 記憶體頻寬不對稱
現代伺服器 CPU 通常有 8~12 個記憶體通道(平台代際相關)。當訓練程序跨越兩個 NUMA 節點時,可用記憶體頻寬不等於兩個節點的通道頻寬之和——受限於互聯鏈路頻寬,且存在額外的協議開銷。
2. PCIe 裝置親和性
GPU 通過 PCIe Root Complex 掛在特定 Socket 下。當 GPU 通過 GPUDirect RDMA 與網路/NVMe 交換資料,或者 CPU 端需要訪問 GPU 記憶體時,如果 CPU 執行緒不在與 GPU 同屬一個 NUMA 節點的 Socket 上,每次 PCIe 事務都需穿越互聯鏈路:
非最優配置:
GPU 0 (掛在 Socket 0) ◄──PCIe── Socket 0 ──UPI──► Socket 1 ──► 訓練執行緒
↑ 額外一跳
最優配置:
GPU 0 (掛在 Socket 0) ◄──PCIe── Socket 0 ──► 訓練執行緒(繫結在同一 Socket)
3. Megatron-LM 等架構的考慮
分散式訓練架構中,資料並行的梯度 AllReduce 通訊與模型並行的張量切分通訊,都會涉及 CPU 端的記憶體分配和緩衝區。NUMA 不感知的緩衝區分配可能導致通訊延遲抖動。
技術演進史
| 時期 | 事件 | NUMA 意義 |
|---|---|---|
| ~1990s 早期 | SGI Origin 2000 等系統引入 ccNUMA(Cache-Coherent NUMA) | 首次在商業系統中實現快取一致的非均勻記憶體訪問 |
| 2000s | AMD Opteron(K8)通過 HyperTransport 實現原生 NUMA;Intel Xeon 仍採用共享前端匯流排的 UMA 架構 | NUMA 率先由 AMD 引入 x86 伺服器市場 |
| 2008~2012 | Intel Nehalem-EP (Gainestown) 首次在其至強平台上整合記憶體控制器與 QPI 互聯,實現雙路 NUMA;後續 Nehalem-EX / Westmere-EX 擴充套件至四路及以上多路 NUMA | Intel 在 CPU 內整合記憶體控制器和點對點互聯,x86 原生多路 NUMA 普及 |
| 2017~ | AMD EPYC(Zen 架構)以 Chiplet + Infinity Fabric 重塑 NUMA 拓撲 | 單 Socket 內部出現多級 NUMA 特性(NPS 選項) |
| 2019~2023 | AMD EPYC Milan/Genoa,Intel Sapphire Rapids | 單 Socket 核數進一步增加(64~128 核),NUMA 拓撲管理對效能的影響更顯著 |
| 2024~ | CXL(Compute Express Link)記憶體池化開始落地 | CXL 引入新的記憶體層級——CXL 記憶體的延遲通常高於遠端 NUMA 延遲,NUMA 模型進一步複雜化 |
技術路線對比
UMA vs NUMA vs CXL 擴充套件記憶體
| 維度 | UMA(共享匯流排/交叉開關) | NUMA(分散式記憶體) | CXL 記憶體擴充套件(新興) |
|---|---|---|---|
| 記憶體訪問延遲 | 均勻,但隨核數增長匯流排爭用加劇 | 本地快、遠端慢,比值約 1:1.5~2+(平台相關) | 通常高於遠端 NUMA 延遲(估算,平台/拓撲相關) |
| 可擴充套件性 | 差(匯流排頻寬瓶頸) | 好(通過互聯鏈路橫向擴充套件) | 極好(記憶體池化,容量獨立於 CPU) |
| 程式設計模型複雜度 | 低 | 中(需 NUMA 感知的記憶體分配) | 高(新的記憶體層級,需應用適配) |
| 適用場景 | 小規模對稱多處理 | 大規模多路伺服器、HPC、AI 訓練 | 記憶體密集型應用、記憶體池化、雲端 |
| 主流代表 | 早期 Intel Xeon(FSB 時代) | 當前所有多路 x86 伺服器 | CXL 1.1/2.0 裝置(逐步商用) |
Intel vs AMD 的 NUMA 實現差異
| 維度 | Intel Xeon Scalable | AMD EPYC |
|---|---|---|
| 互聯技術 | UPI(Ultra Path Interconnect) | Infinity Fabric |
| Socket 內 NUMA 粒度 | 通常 Socket = 1 NUMA 節點(Tile 架構後可能有變化) | NPS1/2/4 可配置,粒度更靈活 |
| Chiplet 架構影響 | Sapphire Rapids 起採用 Multi-Tile,但 NUMA 模式設定較少被討論 | Chiplet 原生架構,單 Socket 內部就有 NUMA 特性 |
| 2 路系統典型 NUMA 節點數 | 2(預設) | 2~8(取決於 NPS 設定) |
| 記憶體通道數 | 8(SPR/EMR 代際) | 12(Genoa 代際)[來源:AMD 官方規格] |
上下游
上游(NUMA 依賴的技術和元件)
NUMA 硬體架構
├── CPU 微架構
│ ├── 記憶體控制器(整合在 CPU 內)
│ ├── L3 Cache 及一致性協議
│ └── 晶片粒間互聯(Chiplet IF / Tile 間互聯)
├── 互聯匯流排
│ ├── Intel UPI / 早期 QPI
│ ├── AMD Infinity Fabric
│ └── 未來: UALink / CXL 等
├── 記憶體子系統
│ ├── DDR4/DDR5 DIMM
│ ├── HBM(特定加速器,與 CPU NUMA 概念平行但相關)
│ └── CXL 記憶體(新興)
├── 韌體/BIOS
│ ├── ACPI SLIT 表(報告節點間距離)
│ ├── ACPI SRAT 表(報告處理器與記憶體的歸屬關係)
│ └── NPS/NUMA 模式設定(BIOS 選項)
└── 作業系統
├── NUMA 排程器(Linux: NUMA balancing)
├── 記憶體分配策略(set_mempolicy / mbind)
└── 工具鏈(numactl / numastat / libnuma)
下游(NUMA 影響的應用層)
受 NUMA 影響的應用領域
├── AI/ML 訓練與推論
│ ├── 分散式訓練架構(PyTorch DDP / DeepSpeed / Megatron-LM)
│ ├── GPU 通訊拓撲(PCIe 親和性、NVLink 域)
│ └── 推論引擎記憶體分配(vLLM / TensorRT-LLM 的 KV Cache)
├── 資料庫
│ ├── 記憶體資料庫(Redis Cluster / SAP HANA / VoltDB)
│ ├── 傳統 OLTP(MySQL / PostgreSQL 大規模部署)
│ └── 分析型資料庫(ClickHouse / DuckDB)
├── 虛擬化與雲端
│ ├── Hypervisor NUMA 感知排程(KVM/ESXi)
│ ├── 容器 NUMA 繫結(kubelet --topology-manager-policy)
│ └── SR-IOV / VFIO 裝置親和性
├── HPC / 超算
│ ├── MPI 程序繫結
│ └── OpenMP 執行緒繫結
└── 網路與儲存
├── DPDK 收發包(NUMA 繫結影響 PPS)
└── NVMe 儲存(PCIe NUMA 親和性影響 IOPS/延遲)
關鍵指標
| 指標 | 含義 | 量級參考(定性,平台相關) |
|---|---|---|
| NUMA 距離 | SLIT 表中的相對值 | 本地=10,遠端通常 20~30(雙路系統) |
| 本地記憶體延遲 | CPU 訪問本地 DRAM 的延遲 | 約 80~120ns(DDR5 平台,估算,平台/頻率相關) |
| 遠端記憶體延遲 | CPU 訪問遠端 DRAM 的延遲 | 本地延遲的 |
| 互聯鏈路頻寬 | Socket 間傳輸資料的頻寬上限 | 取決於互聯代際和鏈路數,定性描述為”高於單通道但低於全部本地通道之和” |
| NUMA 未命中率 | 分配在遠端節點的記憶體訪問佔比 | 應趨近於 0%,越低越好(可通過 numastat 觀察) |
| 跨節點記憶體頻寬利用率 | 互聯鏈路的實際使用率 | 過高意味著跨節點訪問過多,是最佳化訊號 |
供需與市場資料
NUMA 為什麼在 AI 時代更關鍵
-
單伺服器內 CPU 核數激增: 128 核的 EPYC 單 Socket 已普及(Zen 4c 甚至更多),核數越多,NUMA 感知排程的影響越大。
-
GPU 伺服器的 CPU-GPU 拓撲繫結: NVIDIA DGX 系列、HGX 主機板等 AI 訓練平台,GPU 通過 PCIe/NVLink 掛在特定 CPU Socket 下。資料中心運維需要精確配置 CPU 執行緒與 GPU 的 NUMA 親和性。
-
記憶體容量需求爆發: 大型模型推論的 KV Cache、Embedding Table 等需要 TB 級記憶體,往往需要跨節點分配。NUMA 感知的記憶體放置直接影響服務延遲。
-
CXL 引入第三層記憶體: CXL Type 3 記憶體裝置將創造介於本地 DRAM 和遠端 DRAM 之間的新延遲/頻寬層級,應用需要更精細的 NUMA 模型。
市場驅動方
| 角色 | 代表 | NUMA 關注點 |
|---|---|---|
| CPU 廠商 | AMD、Intel | NUMA 拓撲設計直接影響產品競爭力(核心間延遲、互聯頻寬) |
| 雲端廠商 | AWS / Azure / GCP / 阿里雲端 | NUMA 感知的虛擬機器排程直接影響租戶效能和資源利用率 |
| AI 基礎設施商 | NVIDIA、超微、聯想、浪潮 | 伺服器硬體設計中 GPU-CPU NUMA 拓撲是關鍵設計決策 |
| 作業系統/排程器 | Linux Kernel 社群、Kubernetes SIG-Node | NUMA-aware scheduling 是持續最佳化方向 |
代表公司與資本對映
| 層級 | 公司/組織 | 與 NUMA 的關係 |
|---|---|---|
| CPU 架構設計 | AMD(EPYC)、Intel(Xeon) | NUMA 拓撲的創造者和定義者 |
| 互聯技術 | AMD(Infinity Fabric)、Intel(UPI)、CXL Consortium | Socket 間互聯的質量決定遠端訪問代價 |
| 伺服器 ODM/OEM | 超微 (SMCI)、Dell、HPE、浪潮、聯想 | 硬體版面配置(DIMM 插槽、PCIe 路由)影響 NUMA 拓撲 |
| 雲端/AI 基礎設施 | AWS(Nitro)、Azure、NVIDIA(DGX/HGX) | 暴露或隱藏 NUMA 拓撲給使用者層 |
| OS/虛擬化 | Linux Kernel 社群、Red Hat、VMware (Broadcom) | NUMA 排程和策略的實現者 |
| 應用架構 | PyTorch (Meta)、NVIDIA (NeMo/Megatron) | NUMA-aware 資料載入和記憶體分配 |
| CXL 生態 | Samsung、SK Hynix、Microchip、XConn | CXL 記憶體擴充套件帶來新的 NUMA 層級 |
注意: NUMA 不是一個獨立的商業產品或技術賽道,而是所有多處理器計算系統的基礎設施特性。它對上游(CPU/互聯架構)有設計約束,對下游(所有多執行緒/多程序應用)有效能影響。
投資邏輯
核心觀點
NUMA 本身不可投資,但它是理解以下投資主線的底層基礎設施知識:
1. AI 算力效率最佳化 → 間接影響伺服器 ASP 和雲端獲利率
忽視 NUMA 的 AI 叢集實際算力利用率顯著低於理論峰值。雲端廠商和 AI 公司的叢集最佳化(包括 NUMA 感知排程)可以將有效算力提升可觀幅度(具體幅度因負載和基線配置而異,此處不編造精確百分比)。這意味著:
- 叢集最佳化軟體/平台 有真實價值
- 硬體拓撲設計(GPU 與 CPU 的 NUMA 繫結方案)是 AI 伺服器 ODM 的差異化能力
2. CXL 記憶體池化 → 新的記憶體層級重構 NUMA 模型
CXL 的落地將改變傳統”本地/遠端”二元 NUMA 模型,引入多層級記憶體(本地 DRAM → CXL 記憶體 → 遠端 DRAM)。這為:
- CXL 控制器/交換晶片廠商(如 Microchip、XConn)創造增量市場
- 記憶體廠商(三星、SK 海力士、美光)創造 CXL 記憶體模組的新品類
- 作業系統和應用架構需要適配新的記憶體層級
3. 伺服器核數持續增長 → NUMA 複雜度只增不減
隨著 Chiplet 架構成為主流、單 Socket 核數持續增加,NUMA 拓撲管理的複雜度上升。這利好:
- 具有 NUMA 感知能力的排程/編排平台
- 能夠提供硬體拓撲可見性和最佳化建議的可觀測性工具
常見誤讀糾偏
誤讀 1:「NUMA 隻影響多路(Multi-Socket)伺服器,單路伺服器不用關心」
糾偏: 這在傳統單 Die CPU 上基本成立,但在 Chiplet 架構下已不正確。AMD EPYC 的單 Socket 內部就有多個 CCD,不同 CCD 訪問不同記憶體通道的延遲存在差異。通過 NPS 設定,單 Socket 可以呈現為多個 NUMA 節點。即使是單路伺服器,如果 BIOS 設定為 NPS4 且應用未做 NUMA 繫結,同樣可能遭受跨節點訪問的效能損失。對於 AI 訓練場景,即使是單路 8-GPU 伺服器(如部分推論平台),GPU 與 CPU 核心的 NUMA 拓撲也需要關注。
誤讀 2:「記憶體插滿就等於記憶體頻寬最大化,NUMA 不重要」
糾偏: 記憶體頻寬的最大化不僅取決於 DIMM 數量,還取決於 DIMM 在各節點間的分佈均勻性 以及 訪問模式是否落在本地節點。如果 8 條 DIMM 全部插在一個 Socket 側(物理上不太可能但概念上有此誤解),或者訓練程序的執行緒分佈在 Node 0 但記憶體分配在 Node 1,即使插滿 DIMM 也遠達不到理論頻寬。正確的做法是:每個 Socket 的每個通道都插滿 DIMM + 確保執行緒和記憶體分配在同一 NUMA 節點內。
誤讀 3:「Linux 的自動 NUMA Balancing 會自動解決所有問題」
糾偏: Linux 核心的 Automatic NUMA Balancing 通過週期性地將頁面遷移到訪問它的 CPU 所在節點來改善 NUMA 區域性性。但它有以下侷限:
- 遷移有開銷: 頁面遷移本身需要消耗記憶體頻寬和 CPU 週期
- 遷移有延遲: 需要多輪掃描和統計才觸發遷移,不適合短生命週期的工作負載
- 不可預測: 對延遲敏感的工作負載(如線上推論服務),自動遷移帶來的效能抖動可能比遠端訪問本身更糟糕
- 最佳實踐: 對於已知拓撲和負載模式,顯式使用
numactl、taskset、cpuset進行繫結,比依賴自動 NUMA Balancing 更可靠
誤讀 4:「NUMA 距離值越大就一定越慢」
糾偏: SLIT 表中的 NUMA 距離是韌體報告的相對值,不同平台/BIOS 版本報告的絕對值可能不同。距離值在 同一平台內 有比較意義(Node 0→1 的距離比 Node 0→2 小,則前者延遲通常更低),但 跨平台比較無意義——不同廠商的 SLIT 報告規範不完全統一。此外,NUMA 距離反映的是 平均延遲,實際延遲還受互聯鏈路擁塞程度、併發訪問模式等動態因素影響。
學習路徑
入門(0~2 小時)
- Linux
numactl --hardware實操: 在任何多路 Linux 伺服器上執行,觀察 NUMA 節點數量、CPU 核心分配和距離矩陣 numastat觀察: 檢視各節點的記憶體分配和命中/未命中統計- 閱讀 Red Hat “NUMA Awareness” 文件(搜尋 Red Hat NUMA tuning guide)
進階(1~3 天)
numactl --membind/--cpunodebind實驗: 分別將程式繫結到本地和遠端節點,用mbw或Intel MLC(Memory Latency Checker)測量頻寬和延遲差異