分离式事务的动态锁所有权 学习路线
围绕 AURA 论文系统化拆解 DM 事务的 atomic IOPS 物理瓶颈、动态锁所有权设计、在线学习与迁移协议、闭环控制与端到端复现的完整学习路线
模块十三的第 4 章已经把 FORD / Motor / LOTUS / AdaptX 的 design space 横向串了一遍。但当一个研究生真的要在这个方向上做工作时,光知道”有这些系统”远远不够——他需要知道为什么要走动态锁所有权这条路、cohort 怎么定义、迁移协议怎么不丢一致性、实验怎么设计才说服得了审稿人。本路线把 AURA 这一篇论文当作主轴,把所需的 RDMA / OCC / 控制系统 / 实验方法论基础全部沉淀进来,串联 9 章内容,从立题、设计、协议、控制、实验到端到端复现,全程对齐”看完能自己实现并辩护”的标准。
作者将根据该路线编写系列文章,把 AURA 这条研究链路从问题到落地讲到工程级深度。
📑 目录
🌟 全景概览:为什么动态锁所有权是 DM 事务的下一步
DM(Disaggregated Memory)事务系统过去十年的演化主轴是**“把状态搬到远端、把动作压到 RDMA 单边原语”。FaRM、FORD、Motor 把读写、版本、commit 路径都做到 one-sided,唯独锁的获取**仍然依赖 MN(Memory Node)RNIC 的 atomic(CAS / FAA)原语。这条路径在 ConnectX-3 上被压在 ~1 Mpps,在 ConnectX-6 Dx 上 5–10 Mpps——这是物理上限,不可水平扩。一旦工作负载的写锁热点 IOPS 超过这个数字,新增 CN 不再带来吞吐增长,反而引发 retry storm 让系统反向退步。
LOTUS 第一次把锁从 MN 提到 CN,但它假设应用提供稳定的 critical field,且不支持运行时漂移。AURA 在 LOTUS 之后回答两个 LOTUS 留下的问题:
- 如果 critical field 未知或随时间漂移,怎么办?
- 锁所有权一旦放到 CN,怎么在不丢一致性的前提下迁移?
AURA 的回答是把”哪些锁该归哪个 CN”做成一个在线学习 + 闭环控制的物理设计问题:
MN(数据 + Fallback Lock)
──────────────────────────
↑ RDMA READ/WRITE/CAS(数据通路不变)
│
┌────────────┼────────────┐
│ │ │
┌─▼─┐ ┌─▼─┐ ┌─▼─┐
│CN₁│ │CN₂│ │CN₃│
│ │ ◄────► │ │ ◄────► │ │ OwnerRpc(迁移 + 跨锁簇协调)
│ ┌─┴──────┐ │ ┌─┴──────┐ │ ┌─┴──┐
│ │OwnerLock│ │ │OwnerLock│ │ │… │
│ │ Table │ │ │ Table │ │ │ │
│ └────────┘ │ └────────┘ │ └────┘
│ │ │
│ Trace → AccessGraph → CohortPlanner → MigrationCtrl
└─────────── Affinity-aware Routing ──────────────────┘
🧠 核心洞察:atomic IOPS 是固定预算,不能水平扩;唯一出路是把锁请求从 MN 路径搬走。静态搬走解决一半,动态搬走保证搬走的那部分始终对得上当前 workload。
🍎 直觉比喻:把 MN 想象成只有一个收银台的银行。LOTUS 的做法是预先把 VIP 客户分到各个支行(CN)单独服务;AURA 的做法是在线观察客流,谁多就把柜台动态搬到哪个支行——而且支行之间还能互相协作处理跨支行业务。
四个待解的核心权衡,贯穿后续 9 章:
| 权衡 | 选择空间 | 影响 |
|---|---|---|
| 锁权威位置 | MN 集中 / CN 单一所有 / CN 多副本 | atomic IOPS 压力 vs 协议复杂度 |
| Cohort 粒度 | 单 record / key_group / 大簇 | 命中率 vs 迁移成本 |
| 决策频率 | 离线 / 100ms / 5ms 闭环 | 漂移适应性 vs 抖动风险 |
| 一致性策略 | 等待迁移完成 / fallback to MN / 双权威 | 可用性 vs 实现复杂度 |
🌟 一句话主旨:AURA 把”锁放哪、谁说了算”从静态部署决策升级成在线物理设计问题——这是 DM 事务在 LOTUS 之后的下一步。
📖 章节导览
整个模块分为 9 章,从立题到复现:
| 章 | 主题 | 核心问题 | 关键产出 |
|---|---|---|---|
| 1 | DM 事务的 atomic IOPS 物理墙 | 撞墙在哪、撞墙之后会发生什么 | atomic IOPS 实测数据 + retry storm 微观图 |
| 2 | RDMA / OCC / 分离式架构必要前置 | 看 AURA 论文之前要打牢的概念 | ConnectX 代际差异表 + OCC 三阶段图 |
| 3 | 设计空间地图:DM 锁热点的 N 种解法 | LOTUS / FORD / Motor / CREST 怎么分类 | 设计空间矩阵 + Δ 表 |
| 4 | AURA 骨架:cohort、ownership、状态机、不变式 | 12 个模块、I1–I4、3 状态机怎么协同 | 模块架构图 + 不变式速记 |
| 5 | 在线学习与 cohort 划分 | AccessGraph 怎么建、cohort 边界怎么决定 | merge/split 决策伪代码 |
| 6 | 迁移协议:freeze-drain-handoff-publish | 4 阶段时序、epoch 单调、fallback corner case | 时序图 + 不变式证明草图 |
| 7 | 闭环控制:AdaptX 折叠进 AURA | Loop A 反压、Loop B NIC counter、5ms 为什么是 5ms | 控制环 ASCII 图 + 抖动分析 |
| 8 | 实验方法论:把故事讲圆的工程套路 | baseline 设计、bootstrap CI、negative regimes | 实验脚手架清单 |
| 9 | 端到端实战:CloudLab/APT 复现 AURA | reservation → bootstrap → run → CI 计算 | 一键脚本 + 故障速查 |
🍎 学习顺序建议:第 1-2 章必读,建立”为什么要做”和”做之前需要懂什么”的基础;第 3 章看完你应该能默写 LOTUS 与 AURA 的 Δ;第 4-7 章是 AURA 设计的核心,按顺序啃;第 8-9 章在你已经准备发起实验时再读。
⏳ 里程碑论文时间线
2014 ──── FaRM (Dragojević et al., NSDI'14) 首篇系统性 RDMA OCC,奠基 DM 事务范式
2018 ──── LegoOS (Shan et al., OSDI'18) Disaggregated OS 概念奠基
2018 ──── DrTM+H (Wei et al., OSDI'18) hybrid verbs 调度
2022 ──── FORD (Zhang et al., FAST'22) 单版本 DM 事务,cache-line 对齐锁
2024 ──── Motor (Wu et al., OSDI'24) MVCC + 一致版本表
2025 ──── LOTUS (Liu et al., arXiv'25) 首次把锁提到 CN,应用提供 critical field
2025 ──── CREST (Anonymous, ASPLOS'26) 开源实验框架,多层抽象
2026 ──── AURA (this guide, 2026) ★ 在线学习 + 闭环控制 + 动态锁所有权迁移
🍎 阅读顺序建议:
- 打底:LegoOS(理解 disaggregation 哲学)→ FaRM(RDMA OCC 鼻祖)
- DM 事务谱系:FORD(单版本)→ Motor(MVCC)→ LOTUS(锁分离)→ AURA(动态锁所有权,本路线主轴)
- 横向工具:CREST 源码(实验载体)+ ConnectX-3/5/6 atomic 行为差异
🛠️ 设计空间速查表
锁热点应对策略
| 策略 | 代表系统 | 假设 | 局限 |
|---|---|---|---|
| MN-only(基线) | FORD / Motor / CREST | 网络快、atomic IOPS 够用 | 工作负载一热就触顶 |
| 数据迁移 | MorphoSys / Lion 类 | 数据可被搬移 | DM 架构下违反 disaggregation 原则 |
| Routing-only | CREST 路由扩展 | 把热点请求集中到同一 CN | 不减 atomic 总量 |
| Static owner partition | LOTUS | critical field 已知且稳定 | 漂移工作负载退化 |
| Dynamic owner placement ⭐ | AURA | 无需先验、在线学习 | 实现复杂度最高 |
AURA 关键模块
| 模块 | 职责 | 章节 |
|---|---|---|
| TraceCollector | 收集事务访问轨迹 | 第 5 章 |
| AccessGraphProfiler | 在线建权重图 | 第 5 章 |
| LockCohortGenerator | 决定 cohort 边界(merge/split) | 第 5 章 |
| OwnershipPlanner | 决定每个 cohort 的 owner CN | 第 5 章 |
| TransferController | 执行迁移 4 阶段协议 | 第 6 章 |
| OwnerMapPublisher | 发布 epoch + OwnerMap 快照 | 第 6 章 |
| AffinityRouter | 客户端按 OwnerMap 路由事务 | 第 4 章 |
| TxnExecutor | 在 owner CN 上执行事务 | 第 4 章 |
| OwnerLockTable | CN 本地锁表 | 第 4 章 |
| OwnerRpc | CN 间锁请求 / 跨 cohort 协调 | 第 4 章 |
| FallbackLock | 回退到 MN atomic CAS | 第 6 章 |
| AuraStats | 监控指标(NIC 计数、abort 率) | 第 7 章 |
三种状态与不变式
| 状态 | 含义 | 进入条件 | 退出条件 |
|---|---|---|---|
| OWNED | 某 CN 唯一持有该 cohort | 迁移成功 | 触发 split / merge / migrate |
| TRANSFERRING | 正在迁移中,请求被 drain | 迁移开始 | 迁移完成 / 超时 |
| FALLBACK | 退回 MN atomic 路径 | owner 失败 / 冷数据 | 工作负载再次变热 |
| 不变式 | 内容 |
|---|---|
| I1 | 任一时刻同一 cohort 的权威只在一处 |
| I2 | epoch 单调递增 |
| I3 | 迁移期间所有未完事务必须 drain 或 abort |
| I4 | 数据 commit 路径不依赖锁所有权位置 |
🧭 新人破局指南
学习路径(推荐 4-6 周)
第 1 周:立题与基础
- 读完第 1 章 + 第 2 章
- 在 APT 集群跑
ib_atomic_bw实测 ConnectX-3 atomic 上限 - 在 CloudLab c6525 跑同样测试,对比 ConnectX-6 数字
- 目标:能用一句话说清”为什么 DM 事务必须改”
第 2 周:相关工作 + AURA 骨架
- 读 FORD / Motor / LOTUS 三篇 paper(精读 commit 路径与锁路径)
- 读完第 3 章和第 4 章
- 默画 AURA 12 模块协同图
- 目标:能徒手画出 AURA 与 LOTUS 的 Δ 表
第 3-4 周:AURA 核心设计
- 读完第 5 / 6 / 7 章
- 在草稿上把 freeze-drain-handoff-publish 的 4 阶段时序写出来
- 推演两个 corner case:(a) 迁移中 owner CN 挂;(b) 跨 cohort 事务遇上 split
- 目标:能向人复现 AURA 论文 §3 的所有图
第 5 周:实验方法论
- 读第 8 章
- 把模块十三第 4 章的 baseline 拿出来对照 AURA paper 实验设计
- 自己写一个 bootstrap CI 脚本(参考 PROGRESS.md 的工程笔记)
- 目标:能独立设计一组对 AURA 不利的实验(critic 视角)
第 6 周:动手复现
- 第 9 章实战
- 在 CloudLab d6515 / Utah c6525 上跑通一组数据点
- 把数据填进 paper 的 §6 模板
- 目标:拿到一个可写进 paper 的 figure
三个高频踩坑
- 把”锁提到 CN”等同于 LOTUS:LOTUS 是静态 + 应用先验,AURA 是动态 + 在线学习。两者方法论上是代差,不是性能增量。看到 paper 里有人混淆,第一时间纠正。
- 以为 cohort 必须连续:cohort 是 key_group 的任意子集,不要求 key 在物理空间相邻。这是 AURA 在 TPC-C 里能 cross-table 聚簇的前提(NewOrder 跨 7 张表但都共享 wid)。第 4 章会展开。
- 把闭环窗口当成”越短越好”:5ms 是抖动 / 反应速度 / NIC counter 噪声 / 迁移成本平衡的结果,不是越短越好。第 7 章会用频谱分析说清楚。
核心思维:动态锁所有权 = 在线物理设计
| 优化 | 牺牲 | 换取 |
|---|---|---|
| 静态 owner(LOTUS) | 应用先验、漂移退化 | 实现简单、单次部署 |
| 动态 cohort 划分(AURA) | 实现复杂度 | 工作负载漂移自适应 |
| 闭环 5ms 窗口 | 决策抖动风险 | 跟随热点漂移 |
| epoch + drain 迁移 | 短暂 stall | 不丢一致性 |
| Fallback to MN | 局部低效 | 故障安全 + 渐进部署 |
🌟 理解了这张表,就掌握了本模块核心思维:没有”零代价的动态”,只有 trade-off 选择。AURA 的贡献不是”更快”,而是”在更弱假设下仍然可行”。
📚 参考资料
综述与背景
- The Datacenter as a Computer (Barroso et al., 3rd ed., 2018) —— Warehouse-scale computing 奠基书
- A Survey on Disaggregated Memory (Wang et al., 2023) —— 分离式内存早期综述
关键论文(DM 事务谱系)
- FaRM (Dragojević et al., NSDI’14) —— 首篇系统性 RDMA OCC:USENIX 链接
- FORD (Zhang et al., FAST’22) —— 单版本 DM 事务:USENIX 链接
- Motor (Wu et al., OSDI’24) —— MVCC + 一致版本表:USENIX 链接
- LOTUS (Liu et al., arXiv’25) —— 静态锁分离 + 100ms 反应再均衡(首次把锁提到 CN)
- CREST (Anonymous, ASPLOS’26) —— 开源实验框架(本路线第 8/9 章实战载体)
- AURA (本路线主轴, 2026) —— 动态锁所有权 + 闭环控制 + 在线 cohort 学习
关键论文(参照与对比)
- MorphoSys (Lemur et al., VLDB’21) —— 数据物理设计在线学习的代表
- Lion (Yan et al., 2024) —— 访问图驱动 partition 重排
- DrTM+H (Wei et al., OSDI’18) —— Hybrid verbs 调度
- Pond (Li et al., ASPLOS’23) —— Microsoft 云端 CXL 1.1 实测
工业系统与代码
- CREST:本路线第 8/9 章实战载体(开源 RDMA 事务框架)
- Mellanox OFED 4.9:ConnectX-3 兼容最后一版(APT 集群必装)
- rdma-core:Ubuntu 22.04 inbox 驱动(ConnectX-5+ 可用)
实战环境
- CloudLab:cloudlab.us —— c6525-25g(ConnectX-6 Dx)/ d6515 是主战场
- APT cluster (Utah):c6220 + ConnectX-3 56Gb IB —— LOTUS 同硬件复现 + 跨硬件对照
- perftest:
ib_atomic_bw/ib_read_bw是测 atomic IOPS 物理上限的标准工具