跳到主要内容
自适应运行时物理设计 · MorphoSys → AURA

第4章:Benefit 函数与 A1 cost-coefficient tuner —— fixed / rule / sgd 三模式与 SGD 在线收敛

AURA v27 Benefit 函数 (atomic·S − rpc·C_rpc − move·C_move − load·C_load) 的推导、A1.a 规则式 tuner(三信号 × 5%/tick × 滞回带)、A1.b SGD tuner((B_pred − k·r)² loss + EMA-tuned k + 5%/step 上限)、SGD 权重在 drift workload 下的演化证据

Benefit Function Cost Coefficient SGD Tuner Rule Tuner Online Learning A1 Lever AURA v27

第 3 章给了你 5 个自适应维度的诚实分级。但 AURA 怎么真正决定”这个 cohort 该不该搬、搬到哪里”?答案是:用 Benefit 函数评分 + cost coefficient 权重在线学习。Benefit 函数是 v25 留下的——Benefit = atomic·S_atomic − rpc·C_rpc − move·C_move − load·C_load,4 项加权。v27 真正的新东西是 A1 lever:cost coefficient 不再是写死的常数,而是由两个 tuner(rule + SGD)在线驱动。本章把 Benefit 推导、A1.a 规则式 tuner 的三信号 × 5%/tick × 滞回带、A1.b SGD tuner 的 (B_pred − k·r)² loss 全部讲透——读完你能徒手画 SGD 权重演化图、解释为什么 SGD 是 +A1 alone 比 full_v27 更优的根本原因。

📑 目录


1. 为什么需要 cost coefficient tuner

v25/v26 的 Benefit 函数用 fixed weights——atomic_costrpc_costmove_costload_cost 4 个常数写死在配置里。这套写法在 workload 稳定时 完全可行——一次实验前 calibrate 一次就好,跑实验时权重不变。

问题是 v27 要 cover 的 workload 不稳定

  • CN scale-out:从 1 CN 到 8 CN,atomic ops 总量翻 8 倍,但 atomic 单位成本不变;RPC 总量随 cross-CN 比例升,单位成本随 fan-in 升。两者比值变了,但 fixed weights 没变。
  • Workload phase 漂移:hot key 从 district A 转到 district B,原本 100% local 的 cohort 现在全 cross-CN,RPC cost 项突然主导——但 fixed weights 仍在按”原来的 phase”打分。
  • Mode mix 漂移:读写比从 60/40 → 90/10,OCC validation 路径压力剧降,但 Benefit 仍按”写为主”调权。

🍎 直觉比喻:fixed weights 像家里空调的 fixed 温度设定。冬天舒服,夏天就太冷。需要”温控旋钮跟着外界温度自己转”——这就是 cost coefficient tuner。

A1 lever 的目标:让 4 个 cost coefficient 跟着 workload 在线 tune,不再是配置常数。

🧠 关键洞察(MorphoSys 启发):cost model 不是 “数据库工程师调一次性参数” 的对象——它应该是 first-class learning target,跟模型 weights 同等地位。MorphoSys (VLDB’20) 是第一个把这条原则系统化的工作,A1 的命名和方法论沿用了它。


2. Benefit 函数推导

Benefit 函数评估”把 cohort c 放到 CN i 这一决策”的收益:

Benefit(c, i) = atomic_cost · S_atomic(c, i)
              - rpc_cost    · C_rpc(c, i)
              - move_cost   · C_move(c, i)
              - load_cost   · C_load(i)

2.1 4 项的物理含义

符号物理含义测量方式
正项S_atomic(c, i)把 cohort c 放到 CN i 后节省的 atomic ops看 c 的 access pattern × CN i 当前 owner map
负项 1C_rpc(c, i)跨 CN RPC 成本c 的 cross-CN access 比例 × 单次 RPC 时间
负项 2C_move(c, i)从当前 owner 搬到 i 的迁移成本cohort 大小 × 迁移路径长度
负项 3C_load(i)CN i 当前 CPU / 任务负载CN i 的 worker queue 深度 + util

每项前面的 *_costcost coefficient——A1 tuner 调的就是这 4 个数。

2.2 代码位置

实现在 src/transaction/aura/OwnershipPlanner.cc::ComputeBenefit

double OwnershipPlanner::ComputeBenefit(const CohortId& c, int cn_id) const {
    double S_atomic = EstimateAtomicSavings(c, cn_id);
    double C_rpc    = EstimateRpcCost(c, cn_id);
    double C_move   = EstimateMoveCost(c, cn_id);
    double C_load   = cn_load_[cn_id];

    return weights_.atomic * S_atomic
         - weights_.rpc    * C_rpc
         - weights_.move   * C_move
         - weights_.load   * C_load;
}

Planner 每 100 ms 一个 tick——对每个 cohort × 每个 CN 算 Benefit,pick max。

2.3 4 项不是一次到位

历史上:

  • v25 早期只有 2 项:atomic·S − rpc·C_rpc(“放 CN i 省多少 atomic + 多少 RPC 代价”)
  • v25 加 C_move:发现 planner 频繁迁移 cohort 但 thrashing 严重 → 引入 move cost 让 planner “懒得搬”
  • v26 加 C_load:affinity binding 导致 dispatch skew,需要让 planner 考虑 CN 当前负载

每加一项都有”为什么必须加它”的实验证据——这是好 cost model 的特征:项数最小、每项独立

🌟 教学要点:如果你做新的 cost model,加一项前必须证明它独立于现有项——加上去 KOPS 或 abort rate 有可观测变化。否则就是过拟合,应该砍掉。


3. A1.a 规则式 tuner

A1.a 是基于workload 信号的规则式 tuner。三个信号驱动权重调整:

信号计算方式升高时调谁
信号 1:atomic 利用率MN-RNIC 当前 atomic ops/sec ÷ 物理上限atomic 利用率高 → 升 atomic_cost(更不愿走 MN-CAS)
信号 2:cross-CN RPC 比例cross-CN RPC count ÷ total RPC countRPC 比例高 → 升 rpc_cost(更愿绑 local)
信号 3:dispatch skewmax(CN load) ÷ avg(CN load)skew 高 → 升 load_cost(更愿均衡)

3.1 调整规则

每个 100 ms tick:

  • 若信号触发上调阈值(如 atomic 利用率 > 80%)→ 对应 cost coeff × 1.05(5% multiplicative)
  • 若信号触发下调阈值(如 atomic 利用率 < 30%)→ 对应 cost coeff × 0.95
  • 中间区间(30%-80%)→ 不动(滞回带)

滞回带(hysteresis band)的关键作用:防止信号在阈值附近反复抖动导致权重震荡。

3.2 硬上限/下限

// RuleTuner.cc
weights_.atomic = std::clamp(weights_.atomic, 0.1, 10.0);
weights_.rpc    = std::clamp(weights_.rpc,    0.1, 10.0);
weights_.move   = std::clamp(weights_.move,   0.5, 10.0);
weights_.load   = std::clamp(weights_.load,   0.05, 5.0);

clamp 范围是经验值——防止某个信号长时间触发把权重推到失控。

3.3 优势 / 劣势

优势

  • 完全可解释(每步调整有明确原因)
  • 调试友好(log 里能看出”哪个信号触发了哪次调整”)
  • 不需要训练数据(rule 一开就 work)

劣势

  • 只有 3 个信号——无法学到非线性映射
  • 阈值(80%/30% 等)需要人工 tune
  • 信号之间相互作用(如 atomic 利用率高 + RPC 比例高同时发生)的处理简陋

→ A1.b SGD tuner 就是为了解决”信号交互”这条劣势。

🍎 直觉比喻:A1.a 像家用空调——三个传感器(温度 / 湿度 / 时间)按规则调风量。A1.b 像中央空调系统——多个传感器+ML 模型预测下一步。


4. A1.b SGD tuner

A1.b 是 online stochastic gradient descent——把 Benefit 当成 “预测器”,commit_kops 当成 “ground truth”,学 4 个权重。

4.1 Loss 函数

L = (B_pred − k · committed_kops)²

其中:

  • B_pred:当前周期所有 active cohort 的 Benefit 总和(planner 的”预期收益”)
  • committed_kops:当前周期实际 commit 吞吐
  • k:标度因子(把 Benefit 抽象单位 → KOPS 单位),用 EMA 在线 tune

直觉:如果 planner 的 Benefit 总分高但实际 commit 低 → loss 大 → 权重该调(说明某项 cost coeff 错了)。

4.2 梯度更新

每 100 ms tick 一次:

∂L/∂atomic_cost = 2 · (B_pred − k · r) · S_atomic_sum
∂L/∂rpc_cost    = -2 · (B_pred − k · r) · C_rpc_sum
∂L/∂move_cost   = -2 · (B_pred − k · r) · C_move_sum
∂L/∂load_cost   = -2 · (B_pred − k · r) · C_load_sum

weights[i] -= η · ∂L/∂weights[i]   (η = 0.001)

每步权重最大变 ±5%(在梯度上加 clamp,防止单次大跳)。

4.3 EMA-tuned k

k 是 Benefit unit → KOPS unit 的标度因子。如果 k 写死,Benefit 跟 KOPS 量纲就对不上,loss 永远大。解法:

k_{t+1} = α · (committed_kops_t / B_pred_t) + (1 − α) · k_t   (α = 0.1)

committed_kops / B_pred 的比值用 EMA 平滑——k 跟着 workload 慢漂。

4.4 边界约束

跟 rule tuner 一样,4 个权重都 clamp 到 [0.05, 10.0],防止发散。

4.5 代码位置

src/transaction/aura/SgdTuner.cc。完整实现 ~200 LOC。

🧠 关键洞察:A1.b 不是”换 ML 而把 rule 砸了”——它是在 rule 的滞回带之上加一层 fine-grained 调整。“组合是必要的”——见 §5 三模式对照。


5. 三模式对照实验:fixed / rule / sgd

v27 paper §6.4 的核心数据,3 reps 取中位数:

tunerKOPS commitatomic/txnSGD 权重 @ t=20scommit_rate
fixed13.7012.1899.91%
rule13.7412.3499.89%
sgd13.9812.28atomic 0.485 / rpc 0.985 / move 2.667 / load 0.17999.93%

5.1 数据解读

  • SGD 是唯一持续正向(+2%)的 mover——13.98 vs fixed 13.70
  • rule 在 atomic/txn 上反而劣化(12.34 > 12.18)——为什么?rule 的滞回带在静态 workload 下让它”卡”在初始权重附近,反而比 fixed 还差
  • commit_rate 三模式都 ≥ 99.89%——任何一个 tuner 都没破 SI / 触发额外 abort

📊 数据 commit8f49ef6results/v27_a1b_*

5.2 SGD 权重的物理解读

t=20s 时 SGD 学到的 4 个权重:

  • atomic = 0.485 —— 低;说明在 4-CN TPC-C 上,atomic ops 不是瓶颈
  • rpc = 0.985 —— 中等;说明 cross-CN RPC 有一定成本但没到爆炸
  • move = 2.667 —— ;这是个有意思的发现:SGD 认为”搬 cohort 的代价很大”,倾向于”不搬”
  • load = 0.179 —— 低;说明 4-CN dispatch skew 不是主要问题

move = 2.667 是 SGD 的反直觉发现——人工调参时往往把 move cost 设得低,认为”反正能搬就搬”。SGD 发现”搬的代价比想象中大”。这是 paper §6.4 想要的”learned cost model 给出超出人类直觉的结论”证据。

教学重点:A1.b SGD 的卖点不是”它快 2%“——是”它告诉我们 move cost 比人想象的大 5 倍”。learned weight 是新 insight 的来源,不只是优化器。


6. Drift workload 下的 SGD 权重演化

静态 workload 下 SGD +2% 不算 headline 数据。真正的 headline 在 drift workload——SGD 权重跟着 phase 切换跳变

6.1 数据 + 图

数据来源:results/v27_drift_smoke_*/,drift_5sec 60s 实验。

待出图:weight evolution time-series(5 轨:4 个 weight + commit KOPS),横轴 0-60 s,每 100 ms 一个数据点。

预期形状(从日志 grep 出来):

weight │
  atomic  ────╱──────╲────╱──────╲────╱──   (随 atomic util 升降)
  rpc     ──────╲──────╱──────╲──────╱───   (随 cross-CN 比例)
  move    ──────────────────────────────    (慢变,cohort 拓扑稳)
  load    ─────╱──╲──────╱──╲────╱───╲──    (随 dispatch skew)
        0s                          60s

phase 切换瞬间(5s/10s/15s …)出现明显跳变。

6.2 为什么这张图是 §6.4 headline

paper §6.4 想说的是 “tuner 真的在 adapt,不是摆设”。静态数据 +2% 可以被 “你就是过拟合 4-CN” 攻击,drift 数据则反驳:

  • “如果 SGD 是过拟合的,phase 切换时权重不会跳”
  • “如果是 noise,跳变跟 phase 切换不会对齐”
  • “如果是 rule tuner 也能做的,那把 rule 的滞回带数据放一起对照”

📊 数据 commit159381a(drift 3-rep + Drift::Stop 修复)。

🌟 结论:§6.4 SGD 的 headline 不是 “+2%“,是 “phase 切换时权重对齐跳变” 这张时间序列图。

6.3 图怎么画

第 9 章 §5.3 给了从日志 grep SGD 权重的命令:

grep "self-tuned.*sgd" m_client.log | awk '{print $1, $5, $7, $9, $11}'

输出 5 列:timestamp / atomic / rpc / move / load。用 matplotlib 画 5 轨折线图,phase 切换点(每 5 s)画垂直虚线。


7. 为什么 full_v27 < +A1 alone:组合不是相加

§6.2 的 5-cell ablation 出现一个反常现象

cellKOPS
baseline (fixed/off/off)13.64
+A1 sgd13.94
+A2 affinity13.11
+A3 split13.59
full_v27 (A1 + A2 + A3)13.70

+A1 alone 13.94 > full_v27 13.70——加更多 lever 反而变差!

7.1 解释:lever 之间有相互作用

A2 affinity binding 把多个 cohort 聚到同一 owner CN —— 优点是减少 cross-CN RPC,缺点是 dispatch skew(CN0 拿 2× 流量)。

A1 SGD 看到 skew → 升 load_cost 试图均衡 → 但 A2 又把它绑回去 → 权重在 A2 影响下”分心”。

→ A2 给 A1 加了一个”它必须先补偿的扰动”,所以 full_v27 < +A1 alone。

7.2 这不是 bug

这是 复杂自适应系统的真实行为——levers 之间互相作用是普遍现象,不只是 v27。

如果删掉这条数据:paper 会显得”levers 互相加分”——不真实。 如果保留这条数据:paper 会显得”levers 互相干扰”——真实但需要解释。

v27 选保留 + 解释。解释的方式:

5-cell ablation 显示 +A1 单独 (13.94) > full_v27 (13.70)。这反映了 levers 之间的相互作用——A2 affinity binding 引入 dispatch skew,而 A1 SGD 必须在权重学习中补偿这个 skew。组合不是相加(composition is not additive)——adaptive 系统的 lever 协同设计是 future work(见 §8)。

7.3 启示

未来工作可以做:

  • Joint optimization——把 A1/A2/A3 当成单一搜索空间,不是独立 tune
  • Hierarchical tuning——A2/A3 先收敛,再用 A1 在收敛点附近微调
  • Predictive coordination——A4 reservoir 告诉 A2 “phase 要切了,先别绑”

MEMOIRABLE QUOTE“levers 不是简单加法。组合的最优解不在’每个 lever 自己的最优’之并集——这是 v27 的 honest finding。”

🧠 关键洞察:这个负向交互不是 bug,而是 “复杂自适应系统的真实行为”——评委如果挑战这条,反而是给 paper 加分的机会(“是的,我们承认 levers 互相干扰,我们做了 §8 future work 的协同设计接口”)。


✅ 自我检验清单

  • Benefit 4 项:能默写 4 项加权和 + 每项的物理含义 + 加项的历史顺序(atomic+rpc → +move → +load)
  • fixed 的问题:能说出 fixed weights 在 CN scale-out / phase / mode 三种 shift 下各自如何失败
  • A1.a vs A1.b:能对比规则式与 SGD 两种 tuner 在可解释性 / 信号交互处理 / 部署难度上的差异
  • SGD loss:能写出 (B_pred − k·r)² 并解释每个符号 + EMA-tuned k 为什么必要
  • 三模式数据:能引用 fixed 13.70 / rule 13.74 / sgd 13.98 + commit_rate 都 ≥ 99.89%
  • SGD move=2.667 的 insight:能解释为什么 “move cost 比人想象大 5 倍” 是 learned weight 的卖点
  • Drift 权重图:能说明 §6.4 headline 是 “权重跟 phase 切换对齐” 而非 “+2%”
  • 组合不相加:能解释 full_v27 < +A1 alone 的原因,并把它讲成 paper 加分项而不是减分项

📚 参考资料

概念入门

  • v27 paper outline §3.3 + §3.4 —— Benefit 与 tuner 的 source of truth
  • v27 paper outline §6.4 —— 三模式 ablation 数据

关键论文

  • MorphoSys (VLDB’20) —— cost model 作为 first-class learning target 的方法论起源
  • OtterTune (SIGMOD’17) —— DBMS 自动调参的端到端先驱
  • Bao (SIGMOD’21) —— learned query optimization 的现代版本
  • “On the Theory of Stochastic Approximation Methods” (Robbins & Monro, 1951) —— SGD 的理论根

行业讨论

  • 模块零《AI 系统性能工程方法论》—— 在线 vs 离线性能调优的方法论对照
  • 模块二十三《AURA 论文精讲》第6章-Owner规划与亲和路由 —— v25 时期 Benefit 公式(fixed weights)

框架文档(代码 anchor)

  • src/transaction/aura/OwnershipPlanner.cc::ComputeBenefit —— Benefit 函数实现
  • src/transaction/aura/SgdTuner.cc —— A1.b SGD tuner(~200 LOC)
  • src/transaction/aura/RuleTuner.cc —— A1.a 规则式 tuner
  • bench/aura/run_v27_a1b_smoke.sh —— 三模式对照实验脚本
  • results/v27_a1b_* —— §6.4 实验数据

📎 v25 对照视角:模块二十三-AURA 论文精讲 第6章-Owner规划与亲和路由 —— v25 时期 Benefit 公式相同,但 cost coefficient 是 fixed;v27 加入 A1.a + A1.b 让 4 个权重在线 tune