Skip to content

第 7 周:性能实验方法与端侧 tomography

对应原计划:plans/muxi-fabric-network-learning-plan.md 第 7 周。
相关工程:plans/muxi-fabric-probe.md 的 W2 端点亲和和行为拓扑。
相关报告:project/lab-workspace/reports/rounds/muxi_topology_facts_20260719_102558.md
本章定位:把前 6 周学到的通信库、RDMA、RoCE、ECMP、PFC/ECN 变成实验方法。重点不是“画热力图”,而是知道端侧矩阵能支持什么、不能证明什么。


0. 这一周到底学什么

这一周要回答 Muxi fabric 探测里最核心的问题之一:

如果我们没有交换机拓扑和 counter,只能从端点跑 RTT/带宽/pair matrix,能不能反推出物理 leaf/spine 拓扑?

简短答案是:

text
不能唯一反演。

但这不代表端侧探测没用。它可以帮助你得到:

text
行为亲和;
异常 pair;
方向性慢;
节点边际异常;
共享瓶颈候选;
容量下界;
需要网络组验证的 ground truth 请求;

学完你要能回答:

  • 64 节点为什么有 2016 个 pair?
  • perfect matching 为什么能用约 63 轮覆盖所有 pair?
  • pair matrix 的热力图能说明什么,不能说明什么?
  • 什么是行为拓扑?它和物理拓扑有什么区别?
  • shared bottleneck test 怎么设计正负对照?
  • 为什么对称 Clos + ECMP + 四 rail 会让物理拓扑不可辨识?
  • PLink、SIMON、R-Pingmesh、C4 这些阅读应该吸收什么?

本周核心原则:

text
端侧观测可以提出行为假设;
物理命名必须依赖 ground truth。

1. Pair matrix:从两两测量开始

1.1 pair 是什么

如果有 64 个节点,任意两个节点之间可以形成一个 pair:

text
node i ↔ node j

无向 pair 数是:

text
64 × 63 / 2 = 2016

如果区分方向,则有向 pair 数是:

text
64 × 63 = 4032

1.2 matrix 是什么

可以做一个 64×64 矩阵:

text
M[i][j] = node i → node j 的带宽或 RTT

对角线没有意义或代表本机。

热力图会显示:

text
某些块高带宽;
某些块低 RTT;
某些行/列异常;
某些方向不对称;

1.3 matrix 的诱惑

看到热力图有块结构时,很容易说:

text
这个 block 是一个 rack;
这个 block 是一个 leaf;
这些节点同 spine;

但这是危险的。热力图是行为观测,不是物理标签。


2. Perfect matching:如何减少测量自干扰

2.1 为什么不能所有 pair 同时测

如果 2016 个 pair 同时跑,节点会同时参与很多流:

text
node0 同时和 node1,node2,...node63 通信

这会把测量变成 incast/outcast 压力测试,而不是单 pair 基线。

2.2 每轮无冲突

perfect matching 的想法是:每一轮每个节点只参与一个 pair。

64 个节点一轮最多测:

text
64 / 2 = 32 pair

总 pair:

text
2016

需要轮数:

text
2016 / 32 = 63

所以 63 轮可以覆盖所有无向 pair。

2.3 小 case:8 个节点怎么排 7 轮

8 个节点:

text
0 1 2 3 4 5 6 7

一轮 4 个 pair。总 pair:

text
8 × 7 / 2 = 28

需要 7 轮。

示意:

text
round0: 0-7, 1-6, 2-5, 3-4
round1: 0-6, 7-5, 1-4, 2-3
round2: 0-5, 6-4, 7-3, 1-2
...

核心不是记算法,而是理解:

text
避免一个节点在同一轮被多个 pair 争用。

2.4 perfect matching 不能消除什么

它不能消除:

text
不同 pair 共享上行;
ECMP 碰撞;
背景流量;
交换机 shared buffer;
时间漂移;
rail/QP 映射差异;

所以它减少自干扰,但不是物理隔离。


3. 行为拓扑 vs 物理拓扑

3.1 行为拓扑

行为拓扑来自测量:

text
A-B 带宽高;
C-D RTT 低;
E-F 偶发慢;
某组节点互相表现相近;
某些 pair 被干扰时一起下降;

它回答:

text
这些端点在当前 workload 和时间窗下表现如何?

3.2 物理拓扑

物理拓扑来自配线和设备:

text
host17 xscale_0 → switch leaf-a port 21
leaf-a uplink3 → spine-b port 7

它回答:

text
packet 实际可能经过哪些设备和端口?

3.3 逻辑拓扑

逻辑拓扑来自控制面:

text
IP subnet;
route;
Kubernetes label;
CNI annotation;
rail 名称;

它回答:

text
系统如何命名和组织网络?

3.4 三者不能互相替代

text
行为相近 ≠ 物理同 leaf
同子网 ≠ 物理同 rack
物理同 leaf ≠ 当前行为一定快

Muxi 当前的问题正是:行为数据不少,但物理锚点不足。


4. 为什么 2016 pair 矩阵不能唯一反演物理拓扑

Muxi 拓扑事实报告给出了核心原因,这里展开讲。

4.1 ECMP 多路径

同一个 pair 的 packet 可能因为 QP、UDP port、hash seed、路径状态走不同 ECMP path。

所以:

text
A→B 这次慢

不一定代表:

text
A 和 B 之间某条固定物理链路慢。

它可能只是这次 hash 到拥塞 path。

4.2 对称 Clos 缺少指纹

Clos 网络里很多路径结构相同:

text
leafA → spine1 → leafB
leafA → spine2 → leafB

如果没有拥塞,它们 RTT/带宽可能几乎一样。

行为上相同,不代表物理上同一条路径。

4.3 四 rail 并行

Muxi 每节点 4 rail。一个 matrix 单元可能是:

text
xscale_0 行为
xscale_1 行为
xscale_2 行为
xscale_3 行为
通信库 rail 选择
QP 分布

合成后的结果。

所以一个 cell 不是单条物理边。

4.4 缺直连锚点

如果没有:

text
host rail → switch port
LLDP
配线表
per-port bytes

你就无法把行为边对齐到物理设备。

4.5 复测恢复

Muxi 原始矩阵有慢 pair,但最差 pair 复测恢复。

这说明:

text
原始慢边更像间歇 stall / 背景 / hash / queue,而不是稳定物理坏边。

如果慢边不稳定,就更不能拿它命名物理拓扑。


5. Shared bottleneck test:从相关性走向干预证据

5.1 相关性不够

如果看到:

text
A-B 慢;
C-D 也慢;

这只是相关性。

可能原因:

text
共享瓶颈;
同一时间背景流量;
同一轮测量噪声;
共同使用某个 rail;
通信库同步;

5.2 干预实验

目标 pair:

text
A → B

干扰 pair:

text
C → D

负对照:

text
E → F

实验:

text
1. 单跑 A→B
2. A→B + C→D 同跑
3. A→B + E→F 同跑
4. 随机顺序重复

如果只有 C→D 让 A→B 变慢,支持共享瓶颈假设。

5.3 仍不能直接命名物理链路

即使 C→D 干扰 A→B,也只能说:

text
它们可能共享某种资源。

共享资源可能是:

text
交换机 uplink;
ECMP path;
egress queue;
shared buffer;
PFC priority;
接收端 rail;
通信库/RNIC 资源;

要命名物理链路,需要网络 counter。


6. 聚类:能用,但要防止过度解释

6.1 聚类能做什么

对 pair matrix 做聚类,可以发现:

text
行为相似的节点组;
可能的亲和组;
异常节点;
时间稳定或不稳定的结构;

6.2 聚类不能做什么

聚类不能自动告诉你:

text
这个 cluster 是 rack;
这个 cluster 是 leaf;
这个 cut 是 spine;

除非有 ground truth 对齐。

6.3 稳定性检查

一个 cluster 要有意义,至少要看:

text
换时间是否稳定;
换消息大小是否稳定;
换 rail 是否稳定;
换方向是否稳定;
复测是否稳定;

如果换一次就变,说明它更像瞬时行为。


7. 和 Muxi W2 的关系

Muxi W2 做了:

text
inventory;
2016 pair matrix;
异常 pair 复测;

结果大致是:

text
静态 inventory 一致;
原始矩阵有极慢 pair;
最差 pair 正反复测恢复;
无稳定双向慢;
无稳定方向性慢;
节点边际异常不明显;
无稳定物理拓扑聚类;

所以它支持:

text
固定坏节点/固定坏 pair 不是优先根因;
端点行为存在间歇 stall;
pair matrix 可用于行为证据和反证;

它不能证明:

text
没有 fabric 问题;
没有 ECMP/PFC/ECN;
具体 leaf/spine 拓扑;
物理超分比;

8. 推荐阅读提炼

一句话

PLink 用端到端探测发现网络亲和关系,并把亲和关系用于 collective placement / 分层聚合。

抓哪个问题

text
端点探测如何指导通信计划,而不是直接恢复物理图?

关键知识点

  • 端点测量可以形成亲和分组。
  • 亲和分组可以提升 collective placement。
  • 目标是性能优化,不一定是物理拓扑命名。

Muxi 迁移

Muxi 可以借鉴:

text
用 pair matrix 找行为亲和;
用亲和指导 rank placement 或实验分组;

不能照搬为:

text
pair matrix 直接输出 leaf/spine。

8.2 SIMON

一句话

SIMON 这类工作尝试用端到端测量推断共享瓶颈和路径性质。

抓哪个问题

text
什么样的观测能支持共享瓶颈?
什么情况下推断不唯一?

Muxi 迁移

可以借鉴 shared bottleneck test 的思路,但 Muxi 有:

text
对称 Clos;
ECMP;
四 rail;
缺 switch counter;

所以不可辨识性更强。

8.3 R-Pingmesh

一句话

R-Pingmesh 强调持续、随机化、大规模 RDMA 网络探测。

抓哪个问题

text
为什么一次性矩阵不如长期观测?

Muxi 迁移

如果要长期做 fabric health,需要:

text
低开销探针;
随机化;
时间序列;
异常检测;
和训练窗口对齐;

8.4 SuperBench

一句话

SuperBench 提供多层 benchmark 框架,不把最终训练吞吐当成唯一诊断信号。

抓哪个问题

text
为什么要把单机、P2P、incast、collective 分层测?

Muxi 迁移

Muxi W0-W4 就是类似思路:先修基准,再逐层拆。

8.5 C4

一句话

C4 这类 collective-aware 工作强调通信模式和网络状态需要一起分析。

抓哪个问题

text
为什么 collective 异常不能只看网络,也不能只看通信库?

Muxi 迁移

Muxi 的 w512 掉速需要同时看:

text
MCCL algorithm/channel;
rank mapping;
rail;
ECMP/QoS;

9. 常见误判

  • 热力图有块结构就命名 leaf/spine。
  • full mesh 数据多,就一定比受控实验可靠。
  • 单次最差 pair 就是坏链路。
  • 聚类算法能弥补观测信号不可辨识。
  • RTT 低就一定物理近。
  • 干扰相关就等于共享同一物理链路。
  • 复测恢复就说明没有网络问题。
  • 没有稳定拓扑聚类就说明探测失败。

10. 本周任务设计

10.1 任务 A:手排 8 节点 perfect matching

目标:理解为什么 64 节点可以 63 轮覆盖。

输出:

text
8 节点 7 轮,每轮 4 pair;
每个 pair 只出现一次;
每轮每个节点只出现一次;

10.2 任务 B:写 pair matrix 解释模板

模板:

text
观察到什么:
支持什么行为假设:
不能证明什么物理事实:
需要什么 ground truth:

10.3 任务 C:设计 shared bottleneck test

要求包括:

text
目标 pair;
干扰 pair;
负对照;
随机顺序;
重复次数;
观测指标;
替代解释;
停止条件;

10.4 任务 D:聚类稳定性检查

对任意聚类结果,问:

text
换时间稳定吗?
换消息大小稳定吗?
换方向稳定吗?
换 rail 稳定吗?
复测稳定吗?

11. 和 agent 讨论的问题模板

11.1 pair matrix 分析

text
请分析这个 pair matrix,但禁止直接命名 leaf/spine。
请输出稳定块结构、方向性慢、节点边际异常、复测稳定性和行为分组。

11.2 shared bottleneck 设计

text
请为目标 pair A→B 设计 shared bottleneck 干扰实验。
要求包含干扰 pair、负对照、随机化、重复次数、观测指标和替代解释。

11.3 不可辨识性说明

text
请解释为什么在对称 Clos + ECMP + 四 rail + 缺 switch counter 条件下,端到端矩阵不能唯一反演物理拓扑。
用具体例子说明。

12. 本周最小掌握清单

  1. 2016 pair 是 64 节点无向全矩阵
  2. perfect matching 减少自干扰,但不消除共享路径
  3. 行为拓扑不是物理拓扑
  4. 热力图块结构不能自动命名 leaf/spine
  5. shared bottleneck 需要干预和负对照
  6. 复测稳定性比单次极值重要
  7. ground truth 是物理命名的前提

13. 本周结束时你应该能解释的一段话

如果有人问:

“我们已经有 2016 pair 带宽矩阵,为什么还不能反推出 Muxi 的 leaf/spine 拓扑?”

你应该能回答:

text
因为 pair 矩阵是端到端行为观测,不是物理链路观测。在对称 Clos 中,不同物理路径可能有相同 RTT/带宽;ECMP 会让同一 pair 的流量随 QP/UDP port/hash 状态走不同 path;Muxi 还有四 rail 并行,一个矩阵 cell 是多条端点/网络路径的合成;同时我们缺少 host rail 到 switch port 的直连锚点。原始最差 pair 复测恢复也说明慢边不稳定。因此矩阵最多支持行为分组、异常候选和共享瓶颈假设,不能直接命名 leaf/spine 或物理超分比。

14. 进阶例子:两个不同物理拓扑产生同一个行为矩阵

14.1 拓扑 A

text
leaf1: A B
leaf2: C D
spine: S1 S2

跨 leaf 都经过 S1/S2,ECMP 均匀,无拥塞。

测量结果可能是:

text
A-B: 24GB/s
C-D: 24GB/s
A-C: 23GB/s
A-D: 23GB/s
B-C: 23GB/s
B-D: 23GB/s

14.2 拓扑 B

text
leaf1: A C
leaf2: B D
spine: S1 S2

如果网络无拥塞、路径对称,测量也可能是:

text
A-B: 23GB/s
A-C: 24GB/s
A-D: 23GB/s
B-C: 23GB/s
B-D: 24GB/s
C-D: 23GB/s

如果测量噪声和 ECMP 足够大,这两个矩阵可能很难稳定区分。

14.3 加上四 rail 后更难

每个 host 有 4 rail:

text
A.x0, A.x1, A.x2, A.x3

一个 A→B 的结果可能是多个 rail 的合成。即使某个 rail 物理同 leaf,另一个 rail 可能不是。矩阵只给合成值,就更难反演。

14.4 结论

不可辨识不是“算法不够聪明”,而是观测信息本身不足。


15. 进阶例子:单次最差 pair 为什么危险

15.1 原始观测

假设矩阵里最差 pair:

text
node37 → node12 = 2GB/s
其他大多 20GB/s+

直觉会说:

text
node37-node12 之间有坏链路。

15.2 复测

重复 10 次:

text
run1: 22GB/s
run2: 24GB/s
run3: 23GB/s
...

原始慢点消失。

15.3 正确解释

这说明原始慢点更可能是:

text
瞬时 ECMP 碰撞;
背景流量;
queue 瞬时积压;
PFC/ECN 短时控制;
测量同步尾部;

而不是稳定坏 pair。

15.4 Muxi 对应

Muxi W2 最差 pair 正反复测恢复,所以最终报告高置信反证“固定坏节点/固定坏 pair”为优先根因。


16. 统计口径:不要只看平均

16.1 median / p50

p50 代表典型表现。

16.2 p10 / p90 / p99

尾部对同步 collective 很关键。一个 pair 大多数时候快,但偶尔极慢,可能仍影响训练。

16.3 coefficient of variation

可以看变异系数:

text
std / mean

用于衡量稳定性。

16.4 节点边际

对矩阵计算每个节点作为 sender/receiver 的平均或分位数:

text
send_margin[i] = average M[i][*]
recv_margin[j] = average M[*][j]

如果某个节点 send_margin/recv_margin 明显差,支持节点级候选。

16.5 方向性慢

如果:

text
A→B 慢
B→A 快

可能是方向性路径、QoS、ECMP、接收端入口或测量问题。

如果双向都慢,稳定物理候选更强一点,但仍需复测和 ground truth。


17. 实验设计:从低风险到高风险

17.1 低风险

text
只读 inventory;
单 pair 小规模;
少量节点 RTT/带宽;
历史结果分析;

17.2 中风险

text
16 节点 pair matrix;
64 节点 perfect matching;
少量干扰实验;
rail/QP 小矩阵;

17.3 高风险

text
全矩阵并发;
持续 incast;
512 卡满负载;
修改 QoS/MTU/PFC/ECN;

Muxi 规则里明确要求默认不起大作业、先 verify/probe。

17.4 停止条件

任何探针都应该有:

text
最大持续时间;
最大并发;
错误立即停;
结果目录;
回拉备份;

18. 推荐阅读进一步拆解:怎么吸收 tomography 论文

18.1 不要把论文目标误读成你的目标

PLink 的目标偏优化 collective placement;SIMON 偏推断共享瓶颈;R-Pingmesh 偏持续监测;C4 偏 collective-aware 诊断。

它们不等于:

text
无交换机信息时恢复任意物理拓扑。

18.2 读论文时固定问四个问题

text
输入是什么?
输出是什么?
依赖什么假设?
哪些假设在 Muxi 不满足?

例如:

text
输入:端到端 RTT/带宽?交换机配置?镜像?
输出:亲和分组?共享瓶颈?物理路径?
假设:路径稳定?ECMP 可控?有 ground truth?
Muxi:ECMP/四 rail/缺 switch counter。

18.3 迁移方式

正确迁移:

text
借鉴实验设计、分组、干扰、稳定性检查。

错误迁移:

text
把论文中的可观测条件忽略,直接宣称能恢复物理图。

19. 本周自测题:带答案方向

19.1 为什么 64 节点是 2016 pair?

答案方向:

text
无向 pair 数为 n(n-1)/2,64×63/2=2016。

19.2 perfect matching 解决什么,不解决什么?

答案方向:

text
解决同一轮节点重复参与导致的端点自干扰;不解决共享上行、ECMP、背景流量和 shared buffer。

19.3 行为拓扑和物理拓扑区别是什么?

答案方向:

text
行为拓扑来自端到端测量,描述当前 workload 下的表现;物理拓扑来自配线/设备/端口,描述真实连接。

19.4 shared bottleneck test 为什么需要负对照?

答案方向:

text
没有负对照,无法区分目标 pair 变慢是干扰 pair 导致,还是时间/背景/测量噪声导致。

19.5 为什么复测恢复会削弱固定坏 pair 假设?

答案方向:

text
稳定坏 pair 应该在相同条件下重复慢;复测恢复说明原始慢边更可能是间歇或瞬时行为。