第7章:主流系统对比与选型 —— 把前六章放在一张大表上
横向对比 RDMA / CXL 上的主流远程内存系统:DM 事务、KV-cache 池、训练 offload、CXL memory pool。给一个具体场景能 3 分钟选出该用哪个
前六章拆完一个个系统,现在把它们放在同一张大表上对照——你会发现 FORD / Motor / Mooncake / Pond / ZeRO-Infinity 看似毫不相干,但都在同一组 trade-off 上选边。本章给一份决策树 + 对比矩阵,让你拿到一个新需求(比如”我要做一个低延迟的多租户向量数据库”,或”我要把训练 checkpoint 速度提 5ד)时,3 分钟选出该用哪类系统、避开什么坑。读完这章你也能批判性看任何新论文:它是真创新,还是把已有 trade-off 换了个套子。
📑 目录
- 1. 一张大表:把所有系统放在同一坐标
- 2. 决策树:从需求到系统
- 3. 按需求维度的横向对比
- 4. 容易混淆的”看起来像”系统辨析
- 5. 选型的三个隐藏成本
- 6. 系统组合:谁配谁
- 自我检验清单
- 参考资料
1. 一张大表:把所有系统放在同一坐标
七轴坐标:{延迟级别, 容量级别, 一致性强度, 编程模型, 硬件依赖, 主要 workload, 是否成熟可生产}
| 系统 | 延迟 | 容量 | 一致性 | 编程模型 | 硬件 | Workload | 生产成熟度 |
|---|---|---|---|---|---|---|---|
| FaRM | 几 µs | 节点 RAM 总和 | 序列化 OCC | verbs(显式) | RDMA 100GbE | OLTP | 闭源研究 |
| FORD | 几 µs | 同上 | 序列化 OCC | verbs(显式) | RDMA 100GbE | 短 OLTP, TPC-C | 开源研究原型 |
| Motor | 几 µs | 同上 | MVCC 快照 | verbs(显式) | RDMA 100GbE | 混合 OLTP/OLAP | 开源研究原型 |
| LOTUS | 几 µs | 同上 | (沿 Motor) | verbs + reactive | RDMA 100GbE | 漂移负载 OLTP | 部分开源 |
| AdaptX ⭐ | 几 µs | 同上 | (沿 Motor) | verbs + 控制面 | RDMA 100GbE | 极端 hotspot | 开源(CREST patch) |
| Mooncake | 几十 µs | 几十 TB | 最终一致(KV) | RPC + transfer engine | RDMA + GPUDirect | LLM 推理 | Kimi 商用 |
| DistServe | 几十 µs | 同上 | 最终一致 | 调度框架 | RDMA + GPU | LLM 推理 | 学术原型 |
| SplitWise | 几十 µs | 同上 | 最终一致 | 调度 + 异构硬件 | RDMA + 异构 GPU | LLM 推理 | Azure 内部 |
| Pond | 100-300 ns | 几 TB(机柜内) | 硬件一致 | NUMA(透明) | CXL 2.0 Type 3 | 通用 VM 内存 | Azure 已部署 |
| TPP | 100-300 ns | 同上 | 硬件一致 | NUMA(透明) | CXL Type 3 | Meta data center | Meta 已部署 |
| ZeRO-Infinity | µs ~ ms | NVMe TB 级 | 强(同步) | DeepSpeed API | NVMe + CPU | 大模型训练 | 工业广泛 |
| HugeCTR | µs(查询) | TB 级 | 强(参数) | Merlin SOK | GPU + DDR + PMEM | 推荐训练 | 工业广泛 |
| InfiniSwap | µs ~ ms | 远端 RAM 池 | 弱(swap 语义) | 透明(swap) | RDMA | 通用 swap 替代 | 学术 + 部分生产 |
对照组(非 disaggregation 方案):
| 系统 | 类型 | 与 disaggregation 关系 |
|---|---|---|
| vLLM | 单机 PagedAttention | 同问题但不分离 |
| Polar / Aurora | 共享存储数据库 | 工业 disaggregation 的早期落地 |
| NVMeoF | 远端块存储 | 比 RDMA 更高层抽象,延迟差 1 个数量级 |
2. 决策树:从需求到系统
新需求
│
┌─────────────────┴─────────────────┐
│ │
事务一致性需求? 无强一致需求
│ │
┌──────┴──────┐ ┌───────────┴───────────┐
Y N LLM 推理? N
│ │ │ │
DM 事务系统 │ Y │
│ │ │ ┌─────┴─────┐
┌───┴───┐ │ KV-cache pool? 训练? 通用扩内存?
│ │ │ │ │ │
短 OLTP 混合 │ ┌─────┴─────┐ Y │
│ │ │ Y N │ │
FORD Motor │ Mooncake DistServe ┌─┴─┐ │
│ (含 PD) SplitWise ZeRO HugeCTR │
│ (含 KV池) Inf (推荐) │
│ │
┌──────┴──────┐ ┌──────┴──────┐
│ │ │ │
漂移负载? 极端 hotspot? 单机扩展? 多机 swap?
│ │ │ │
Y Y Y Y
│ │ │ │
LOTUS AdaptX CXL Type 3 InfiniSwap
(Pond / TPP)
几个高频实际问题的快速答案:
- “我要做低延迟向量数据库” → KV-cache 池技术栈 + Mooncake 类的 transfer engine
- “我要把训练 checkpoint 速度提 5×” → GPUDirect Storage + RDMA + sharded checkpoint
- “我要让 8 台机器共享一个大 hash 表” → 短期:DM 事务系统(Motor),中期:CXL 3.0 sharing
- “我要省钱训 70B 模型” → ZeRO-Infinity 或 FSDP + offload
- “我要做云上多租户内存弹性” → CXL Type 3 + Pond-style placement(自研或买 Astera 方案)
3. 按需求维度的横向对比
3.1 延迟敏感度排序(从最严到最松)
| 层级 | 延迟 | 代表系统 |
|---|---|---|
| Cache-coherent | 100-300 ns | CXL Type 3(Pond, TPP) |
| 单机网络 | 1-3 µs | RDMA(FaRM, FORD, Motor) |
| KV transfer | 几十 µs-ms | Mooncake KV pool |
| Storage IO | 几十 µs-ms | NVMe(ZeRO-Infinity) |
| 跨数据中心 | ms 级 | NVMeoF, 跨 DC RDMA |
3.2 一致性需求排序
| 一致性强度 | 代表 | 备注 |
|---|---|---|
| Hardware coherent | CXL.mem | 最强,硬件保证 |
| Strict serializable OCC | FORD, FaRM | 软件 OCC,验证后 commit |
| Snapshot isolation | Motor | MVCC,放宽到 SI |
| Strong eventual | Mooncake KV | ”刷新会达到一致” |
| Weak / swap-like | InfiniSwap | 应用须自己处理过期 |
3.3 总持有成本排序(硬件 + 工程)
| 方案 | 硬件成本 | 工程成本 | 备注 |
|---|---|---|---|
| CXL Type 3 | 中(扩展卡) | 低(NUMA-like) | 商用产品成熟 |
| RDMA + 软件栈 | 中(网卡 + 交换机) | 高(verbs 编程 + 调优) | DM 系统主路线 |
| GPUDirect + transfer engine | 高(NIC + GPU) | 高(同 RDMA) | LLM 推理主路线 |
| NVMe + DeepSpeed | 低(SSD) | 中(框架成熟) | 训练主路线 |
| InfiniSwap-like | 中 | 低(透明) | 学术为主 |
4. 容易混淆的”看起来像”系统辨析
”Mooncake 不是数据库”
Mooncake 看起来像分布式 KV store,但它对一致性的要求是松的——KV blocks 是不可变的(LLM 生成的 token KV-cache 不会被改),所以不需要事务/锁。如果你拿 Mooncake 去做”分布式键值数据库”会发现并发更新无法保证。
“CXL pool 不是 swap”
CXL pool 是硬件一致的(load/store 直接访问),swap 是软件透明 (page fault 触发 IO)。两者的语义、延迟、性能特征完全不同。把 CXL pool 当 swap 用会浪费它的硬件一致性,把 swap 当 CXL pool 用会被频繁 page fault 拖死。
“FORD 不是分布式数据库”
FORD 是单 region 内的 disaggregated 事务系统——所有 CN/MN 都在一个 RDMA 网络内,不考虑跨 region 复制 / 网络分区 / 时钟漂移。把它当 Spanner / Aurora 类全球数据库用会立刻翻车——它从未设计应对那些场景。
“ZeRO-Infinity offload 也是远程内存”
是的——ZeRO-Infinity 把 optimizer state 倒去 NVMe,本质就是用本地 NVMe 当”远端”。但它的延迟假设非常宽松(几十 µs-ms 都可接受),因为训练 batch 大,IO 可以 hide。别把这套思路套到推理 KV-cache 上,推理延迟预算严得多。
“InfiniSwap 不是 Mooncake”
两者都是”远端内存”,但 InfiniSwap 是通用 swap 替代(应用无感知,内存不够就换页),Mooncake 是应用级显式管理(KV blocks 是 first-class object)。InfiniSwap 通用但慢,Mooncake 专用但快——典型 generality vs performance 权衡。
5. 选型的三个隐藏成本
新人选型最容易忽视的三个隐藏成本:
5.1 运维成本
- RDMA 调优:PFC/ECN/DCQCN 参数,任何一个配错性能腰斩。生产部署必须有专门的网络团队
- CXL 固件升级:CXL 是新生态,固件 bug 不少,升级流程跟传统服务器不一样
- GPUDirect 兼容:NIC 固件、GPU 驱动、kernel 版本三方匹配,一致性维护代价高
5.2 开发成本
- 显式 vs 透明:RDMA verbs 是显式编程,要自己管 MR 注册、QP 创建、batch 攒。新人上手 3-6 个月
- CXL NUMA-aware:虽然透明,但要发挥性能必须 numactl 或主动 page placement,否则跨 NUMA 访问反而慢
- CXL.cache 的细节:Type 2 的 device/host bias 切换、cache 一致性失败模式,深度使用要懂硬件
- 错误处理:RDMA 的错误代码 50+ 种,生产代码要全 cover,LOC 比想象的多
5.3 故障恢复成本
- MN 节点 crash:DM 事务系统下 MN 数据如何恢复?Motor 用 MVCC 多副本,FORD 单版本恢复难度更大
- KV pool 失效:Mooncake 的 KV blocks 被某节点 evict 了,正在生成的 request 怎么办?(典型答案:fallback 到 prefill 重算)
- 跨故障域协调:PD 解耦后,prefill 节点和 decode 节点之间需要 lifecycle 协调,状态机比同机版复杂 5×
🌟 结论:选型时把硬件成本和工程成本都看上——RDMA 100GbE 网卡 ¥10K 一张看起来便宜,但配 RDMA 团队 + 维护代码 + 调优 + 故障演练,三年总持有成本比同等性能的 CXL Type 3 方案可能高 2-3×。
6. 系统组合:谁配谁
实际生产很少单用某一套——几个常见组合:
6.1 LOTUS + AdaptX(数据面 + 控制面)
LOTUS 解决”锁迁回 CN”,AdaptX 在它之上加多控制环路。这是数据面 + 控制面的经典组合,本系列的工作就在这条线上。
6.2 Mooncake + ZeRO-Infinity(推理 + 训练共集群)
大厂训推一体集群,RDMA fabric 共用:
- 白天推理高峰:Mooncake KV pool 占主带宽
- 夜间训练:ZeRO-Infinity offload 占主带宽
- 共用 GPUDirect Storage 接 NVMe,fault tolerance 一套机制
6.3 CXL Type 3 + RDMA(同机柜近 + 跨机柜远)
- 机柜内热数据:CXL Type 3 内存池 → 100ns 一致访问
- 跨机柜冷数据:RDMA verbs → µs 级访问
- 用一个统一的虚拟地址抽象,应用透明感知
⭐ frontier 方向:RDMA over CXL fabric——RDMA 协议 endpoint 实际上是 CXL pool 网关,跨机柜走 RDMA,机柜内透明转 CXL load/store。
6.4 Pond + TPP(同 CXL 平台两层优化)
- Pond 解决”VM 调度时分配 CXL 内存比例”
- TPP 解决”运行时 page placement 自动化”
- 配合使用,VM 整体性能/成本曲线更优
🌟 结论:真正的生产系统都是”多个分离思想的组合”——很少有”纯一个方案”通吃。学完前六章后,看到一个新系统先问”它在大表的哪一格,组合了哪些已知思想”。
✅ 自我检验清单
- 大表:能默写至少 8 个系统在主轴上的位置
- 决策树:任意新需求能在 3 分钟内走完决策树
- 三档延迟:能讲清”100 ns / µs / ms”三档延迟各自对应什么硬件路径
- 容易混淆辨析:能解释为什么”Mooncake 不是数据库”
- 隐藏成本:能讲清运维 / 开发 / 故障恢复三类隐藏成本各自的来源
- 组合:能给出至少 2 个真实可行的系统组合方案
- 批判性:看到一篇新论文,能在大表上指出它的位置 + 增量贡献
📚 参考资料
综述
- A Survey on Memory Disaggregation: Trends and Future Directions(各类期刊和会议有多个综述,推荐 IEEE Computer / ACM SIGOPS Operating Systems Review 上的最新版)
- Memory in the Age of AI Agents(2025):同期 AI memory 综述,可对照看
关键论文(已在前面章节展开)
- 见第 4 章(DM 事务):FaRM / FORD / Motor / LOTUS / AdaptX
- 见第 5 章(KV-cache):Mooncake / DistServe / SplitWise
- 见第 6 章(训练):ZeRO-Infinity / DeepSpeed / Pollux / Bamboo
- 见第 3 章(CXL):Pond / TPP
行业讨论
- SemiAnalysis 的 disaggregation ecosystem 综述(系列博客)
- The Next Platform 的 RDMA / CXL 系统横评
- OCP(Open Compute Project) 的 memory disaggregation working group 报告
框架文档
- 各系统的开源 repo / 官方文档已在对应章节列出
下一章下场实战 —— 在真实 RDMA 集群上跑通一套 disaggregated 系统。