CXL —— 内存解耦的关键拼图

DDR 物理上必须挂在 CPU 旁边,HBM 必须焊在芯片同一块硅中介上——这两条路都没法解决”内存能不能像存储一样池化、共享、按需分配“。CXL 是这个问题的答案。

CXL 的起点:PCIe 上的”内存级”协议

CXL = Compute Express Link,由 Intel 在 2019 年发起,2020 年 Gen-Z、CCIX、OpenCAPI 几家组织全部并入 CXL 联盟——业界统一到一条路。

CXL 物理层直接复用 PCIe

1
2
3
PCIe 5.0  →  CXL 1.x / 2.0
PCIe 6.0 → CXL 3.0
PCIe 7.0 → CXL 3.x(开始铺开)

但 CXL 不是 PCIe 的简单映射——它在 PCIe 之上定义了三个协议

graph TB
  subgraph CXL_proto["CXL 三种协议"]
    CIO[CXL.io
类 PCIe,发现/枚举/中断] CCC[CXL.cache
设备缓存 CPU 内存的一致性] CMEM[CXL.mem
CPU 访问设备的内存] end
协议 谁访问谁 谁需要这个
CXL.io 标准 PCIe 设备访问 几乎所有 CXL 设备
CXL.cache 设备 → CPU 内存(带缓存一致性) 加速器(GPU、智能网卡)
CXL.mem CPU → 设备的内存 内存扩展卡

CXL.mem 是关键——它让 CPU 可以像访问本地 DDR 一样访问 PCIe 上的内存。

CXL 的三类设备

CXL 1.0 把设备分成三类:

graph LR
  T1[Type 1
无内存的加速器
支持 .io + .cache] --- A1[智能网卡
SmartNIC] T2[Type 2
有内存的加速器
三协议全用] --- A2[GPU
FPGA 加速器] T3[Type 3
纯内存设备
支持 .io + .mem] --- A3[内存扩展卡
Memory Expander]

服务器场景下最重要的是 Type 3——内存扩展卡。

CXL.mem 的工作模式

服务器看到的”CXL 内存”:

1
2
DDR5 RDIMM 主存 (本地)  →  作为 NUMA Node 0
CXL Memory Module (PCIe 卡) → 作为 NUMA Node 1

应用层完全透明:

1
2
3
4
numactl --hardware
# available: 2 nodes (0-1)
# node 0 cpus: 0-95 memory: 1024 GB (本地 DDR5)
# node 1 cpus: memory: 4096 GB (CXL,"无 CPU"的内存节点)

操作系统上看到一个没有 CPU 的 NUMA Node——这就是 CXL 内存。延迟比本地 DDR5 高一倍多(~150-300 ns),但远低于跨 socket。

CXL 三个阶段的演进

CXL 1.0 / 1.1(2019-2020)

  • 单主机内的扩展
  • Type 1/2/3 设备定义
  • 物理层 PCIe 5.0
  • 没人量产——只是规范

CXL 2.0(2020)

引入两个关键概念:

1. CXL Switch

像以太网交换机一样,让多个主机和多个 CXL 设备多对多互联

graph TB
  H1[主机 1] --- SW
  H2[主机 2] --- SW
  H3[主机 3] --- SW
  SW[CXL Switch]
  SW --- M1[CXL Memory 1]
  SW --- M2[CXL Memory 2]
  SW --- M3[CXL Memory 3]

2. Memory Pooling(内存池化)

多台主机共用同一池内存:

1
2
3
主机 A 缺 200 GB → 从池里借
主机 B 释放 500 GB → 还回池里
管理软件按需分配

实际产品:三星、SK 海力士、美光在 2023-2024 年分别发布 CXL 2.0 Memory Module,数据中心客户开始 PoC。

CXL 3.0 / 3.1(2022-2024)

CXL 3.x 是质的飞跃

  • 物理层升到 PCIe 6.0(双倍带宽)
  • 多级 Switch(机柜级互联)
  • Memory Sharing:多主机直接共享同一块内存(不是 pooling,是 sharing)
  • 一致性硬件支持,避免软件复杂度
graph TB
  subgraph 机柜A
    HA1[主机 A1] --- SWA[CXL Switch A]
    HA2[主机 A2] --- SWA
  end
  subgraph 机柜B
    HB1[主机 B1] --- SWB[CXL Switch B]
    HB2[主机 B2] --- SWB
  end
  subgraph 内存池
    MP1[CXL Memory Pool 1]
    MP2[CXL Memory Pool 2]
  end
  SWA --- FAB[Fabric / Multi-level Switch]
  SWB --- FAB
  FAB --- MP1
  FAB --- MP2

CXL 3.x 之后,”内存池“概念可以扩展到整个机柜甚至机房

CXL 内存的延迟梯度

1
2
3
4
5
本地 DDR5:           ~80 ns
跨 NUMA(同机): ~140 ns
CXL(同卡): ~170 ns
CXL(经过 Switch): ~230 ns
CXL(跨机柜 Fabric):~400 ns

待补充:实测数据因平台而异,以上是 2024-2025 年厂商公开的典型范围。

可以看到:CXL 内存比远端 DDR5 慢,但比 NVMe SSD 快上百倍——这是它的”位置”。

CXL 的三个使用场景

场景 1:单机内存扩展

最直接的用法。一台服务器主板 12 通道 × 2 DPC × 256 GB = 6 TB,但不够?加 CXL 卡:

1
2
3
本地 DDR5:6 TB
CXL Memory:扩展 2-4 TB
应用看到统一的 8-10 TB 内存(分级访问)

适合:内存数据库、超大容器、Java 大堆。

场景 2:内存池化

数据中心多台机器算 + 1 个 CXL 内存池:

1
2
3
4
机房有 100 台机器,每台 1TB DRAM = 100 TB
其中 50 台只用了 50% → 50TB 浪费
改造成:每台 512 GB + 50 TB 共享 CXL 池
按需分配,资源利用率从 50% 提到 80%

云厂商最关心这个——内存是数据中心 TCO 的最大头,池化能省真金白银。

场景 3:异构内存架构(Tiered Memory)

1
2
3
4
5
Tier 0:HBM           (GPU 上)
Tier 1:本地 DDR5 (CPU 主存)
Tier 2:CXL 远端 DRAM (扩展或池化)
Tier 3:CXL 持久内存
Tier 4:NVMe SSD

OS(Linux 内核 5.15+)已支持自动冷热数据分层迁移——最近访问的留在快层,长期不用的下沉到 CXL。

CXL 的产品现状(2025 末)

厂商 产品 阶段
三星 CXL 2.0 Memory Module CMM-D 量产
SK海力士 CXL 2.0 Memory Solution 量产
美光 CXL 2.0 NVMe-style memory 量产小规模
Astera Labs Leo CXL Smart Memory Controller 量产
Microchip SMC 2000 系列 量产
Marvell Structera A 系列 量产

CPU 平台支持:

平台 CXL 支持
Intel SPR/EMR CXL 1.1
Intel Xeon 6 CXL 2.0
AMD Genoa CXL 1.1
AMD Turin CXL 2.0
ARM(Grace 等) CXL 2.0/3.0

CXL 3.x 的产品已经开始出现,但大规模商用还要 2026-2027 年——主要等 PCIe 6.0 完整生态、Switch 芯片成熟、整机厂方案稳定。

CXL 上的”持久内存”

Optane 走了,CXL 把持久内存的接力棒接了过来:

  • Type 3 设备 + 后端 NAND/3D XPoint 类介质 = CXL Persistent Memory
  • 字节寻址、断电保留
  • 容量大、延迟比 DRAM 高、可热插
1
2
3
4
CXL Memory:
- DRAM-backed → 易失,纯扩展
- NAND-backed → 持久,类 SSD 速度
- 3D Phase Change / ReRAM → 中间档

待补充:当前已量产的 CXL Persistent Memory 产品和规格。

CXL 的限制和挑战

1. 延迟高于本地 DRAM

加一跳 PCIe 就多 50-100 ns。不能完全替代本地 DDR——只能做”远端 / 池化 / 持久”层。

2. 一致性的复杂度

CXL.cache + 多主机共享 → 缓存一致性协议变复杂。CXL 3.0 引入硬件级一致性,但调优、故障定位都比传统 NUMA 难。

3. 故障域扩大

CXL Switch 挂掉 = 多台机器同时失内存 → 单点故障风险。Fabric 级冗余是必须的。

4. 软件适配

OS、虚拟化、数据库要明确”哪段内存是 CXL 哪段是 DDR”——目前 Linux 5.18+ 已基本就绪,Windows Server 2025 跟进,但应用层还不成熟。

5. 安全和隔离

多租户共享内存池如何防止租户间数据泄露?CXL 3.0 引入 IDE 加密通道,但实战经验少。

一张大图

graph LR
  GEN1[2019
CXL 1.0] --> GEN11[2020
CXL 1.1
规范完成] GEN11 --> GEN2[2020-2023
CXL 2.0
Switch + Pooling] GEN2 --> GEN3[2022-2025
CXL 3.x
Sharing + 多级] GEN3 --> FUT[2026+
机柜级内存池化普及]

CXL 不是这个空间唯一的协议:

协议 主导者 物理层 主要场景
CXL Intel + 业界联盟 PCIe 通用,CPU 内存扩展、加速器
NVLink NVIDIA 自研 GPU↔GPU、CPU↔GPU
UALink AMD/Intel/Broadcom等 类以太网 GPU↔GPU 集群(对标 NVLink)
Infinity Fabric AMD 自研 EPYC 多 socket 互联

短期看 CXL 在”CPU 周边”占优势,NVLink 在 GPU 互联占绝对优势。中长期 UALink 试图打破 NVIDIA 在 GPU 集群互联上的垄断。

小结

  • CXL 在 PCIe 物理层之上加了 .io / .cache / .mem 三个协议
  • CXL 1.x 单机扩展,2.0 Switch + 池化,3.x 多机共享 + 多级 Fabric
  • CXL 内存延迟 150-400 ns,比本地 DDR5 慢、比 SSD 快几个数量级
  • 三大用途:单机内存扩展、内存池化、异构内存分层
  • Optane 退役后的”持久内存”接力棒交给 CXL
  • 当前产品已量产但生态仍在成熟期,2026-2027 年是关键窗口

下一篇是第三章最后一篇——内存选型实战和小结。