CXL
CXL 内存语义互联协议的三子协议设计及 2.0 到 4.0 的版本演进
核心要点:
- 基于 PCIe 物理层叠加缓存一致 + 内存语义两个新协议
- 三子协议:CXL.io (PCIe 等价) / CXL.cache / CXL.mem
- Device Type 1/2/3 对应不同协议组合,Type 3 (纯内存扩展) 最先大规模落地
- 2.0 引入 Memory Pooling,3.0 引入 Sharing + GFAM + PBR Fabric (4096 节点)
- 4.0 (2025-11) 基于 PCIe 7.0,x16 单向 ~242 GB/s
- 延迟比直挂 DRAM 高 ~70 ns,但比 NVMe 快 20-50×,不替代 NVLink
CXL 由 CXL Consortium 于 2019-03 推出。本文写 CXL 协议本身:三子协议、Device Type 分类、版本演进、Switch / Pooling / Fabric 拓扑、延迟局限。与 NVLink / UALink / IB 横向对比见 1.14 AI 互联标准对比。
本文新引入名词 (其他名词见 1.1 总览 Glossary):
- CXL.io / CXL.cache / CXL.mem:三子协议,分别等价 PCIe / 缓存一致 / 内存语义 load/store
- Type 1/2/3 Device:按子协议组合分类,对应 SmartNIC / GPU / 内存扩展器
- Memory Pooling:多 host 共享一个物理内存池,region 私有 (CXL 2.0)
- Memory Sharing:多 host 同时访问同一段内存且保持一致视图 (CXL 3.0)
- GFAM (Global Fabric Attached Memory):直挂 Fabric 上、与 host 解耦的共享内存池
- PBR (Port Based Routing): CXL 3.0 引入的可路由 Fabric 转发,单 Fabric 4096 节点
- TSP (Trusted Security Protocol): CXL 3.1 引入的机密计算扩展
为什么要在 PCIe 之上再造一层协议?
补齐 PCIe 在共享内存场景下的三处语义空缺[1]:
- 缓存不一致:PCIe 设备访问主机内存通过 DMA,CPU cache 与设备 cache 之间没有硬件维护一致性。软件必须显式 flush/invalidate,否则可能读脏数据。加速器无法以"cache line"颗粒度共享数据
- 没有内存语义 load/store:PCIe 无法把加速器卡上的内存暴露成 CPU 可直接 load/store 的物理地址区间。CPU 访问加速器本地内存必须绕道 DMA buffer
- 核数增长快于内存通道:多核 CPU 核数比 DRAM 通道增长更快,每核可用带宽下降;同时加速器本地内存 (如 GPU HBM) 在 CPU 视角下"摸不到",内存资源被困在单台机器内
CXL 设计原则:复用 PCIe 物理层 / 电气接口 (FlexBus 上一条链路可协商成 PCIe 或 CXL),叠加缓存一致 + 内存语义两个新协议,与 PCIe 软硬件生态向后兼容[1]。
三个子协议怎么分工?
CXL.io 强制,CXL.cache 设备发起,CXL.mem 主机发起,见 @tbl-hw-cxl-sub。
| 子协议 | 语义 | 主要发起方 | 典型用途 |
|---|---|---|---|
| CXL.io | PCIe 等价:MMIO / 配置 / DMA / 中断 | 双向 | 设备枚举、driver 初始化、控制面 |
| CXL.cache | 缓存一致:设备发起 cache line 读写 / 共享 / 独占,host 仲裁 | 设备 → 主机 | 加速器读 CPU 工作集 (图、参数) 保持一致性 |
| CXL.mem | 内存语义 load/store: host 以 cache line 颗粒度直接访问 device-attached memory | 主机 → 设备 | CPU 直挂 CXL 内存扩展模块、读 GPU HBM |
@tbl-hw-cxl-sub CXL 三子协议
关键设计是不对称:CXL.cache 由设备主动访问 host 内存,host 充当一致性域 Home;CXL.mem 反过来,host 主动访问设备本地内存。这种不对称让 host 保持单一一致性管理点,避免设备间维护复杂目录协议[2]。
CXL.io 强制,CXL.cache 和 CXL.mem 可选,组合方式决定 Device Type。
Device Type 1/2/3 怎么对应硬件用例?
按设备实现的子协议组合分类[2][1],见 @tbl-hw-cxl-type。
| Type | 协议组合 | 本地暴露内存 | 典型设备 | 典型用例 |
|---|---|---|---|---|
| Type 1 | io + cache | 否 | SmartNIC、网络加速卡、压缩/加密卸载卡 | 缓存一致访问主机 RAM,自身无大块内存对外暴露 |
| Type 2 | io + cache + mem | 是 (HBM/GDDR) | GPU、FPGA、训练 ASIC | 既读 CPU 工作集,又把本地 HBM 暴露给 CPU,最完整 |
| Type 3 | io + mem | 是 (DDR5/持久内存) | CXL Memory Module、E3.S 扩展卡 | 纯容量/带宽扩展,CPU 当"远端 DRAM"用 |
@tbl-hw-cxl-type Device Type
当前商用情况:Type 3 是 2024-2025 阶段最先大规模落地的形态。AMD EPYC 自 Genoa (2022) 起、Intel Xeon 自 Emerald Rapids (2023-12) 起原生支持 Type 3 内存扩展模块。Montage / Samsung / Micron / SK Hynix 等已出货 DDR5 CXL 内存扩展卡[3]。Type 1 / Type 2 落地较慢,Type 2 (CXL-attached GPU) 目前主要在原型/研究阶段。
版本怎么演进?
约每两年一代,跟随 PCIe 物理层升级[2],见 @tbl-hw-cxl-ver。
| 版本 | 发布日期 | PCIe 物理层 | 每 lane 速率 | x16 单向带宽 | 关键能力 |
|---|---|---|---|---|---|
| CXL 1.0 | 2019-03-11 | PCIe 5.0 | 32 GT/s | ~64 GB/s | 三子协议定义,单 host 直连单 device |
| CXL 1.1 | 2019-06 | PCIe 5.0 | 32 GT/s | ~64 GB/s | 1.0 合规/互操作修订 |
| CXL 2.0 | 2020-11-10 | PCIe 5.0 | 32 GT/s | ~64 GB/s | 单层 Switch、Memory Pooling、设备加密 |
| CXL 3.0 | 2022-08-02 | PCIe 6.0 | 64 GT/s | ~121 GB/s | 多层 Switch/Fabric、PBR (4096 节点)、Memory Sharing、GFAM、P2P |
| CXL 3.1 | 2023-11-14 | PCIe 6.0 | 64 GT/s | ~121 GB/s | TSP 机密计算扩展、Fabric Manager API 增强、GFAM 进一步定义 |
| CXL 3.2 | 2024-12-03 | PCIe 6.0 | 64 GT/s | ~121 GB/s | 3.x 系列优化与勘误 |
| CXL 4.0 | 2025-11-18 | PCIe 7.0 | 128 GT/s | ~242 GB/s | PCIe 7.0 翻倍,向后兼容 3.x 协议特性 |
@tbl-hw-cxl-ver CXL 版本演进
带宽口径:x16 单向带宽按物理层规格折算,CXL 3.x x16 = 121 GB/s,CXL 4.0 x16 = 242 GB/s[2]。注意这是单向,与 1.1 总览 PCIe 表的"双向 x16"口径不同。
Switch / Pooling / Fabric 拓扑怎么递进?
1.x 点对点 → 2.0 单层 Switch + Pooling → 3.0 多层 Fabric + Sharing。
CXL 1.x:直连
CPU --- CXL link --- Device
一个 host 直挂一个 device,最早商用的 Type 3 内存扩展模块走这条路径,等同"远端一点的内存通道"。
CXL 2.0:单层 Switch + Pooling
Host A ----+
Host B ----+--- CXL Switch ---+--- Device 1 (Type 3 pool)
Host C ----+ +--- Device 2 (Type 3 pool)
Host D ----+ +--- Device 3 (Type 3 pool)
2.0 引入单层 CXL Switch,多 host 共享一组 Type 3 内存设备组成的物理池。Fabric Manager 把池中的 region 动态分配给某个 host,同一时刻一个 region 只属于一个 host (Pooling,不是 Sharing)[3]。落地厂商如 Microchip、XConn 已出货 2.0 Switch 芯片。
CXL 3.0/3.1:多层 Fabric + Sharing + GFAM
Host A --+ +-- GFAM Memory
Host B --+--- Switch ---+--- Switch +-- GPU (Type 2)
Host C --+ + +-- Type 3 Module
Host D --+ +--- Switch +-- ...
+-- Peer-to-Peer Device
3.0 核心变化是 PBR:单 CXL Fabric 可路由扩展到 4096 节点,并支持多层 Switch 串联[2]。在此基础上:
- Memory Sharing:多 host 同时访问同一段内存且看到一致视图,硬件维护一致性,是 Pooling 的语义升级[3]
- GFAM:内存池直挂 Fabric 而非某 host 后面,host 通过 Switch 透明访问,进一步解耦 host 与内存
- Peer-to-Peer:设备之间可绕过 host 直接走 Fabric 通信,给 GPU-GPU、GPU-存储等场景预留语义 (目前实际部署罕见)
3.1 在 3.0 基础上引入 TSP,给 Fabric 上的内存访问加加密与完整性保护,面向机密计算场景[2]。
为什么延迟决定 CXL 不是 NVLink 替代品?
CXL 端到端访存延迟显著高于直挂 DRAM:PCIe SerDes + 协议层 (FlexBus / 缓存一致协议栈 / Switch 转发) 都引入开销,见 @tbl-hw-cxl-lat。
| 内存层级 | 典型访存延迟 | 来源 |
|---|---|---|
| GPU HBM3 / HBM3e (片上) | ~80 ns | 业界普遍口径 |
| CPU 直挂 DDR5 | ~80-100 ns | 业界普遍口径 |
| CXL Type 3 (直连,无 Switch) | ~150-200 ns (直挂 DDR + ~70 ns CXL 开销) | Montage MXC 3.1 控制器[3] |
| CXL Type 3 (经 Switch 池化) | ~200-300+ ns | Switch 转发额外加几十 ns |
| 本地 NVMe SSD | ~10 us | 业界普遍口径 |
@tbl-hw-cxl-lat 内存层级延迟对比
Introl 实测:当前一代 CXL 控制器相比直挂 DRAM 引入约 70 ns 额外延迟,但相比 NVMe 仍快 20-50×[3]。这一延迟特征决定 CXL 的定位:
- 适合做:内存容量扩展 (KV Cache 溢出、in-memory database tier)、内存池化 (弹性资源调度)、跨 host 共享数据池
- 不适合做:训练时 GPU-GPU 高频 AllReduce (带宽差 NVLink 一个数量级,延迟差 NVLink 2 个数量级)。CXL 不与 NVLink / UALink 在 scale-up 层级竞争
CXL 与 NVLink / UALink 的具体定位差异见 1.14 AI 互联标准对比 memory-semantic 一节。
开放问题
核心问题:CXL 在 Type 2 商用化、3.0 Fabric 落地、AI 推理场景中尚未解决的关键问题有哪些?
- Type 2 商用化:CXL 2.0/3.0 规范完整支持 Type 2 (GPU 把 HBM 暴露给 CPU),但 2024-2025 没有公开出货的 Type 2 GPU,NVIDIA/AMD 主流 GPU 仍走 NVLink/xGMI 自家协议。原因可能是带宽/延迟差距 + 生态锁定
- 3.0 Fabric 落地节奏:3.0 发布于 2022-08,但截至 2025 年公开出货的多层 PBR Switch 仍少见。GFAM / 跨 host Memory Sharing 在生产环境的稳定性、Fabric Manager 软件栈成熟度都是开放问题
- CXL 4.0 (PCIe 7.0) 何时商用:4.0 规范于 2025-11 发布,PCIe 7.0 物理层何时进入服务器主板 (Intel/AMD 路线图) 决定 4.0 实际可用时间
- AI 推理 KV Cache 卸载到 CXL 的 TTFT/TPOT 影响:理论上把冷 KV Cache 放 CXL 池可省 HBM 容量,但 ~150-300 ns 延迟对 attention 访存的实际影响需 benchmark 验证
Takeaway
| 知识点 | 核心结论 |
|---|---|
| 出现动机 | PCIe 三处空缺:缓存不一致 / 无 load/store / 核数 vs 内存通道失配 |
| 三子协议 | io 强制 + cache (设备 → host) + mem (host → 设备),不对称设计 |
| Device Type | Type 1 SmartNIC / Type 2 GPU / Type 3 内存扩展,Type 3 最先落地 |
| 版本演进 | 1.x 直连 → 2.0 Pooling → 3.0 Sharing + GFAM + PBR (4096 节点) → 4.0 PCIe 7.0 翻倍 |
| 延迟 | 比直挂 DRAM 高 ~70 ns,比 NVMe 快 20-50× |
| 定位 | 内存扩展/池化/共享,不是 NVLink 替代品 |
| 商用现状 | Type 3 已大规模落地,Type 2 仍研究阶段,3.0 Fabric 出货少 |
参考资料
- Rambus Blog, Compute Express Link (CXL). https://www.rambus.com/blogs/compute-express-link/
- Compute Express Link, Wikipedia. https://en.wikipedia.org/wiki/Compute_Express_Link
- Introl, CXL Memory Expansion, Pooling and Disaggregated Memory in the 2025 AI Data Center. https://introl.com/blog/cxl-memory-expansion-pooling-disaggregated-memory-ai-data-center-2025