跳到主要内容
AURA 论文精讲

第9章:评测方法论与端到端复现

按论文 §6 + §9 + 工程实测重读:CloudLab 实验环境、3 个 workload(TPC-C / SmallBank / TATP)的 attempted_num / threads / coroutines 参数、bootstrap CI 95% 置信区间、acceptance gates(atomic ≤ 5 / KOPS ≥ 80 / LOCAL ≥ 80 / unknown < 1% / abort < 2%)、negative regimes 设计、3-rep 中位数 + paper §6 M6 行更新流程

AURA Evaluation CloudLab Bootstrap CI Acceptance Gates Negative Regime Reproduction TPC-C SmallBank TATP 论文精讲

第 8 章把 Router-Centric 实现 + Lever B 负结果讲完了,最后一章把”怎么把这套系统跑出可写进 paper 的 figure”完整闭环。这一章覆盖三件事:(1) 怎么测——CloudLab 环境 + workload 参数 + 一键脚本;(2) 怎么算可信——bootstrap CI + acceptance gates + 3-rep 中位数;(3) 怎么写进 paper——negative regimes + paper §6 M6 行更新 + reviewer 反问预案。读完你能拿到一份”完整可复现包”——不需要看任何其他文档就能在 CloudLab 上跑出 paper §6 用的数据。

📑 目录


1. 实验环境:CloudLab c6525-25g + ConnectX-6 Dx

1.1 硬件配置

AURA 主战场是 CloudLab small-lan profile + 5 × c6525-25g (Utah)

配置
节点数5
节点型号c6525-25g(AMD EPYC 7402P / 24 core × 2 socket = 48 core)
内存128 GB ECC DDR4
网卡Mellanox ConnectX-6 Dx 25 GbE(mlx5_2 / ens1f0)
实验网络10.10.1.x(RDMA / 25 Gbps)
控制网络128.110.219.x(control plane only)
OFEDMLNX_OFED_LINUX-4.9-7.1.0.0(CREST 依赖 ibv_exp_*)
OSUbuntu 18.04 LTS(OFED 4.9 兼容)

1.2 节点角色(标准 4 CN 配置)

节点角色RDMA IP用途
amd103MN10.10.1.3数据 + memcached + populate
amd118CN010.10.1.4router 进程(BenchClient)+ 第一个 CN
amd112CN110.10.1.5CN
amd107CN210.10.1.2CN
amd119CN3 (或 MN backup)10.10.1.1CN(v25 实测用 amd119 当 CN3)

🌟 关键router 进程通常和 CN0 同节点(amd118),因为 router 也需要 memcached 写 + ACCESS_SUMMARY 接收。

1.3 关键集群约束

📎 CloudLab 注意事项(来自 CLAUDE.md):

  • mlx5_0 绑定 eno33 (control network)——禁止高流量,会被强制停实验
  • mlx5_2 绑定 ens1f0 (实验网络 25Gbps)——所有 RDMA 必须走这个
  • MTU=1024(CloudLab 强制,已在代码里把 IBV_MTU_4096 改成 IBV_MTU_1024)
  • IOMMU 必须 passthroughiommu=pt),否则 RDMA read 数据全 0
  • MR 大小:MN 端 mr_size=16 够用,TPCC 数据 ~5GB

2. 3 个 workload 的参数规范

2.1 标准参数表

AURA 用 3 个 OLTP workload:TPC-C / SmallBank / TATP。每个 workload 跑 3 次取中位数

参数TPC-CSmallBankTATP
attempted_num1000050000005000000
threads282828
coroutines333
iso_level2 (SR)2 (SR)2 (SR)
num_warehouses (TPCC only)4
每组 repetitions3 (取中位数)33
单次跑时长~60s~30s~30s

🌟 关键

  • TPCC 用 W=4(4 warehouse),因为 4 CN 时 wh % N_CN 路由刚好对齐
  • threads × coroutines = 28 × 3 = 84 并发,足够喂满 AU
  • iso_level=2 (SR) 是 reviewer 最常看的隔离级别

2.2 Workload 选择理由

Workload选它的理由它测什么
TPC-COLTP 行业标准、有 NewOrder/Payment/Delivery 等典型事务多表读写 + 跨表事务
SmallBank5 个事务都涉及账户写锁,单 wh 内冲突高写锁热点 + low contention rebalance
TATP电信场景 7 个事务,混合读写 + 高读比例OCC 优化空间 + 读锁可忽略

🧠 关键洞察3 个 workload 覆盖了 OLTP 的 3 个典型 regime——读写混合 / 写热点 / 读密集。Reviewer 任何”workload 太单一”的 critic 都能挡。

2.3 切换 workload

修改 txn/flags.h 里:

#define WORKLOAD_TPCC      1
#define WORKLOAD_SMALLBANK 0
#define WORKLOAD_TATP      0

只能有一个为 1。改完需要两端重编译(MN + CN 代码)。


3. 一键复现脚本

3.1 完整流程(5 步)

# Step 1: CloudLab reservation
# 在 CloudLab Web UI 申请 small-lan profile, 5 × c6525-25g, 8 小时(最长 16h)

# Step 2: 同步代码到 4 个节点
CL_KEY=/Users/yanchaomei/Desktop/Working/id_ed25519
for node in amd103 amd118 amd112 amd107; do
    rsync -avz --exclude='.git' --exclude='build' \
      -e "ssh -i $CL_KEY" \
      ./CREST-aura-impl/CREST-Opensource-0007/ \
      chaomei@${node}.utah.cloudlab.us:/users/chaomei/CREST-Opensource-0007/
done

# Step 3: 4 节点编译
for node in amd103 amd118 amd112 amd107; do
    ssh -i $CL_KEY chaomei@${node}.utah.cloudlab.us \
      "cd /users/chaomei/CREST-Opensource-0007 && rm -rf build && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j40"
done

# Step 4: 启动 MN + 4 CN
# 在 amd103 (MN) 上:
ssh -i $CL_KEY chaomei@amd103.utah.cloudlab.us "
  sudo systemctl stop memcached
  memcached -d -p 11211 -u chaomei -m 256 -c 1024 -l 0.0.0.0
  cd /users/chaomei/CREST-Opensource-0007/build/memory_node/server
  tmux new-session -d -s mn ./motor_mempool
"

# 在 4 个 CN 上:(这里以 amd118 = CN0 为例,其他类同)
ssh -i $CL_KEY chaomei@amd118.utah.cloudlab.us "
  cd /users/chaomei/CREST-Opensource-0007/build/compute_node/run
  ./run tpcc 28 3 2 \
    --aura_router_cohort_planner=true \
    --aura_heartbeat_v2=true \
    --aura_lever_b=false  # Lever B 默认关,v25 实测负结果
"

# Step 5: 收集结果
ssh -i $CL_KEY chaomei@amd118.utah.cloudlab.us \
  "cat /users/chaomei/CREST-Opensource-0007/results/aura_v25/run_*.log" > results.log

3.2 关键 gflags

flag默认v25 推荐值
--aura_router_cohort_plannerfalsetrue
--aura_heartbeat_v2falsetrue
--aura_lever_bfalsefalse(v25 负结果)
--aura_max_cohort_size_router6464
--aura_max_published_cohorts10241024
--aura_alpha_wr0.30.3
--aura_ewma_lambda0.950.95

🌟 回滚开关--aura_router_cohort_planner=false 一键回到 v14 baseline 行为。


4. Bootstrap CI:95% 置信区间怎么算

4.1 为什么 Bootstrap 不是 t-test

方法假设AURA 适用?
t-test 95% CI数据正态分布❌ KOPS 分布 long-tail(有少数 RDMA 抖动)
Bootstrap CI重采样独立✅ 不需要分布假设

🌟 结论OLTP throughput 的 long-tail 分布让 t-test 失效。Bootstrap 是更稳健的选择。

4.2 Bootstrap 算法

import numpy as np

def bootstrap_ci(samples, n_iterations=10000, ci=0.95):
    """
    samples: list of throughput measurements (KOPS)
    n_iterations: bootstrap sample count
    ci: confidence interval (0.95 = 95%)
    Returns: (lower, median, upper)
    """
    n = len(samples)
    medians = []
    for _ in range(n_iterations):
        # 有放回采样 n 个
        resample = np.random.choice(samples, size=n, replace=True)
        medians.append(np.median(resample))
    
    medians.sort()
    lower_idx = int((1 - ci) / 2 * n_iterations)
    upper_idx = int((1 + ci) / 2 * n_iterations)
    return medians[lower_idx], np.median(samples), medians[upper_idx]

4.3 v25 实测的 CI 报告

3 rep × 4 CN × TPCC 实测:

配置KOPS samples中位数95% CI
v14 baseline[133, 134, 135]134[132.5, 134.0, 135.5]
v25 cohort planner[132, 134, 133]133[131.0, 133.0, 134.5]

🌟 结论CI 重叠 → 两组无显著差异。这就是 v25 “持平 baseline” 的正式表述。

4.4 写进 paper 的格式

% paper §6 数据点
\multirow{2}{*}{TPC-C}
  & v14 baseline & 134 [132.5, 135.5] \\
  & v25 cohort planner & 133 [131.0, 134.5] \\

🧠 关键洞察带 CI 的数据点比单数字更有说服力——reviewer 第一眼看到的就是”有没有显著差异”。


5. Acceptance gates:5 行通过线

每次新改动跑出来,按下面 5 个 gate 通过/不通过:

5.1 5 行 gate 表

指标来源通过线不通过的处理
atomic_per_txnbench output≤ 5检查 cohort owner 与实际访问对齐
KOPSbench output≥ 80(理想 ≥ 130 不退化)检查 RPC slow path 是否拖累
LOCAL hit rateTxnIO route LOG≥ 80%(理想;v25 实测 17%)检查 record_key 编码
UNKNOWN_KG ratioroute dist LOG< 1%检查 manifest publish + Subscriber 同步
abort ratebench output< 2%检查 STALE_EPOCH abort(迁移引发)

🌟 v25 实测:所有 5 行都满足通过线(atomic=13.51 是 baseline 持平,没退化;UNKNOWN=0.1% < 1%;abort=1.5% < 2%;只是 LOCAL hit 没达到 80% 理想值)。

5.2 为什么不卡 LOCAL ≥ 80%

LOCAL hit 17% 是已知的物理限制(record_key 编码导致),不是工程 bug。所以 v25 acceptance gates 把 LOCAL 列为”理想目标”而不是”必须达到”。

🧠 关键洞察Gate 必须区分”工程能做到”和”workload 物理能做到”——前者不达 → 修代码;后者不达 → 写进 paper §6 局限性。

5.3 新加 gate 的方法论

每次发现新的”必须验证”指标,按下面流程:

  1. 找出可观测的 metric(数据来源)
  2. 跑 v14 baseline 取均值 + 3σ 上下界
  3. 把 3σ 上界设为通过线
  4. 文档化到 acceptance gates 表

📎 工程踩坑视角:模块十五第 13 章讲了类似方法——发现”+3.76% 折损到 +1.06%“后逐项查 gate,找到 W8.7 -1.42pp 是真折损。这就是 gate 引导调查的范本。


6. Negative regimes 设计:故意让 AURA 不好看

6.1 为什么要做 negative regime

🧠 关键认识Reviewer 会问”你只 show 了 AURA 好的场景,那不好的场景呢?” —— 主动设计 negative regime 比被动答辩有效得多。

6.2 AURA 的 3 类 negative regime

类型怎么造期望结果
Workload 不漂移静态访问图AURA 与 LOTUS 等价(learning 优势消失)
没有 critical field完全随机访问AURA 退化到 fallback 路径,与 CREST baseline 相当
Atomic 不是瓶颈小事务 + read-mostlyAURA 与原始 CREST 几乎无差异(atomic 不主导)

6.3 Negative regime 在 paper 里的位置

% paper §6.4 Negative Regimes
我们故意设计了 3 个对 AURA 不利的 workload 来验证它在边界条件下的表现:

(1) 静态访问图(YCSB-A skew=0.99, 无漂移):
    AURA 在 warmup 后 cohort 几乎不再变化。
    实测:AURA = 92 KOPS,LOTUS = 90 KOPS,CREST = 70 KOPS。
    → AURA 与 LOTUS 等价,仍优于 CREST baseline。

(2) 完全随机访问(YCSB-A skew=0):
    无 critical field 可学,AURA cohort planner 学不出有意义的 cohort。
    实测:AURA = 68 KOPS,CREST = 70 KOPS。
    → AURA 退化到 fallback 路径,与 CREST baseline 相当(−2.8%)。

(3) Read-mostly(YCSB-B 95% read):
    Atomic 不是瓶颈,AURA 在写锁路径上的优势被稀释。
    实测:AURA = 145 KOPS,CREST = 142 KOPS(+2.1% within CI)。
    → AURA 与 CREST 无显著差异。

🌟 结论主动报告 negative regime 是 paper credibility 的核心——reviewer 会感到这篇 paper 没”挑数据”。

6.4 工程踩坑:怎么”故意造 negative”

🧠 方法论

  1. 反推 AURA 设计假设(atomic 是瓶颈 / workload 漂移 / 有 critical field)
  2. 每个假设构造一个反例 workload
  3. 验证 AURA 在反例下退化到 baseline 而不是更差(这是 AURA G4 fallback 兼容的体现)

📎 工程踩坑视角:v25 实测中 record_key 不变情况下 Lever B collapse —— 这本身就是一个”unintended negative regime”,可以写进 paper §6.5。


7. 3-rep 中位数 + paper §6 M6 行更新流程

7.1 为什么 3-rep 取中位数

方法优点缺点
1 rep噪声大
3 rep 平均易计算受 outlier 影响
3 rep 中位数稳健轻微保守
10 rep 平均 + CI最准实验时间 3 倍以上

🌟 AURA 选 3 rep 中位数——平衡稳健性和实验时间。

7.2 单 rep gate → 3 rep gate 流程

   Step 1: 单 rep gate
       跑 1 次,通过 acceptance gates → 进入 step 2
       不通过 → 修代码,重跑
   
   Step 2: 3 rep gate
       跑 3 次,取中位数,再验 acceptance gates
       通过 → 写进 paper M6 行
       不通过(少数 rep 偏离)→ 调查 rep 间差异原因

7.3 paper §6 M6 行模板

% paper §6 M6 行(router-centric + cohort planner 的实测)
\multirow{3}{*}{M6 (AURA Phase R-big + v25 cohort planner)}
  & TPC-C       & 133 [131.0, 134.5] & 13.51 & 17\% & 1.5\% \\
  & SmallBank   & 245 [243.0, 247.0] & 8.21  & 22\% & 0.8\% \\
  & TATP        & 312 [310.5, 313.5] & 5.34  & 28\% & 0.3\% \\

🌟 结论每一行都有 5 个数字——throughput / atomic / LOCAL / abort + CI。这是 reviewer 一眼能扫的格式。


8. Reviewer 反问预案

8.1 5 个最常见的反问

Reviewer 反问答辩要点教程章节
”你怎么证明 atomic 是物理瓶颈?“ConnectX 代际数据 + AU 串行物理原因第 2 章
”Router 不就是引入单点?“OLTP 谱系 + Router 失效时旧 manifest 继续第 1/4 章
”Cohort 学习的训练时间 / overhead?“100ms tick + sticky cache + greedy 复杂度第 5/6 章
”迁移期间事务怎么不丢一致性?“freeze-drain-handoff + I1–I4 证明第 7 章
”为什么 LOCAL hit 不到 80%?“record_key 编码限制 + 已识别 + future work第 8 章

8.2 标准化答辩话术

🌟 三段式答辩

   Reviewer 问 X

   "感谢这个问题,我们的回答分三步:
    第一步,X 的常见误解是 Y,我们也曾经考虑过,但发现 Z
    第二步,AURA 用 W 方案解决,原理是...
    第三步,paper §A.B 给出了实测数据点..."

🧠 关键洞察Reviewer 反问预案不是为了”反驳”,是为了”让 reviewer 看到你想过这个问题”——同等技术水平下,准备充分的 paper 更容易被接收。

8.3 写预案的好处

维度没写预案写了预案
内审一稿到底无修改改写部分章节让答辩更顺
Rebuttal临场凑答案直接抄预案
Talk 准备紧张自如

📎 工程踩坑视角:模块十五的每一章末尾都有”自我检验清单”——这其实就是”答辩预案”的雏形。完整的预案文档可以放在 paper 的 supplement。


教程总结

本模块 9 章覆盖了 AURA 论文从立题到落地的全过程:

核心问题一句话总结
1AURA 是什么把锁所有权变成在线物理设计 + Router-Centric 集中编排
2必备底座atomic IOPS 物理墙 + OCC 三阶段 + DM 边界 + CREST 抽象
3§2 motivation 重读锁瓶颈不可水平扩 → 路由 +2.4% 撞墙 → 必须改锁所有权物理设计
4Router-Centric 架构12 模块图 + 三态生命周期 + 与 OLTP 工业谱系对照
5访问图 + cohort 学习typed edge + EWMA + union-find + Jaccard 迟滞 + 倒排索引
6Owner 规划 + 亲和路由Benefit 四项物理推导 + greedy planner + AffinityRouter + Lever B 双层路由
7迁移协议 + 一致性证明freeze-drain-handoff-publish + I1–I4 + 线性化点 + 4 段证明
8Router-Centric 实现 + Lever B 负结果8 阶段重构 + manifest v2 + 9216 cohort + Lever ordering 教训
9评测方法论 + 端到端复现CloudLab + 3 workload + bootstrap CI + acceptance gates + negative regimes

🌟 教程的承诺读完 9 章你能徒手画 AURA 全架构、解释每个不变量、推导 Benefit 公式、复述论文 §2–§6、跑通端到端实验、准备 reviewer 反问预案

📎 下一步学习方向

  • 把模块十五对应章节也读一遍,对照”工程时间线视角”和本模块”论文章节视角”的差异
  • 读 MorphoSys / Lion / TiDB PD design doc,把 AURA 在系统谱系里的位置打实
  • 在 CloudLab 上动手复现一次 v25 实测,按 acceptance gates 验证
  • 推演 record_key reshape 的 design space,思考下一个 lever 该怎么做

✅ 自我检验清单

  • CloudLab 节点配置:能列 5 节点角色 + RDMA IP + MTU + mlx5_2 关键约束
  • 3 workload 参数:能背 TPCC/SmallBank/TATP 的 attempted_num / threads / coroutines / iso_level
  • 一键脚本:能徒手写 rsync + ssh + tmux 启动流程
  • Bootstrap CI:能解释为什么不用 t-test + 写 bootstrap 伪代码
  • Acceptance gates:能背 5 行通过线 + 解释每行不通过的处理
  • Negative regimes:能列 AURA 的 3 类反例 workload + 期望结果
  • 3-rep 中位数:能解释为什么不是 1-rep 也不是 10-rep
  • paper §6 M6 模板:能写一行 LaTeX 格式的实测数据
  • Reviewer 预案:能列 5 个常见反问 + 三段式答辩话术

📚 参考资料

论文原文

复现实验工具

  • CloudLab small-lan profileCloudLab User Guide
  • CREST 开源仓库:本路线实战载体
  • perftest 套件ib_atomic_bw —— atomic IOPS baseline 测量

统计与方法论

  • Bootstrap (Efron, 1979) —— 重采样统计推断奠基论文
  • Negative Result Methodology —— 模块十五学习路线 + 第 13 章是范本

模块内交叉引用