第 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 拓扑?
简短答案是:
不能唯一反演。但这不代表端侧探测没用。它可以帮助你得到:
行为亲和;
异常 pair;
方向性慢;
节点边际异常;
共享瓶颈候选;
容量下界;
需要网络组验证的 ground truth 请求;学完你要能回答:
- 64 节点为什么有 2016 个 pair?
- perfect matching 为什么能用约 63 轮覆盖所有 pair?
- pair matrix 的热力图能说明什么,不能说明什么?
- 什么是行为拓扑?它和物理拓扑有什么区别?
- shared bottleneck test 怎么设计正负对照?
- 为什么对称 Clos + ECMP + 四 rail 会让物理拓扑不可辨识?
- PLink、SIMON、R-Pingmesh、C4 这些阅读应该吸收什么?
本周核心原则:
端侧观测可以提出行为假设;
物理命名必须依赖 ground truth。1. Pair matrix:从两两测量开始
1.1 pair 是什么
如果有 64 个节点,任意两个节点之间可以形成一个 pair:
node i ↔ node j无向 pair 数是:
64 × 63 / 2 = 2016如果区分方向,则有向 pair 数是:
64 × 63 = 40321.2 matrix 是什么
可以做一个 64×64 矩阵:
M[i][j] = node i → node j 的带宽或 RTT对角线没有意义或代表本机。
热力图会显示:
某些块高带宽;
某些块低 RTT;
某些行/列异常;
某些方向不对称;1.3 matrix 的诱惑
看到热力图有块结构时,很容易说:
这个 block 是一个 rack;
这个 block 是一个 leaf;
这些节点同 spine;但这是危险的。热力图是行为观测,不是物理标签。
2. Perfect matching:如何减少测量自干扰
2.1 为什么不能所有 pair 同时测
如果 2016 个 pair 同时跑,节点会同时参与很多流:
node0 同时和 node1,node2,...node63 通信这会把测量变成 incast/outcast 压力测试,而不是单 pair 基线。
2.2 每轮无冲突
perfect matching 的想法是:每一轮每个节点只参与一个 pair。
64 个节点一轮最多测:
64 / 2 = 32 pair总 pair:
2016需要轮数:
2016 / 32 = 63所以 63 轮可以覆盖所有无向 pair。
2.3 小 case:8 个节点怎么排 7 轮
8 个节点:
0 1 2 3 4 5 6 7一轮 4 个 pair。总 pair:
8 × 7 / 2 = 28需要 7 轮。
示意:
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
...核心不是记算法,而是理解:
避免一个节点在同一轮被多个 pair 争用。2.4 perfect matching 不能消除什么
它不能消除:
不同 pair 共享上行;
ECMP 碰撞;
背景流量;
交换机 shared buffer;
时间漂移;
rail/QP 映射差异;所以它减少自干扰,但不是物理隔离。
3. 行为拓扑 vs 物理拓扑
3.1 行为拓扑
行为拓扑来自测量:
A-B 带宽高;
C-D RTT 低;
E-F 偶发慢;
某组节点互相表现相近;
某些 pair 被干扰时一起下降;它回答:
这些端点在当前 workload 和时间窗下表现如何?3.2 物理拓扑
物理拓扑来自配线和设备:
host17 xscale_0 → switch leaf-a port 21
leaf-a uplink3 → spine-b port 7它回答:
packet 实际可能经过哪些设备和端口?3.3 逻辑拓扑
逻辑拓扑来自控制面:
IP subnet;
route;
Kubernetes label;
CNI annotation;
rail 名称;它回答:
系统如何命名和组织网络?3.4 三者不能互相替代
行为相近 ≠ 物理同 leaf
同子网 ≠ 物理同 rack
物理同 leaf ≠ 当前行为一定快Muxi 当前的问题正是:行为数据不少,但物理锚点不足。
4. 为什么 2016 pair 矩阵不能唯一反演物理拓扑
Muxi 拓扑事实报告给出了核心原因,这里展开讲。
4.1 ECMP 多路径
同一个 pair 的 packet 可能因为 QP、UDP port、hash seed、路径状态走不同 ECMP path。
所以:
A→B 这次慢不一定代表:
A 和 B 之间某条固定物理链路慢。它可能只是这次 hash 到拥塞 path。
4.2 对称 Clos 缺少指纹
Clos 网络里很多路径结构相同:
leafA → spine1 → leafB
leafA → spine2 → leafB如果没有拥塞,它们 RTT/带宽可能几乎一样。
行为上相同,不代表物理上同一条路径。
4.3 四 rail 并行
Muxi 每节点 4 rail。一个 matrix 单元可能是:
xscale_0 行为
xscale_1 行为
xscale_2 行为
xscale_3 行为
通信库 rail 选择
QP 分布合成后的结果。
所以一个 cell 不是单条物理边。
4.4 缺直连锚点
如果没有:
host rail → switch port
LLDP
配线表
per-port bytes你就无法把行为边对齐到物理设备。
4.5 复测恢复
Muxi 原始矩阵有慢 pair,但最差 pair 复测恢复。
这说明:
原始慢边更像间歇 stall / 背景 / hash / queue,而不是稳定物理坏边。如果慢边不稳定,就更不能拿它命名物理拓扑。
5. Shared bottleneck test:从相关性走向干预证据
5.1 相关性不够
如果看到:
A-B 慢;
C-D 也慢;这只是相关性。
可能原因:
共享瓶颈;
同一时间背景流量;
同一轮测量噪声;
共同使用某个 rail;
通信库同步;5.2 干预实验
目标 pair:
A → B干扰 pair:
C → D负对照:
E → F实验:
1. 单跑 A→B
2. A→B + C→D 同跑
3. A→B + E→F 同跑
4. 随机顺序重复如果只有 C→D 让 A→B 变慢,支持共享瓶颈假设。
5.3 仍不能直接命名物理链路
即使 C→D 干扰 A→B,也只能说:
它们可能共享某种资源。共享资源可能是:
交换机 uplink;
ECMP path;
egress queue;
shared buffer;
PFC priority;
接收端 rail;
通信库/RNIC 资源;要命名物理链路,需要网络 counter。
6. 聚类:能用,但要防止过度解释
6.1 聚类能做什么
对 pair matrix 做聚类,可以发现:
行为相似的节点组;
可能的亲和组;
异常节点;
时间稳定或不稳定的结构;6.2 聚类不能做什么
聚类不能自动告诉你:
这个 cluster 是 rack;
这个 cluster 是 leaf;
这个 cut 是 spine;除非有 ground truth 对齐。
6.3 稳定性检查
一个 cluster 要有意义,至少要看:
换时间是否稳定;
换消息大小是否稳定;
换 rail 是否稳定;
换方向是否稳定;
复测是否稳定;如果换一次就变,说明它更像瞬时行为。
7. 和 Muxi W2 的关系
Muxi W2 做了:
inventory;
2016 pair matrix;
异常 pair 复测;结果大致是:
静态 inventory 一致;
原始矩阵有极慢 pair;
最差 pair 正反复测恢复;
无稳定双向慢;
无稳定方向性慢;
节点边际异常不明显;
无稳定物理拓扑聚类;所以它支持:
固定坏节点/固定坏 pair 不是优先根因;
端点行为存在间歇 stall;
pair matrix 可用于行为证据和反证;它不能证明:
没有 fabric 问题;
没有 ECMP/PFC/ECN;
具体 leaf/spine 拓扑;
物理超分比;8. 推荐阅读提炼
8.1 PLink / ProbeEmbed
一句话
PLink 用端到端探测发现网络亲和关系,并把亲和关系用于 collective placement / 分层聚合。
抓哪个问题
端点探测如何指导通信计划,而不是直接恢复物理图?关键知识点
- 端点测量可以形成亲和分组。
- 亲和分组可以提升 collective placement。
- 目标是性能优化,不一定是物理拓扑命名。
Muxi 迁移
Muxi 可以借鉴:
用 pair matrix 找行为亲和;
用亲和指导 rank placement 或实验分组;不能照搬为:
pair matrix 直接输出 leaf/spine。8.2 SIMON
一句话
SIMON 这类工作尝试用端到端测量推断共享瓶颈和路径性质。
抓哪个问题
什么样的观测能支持共享瓶颈?
什么情况下推断不唯一?Muxi 迁移
可以借鉴 shared bottleneck test 的思路,但 Muxi 有:
对称 Clos;
ECMP;
四 rail;
缺 switch counter;所以不可辨识性更强。
8.3 R-Pingmesh
一句话
R-Pingmesh 强调持续、随机化、大规模 RDMA 网络探测。
抓哪个问题
为什么一次性矩阵不如长期观测?Muxi 迁移
如果要长期做 fabric health,需要:
低开销探针;
随机化;
时间序列;
异常检测;
和训练窗口对齐;8.4 SuperBench
一句话
SuperBench 提供多层 benchmark 框架,不把最终训练吞吐当成唯一诊断信号。
抓哪个问题
为什么要把单机、P2P、incast、collective 分层测?Muxi 迁移
Muxi W0-W4 就是类似思路:先修基准,再逐层拆。
8.5 C4
一句话
C4 这类 collective-aware 工作强调通信模式和网络状态需要一起分析。
抓哪个问题
为什么 collective 异常不能只看网络,也不能只看通信库?Muxi 迁移
Muxi 的 w512 掉速需要同时看:
MCCL algorithm/channel;
rank mapping;
rail;
ECMP/QoS;9. 常见误判
- 热力图有块结构就命名 leaf/spine。
- full mesh 数据多,就一定比受控实验可靠。
- 单次最差 pair 就是坏链路。
- 聚类算法能弥补观测信号不可辨识。
- RTT 低就一定物理近。
- 干扰相关就等于共享同一物理链路。
- 复测恢复就说明没有网络问题。
- 没有稳定拓扑聚类就说明探测失败。
10. 本周任务设计
10.1 任务 A:手排 8 节点 perfect matching
目标:理解为什么 64 节点可以 63 轮覆盖。
输出:
8 节点 7 轮,每轮 4 pair;
每个 pair 只出现一次;
每轮每个节点只出现一次;10.2 任务 B:写 pair matrix 解释模板
模板:
观察到什么:
支持什么行为假设:
不能证明什么物理事实:
需要什么 ground truth:10.3 任务 C:设计 shared bottleneck test
要求包括:
目标 pair;
干扰 pair;
负对照;
随机顺序;
重复次数;
观测指标;
替代解释;
停止条件;10.4 任务 D:聚类稳定性检查
对任意聚类结果,问:
换时间稳定吗?
换消息大小稳定吗?
换方向稳定吗?
换 rail 稳定吗?
复测稳定吗?11. 和 agent 讨论的问题模板
11.1 pair matrix 分析
请分析这个 pair matrix,但禁止直接命名 leaf/spine。
请输出稳定块结构、方向性慢、节点边际异常、复测稳定性和行为分组。11.2 shared bottleneck 设计
请为目标 pair A→B 设计 shared bottleneck 干扰实验。
要求包含干扰 pair、负对照、随机化、重复次数、观测指标和替代解释。11.3 不可辨识性说明
请解释为什么在对称 Clos + ECMP + 四 rail + 缺 switch counter 条件下,端到端矩阵不能唯一反演物理拓扑。
用具体例子说明。12. 本周最小掌握清单
- 2016 pair 是 64 节点无向全矩阵。
- perfect matching 减少自干扰,但不消除共享路径。
- 行为拓扑不是物理拓扑。
- 热力图块结构不能自动命名 leaf/spine。
- shared bottleneck 需要干预和负对照。
- 复测稳定性比单次极值重要。
- ground truth 是物理命名的前提。
13. 本周结束时你应该能解释的一段话
如果有人问:
“我们已经有 2016 pair 带宽矩阵,为什么还不能反推出 Muxi 的 leaf/spine 拓扑?”
你应该能回答:
因为 pair 矩阵是端到端行为观测,不是物理链路观测。在对称 Clos 中,不同物理路径可能有相同 RTT/带宽;ECMP 会让同一 pair 的流量随 QP/UDP port/hash 状态走不同 path;Muxi 还有四 rail 并行,一个矩阵 cell 是多条端点/网络路径的合成;同时我们缺少 host rail 到 switch port 的直连锚点。原始最差 pair 复测恢复也说明慢边不稳定。因此矩阵最多支持行为分组、异常候选和共享瓶颈假设,不能直接命名 leaf/spine 或物理超分比。14. 进阶例子:两个不同物理拓扑产生同一个行为矩阵
14.1 拓扑 A
leaf1: A B
leaf2: C D
spine: S1 S2跨 leaf 都经过 S1/S2,ECMP 均匀,无拥塞。
测量结果可能是:
A-B: 24GB/s
C-D: 24GB/s
A-C: 23GB/s
A-D: 23GB/s
B-C: 23GB/s
B-D: 23GB/s14.2 拓扑 B
leaf1: A C
leaf2: B D
spine: S1 S2如果网络无拥塞、路径对称,测量也可能是:
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:
A.x0, A.x1, A.x2, A.x3一个 A→B 的结果可能是多个 rail 的合成。即使某个 rail 物理同 leaf,另一个 rail 可能不是。矩阵只给合成值,就更难反演。
14.4 结论
不可辨识不是“算法不够聪明”,而是观测信息本身不足。
15. 进阶例子:单次最差 pair 为什么危险
15.1 原始观测
假设矩阵里最差 pair:
node37 → node12 = 2GB/s
其他大多 20GB/s+直觉会说:
node37-node12 之间有坏链路。15.2 复测
重复 10 次:
run1: 22GB/s
run2: 24GB/s
run3: 23GB/s
...原始慢点消失。
15.3 正确解释
这说明原始慢点更可能是:
瞬时 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
可以看变异系数:
std / mean用于衡量稳定性。
16.4 节点边际
对矩阵计算每个节点作为 sender/receiver 的平均或分位数:
send_margin[i] = average M[i][*]
recv_margin[j] = average M[*][j]如果某个节点 send_margin/recv_margin 明显差,支持节点级候选。
16.5 方向性慢
如果:
A→B 慢
B→A 快可能是方向性路径、QoS、ECMP、接收端入口或测量问题。
如果双向都慢,稳定物理候选更强一点,但仍需复测和 ground truth。
17. 实验设计:从低风险到高风险
17.1 低风险
只读 inventory;
单 pair 小规模;
少量节点 RTT/带宽;
历史结果分析;17.2 中风险
16 节点 pair matrix;
64 节点 perfect matching;
少量干扰实验;
rail/QP 小矩阵;17.3 高风险
全矩阵并发;
持续 incast;
512 卡满负载;
修改 QoS/MTU/PFC/ECN;Muxi 规则里明确要求默认不起大作业、先 verify/probe。
17.4 停止条件
任何探针都应该有:
最大持续时间;
最大并发;
错误立即停;
结果目录;
回拉备份;18. 推荐阅读进一步拆解:怎么吸收 tomography 论文
18.1 不要把论文目标误读成你的目标
PLink 的目标偏优化 collective placement;SIMON 偏推断共享瓶颈;R-Pingmesh 偏持续监测;C4 偏 collective-aware 诊断。
它们不等于:
无交换机信息时恢复任意物理拓扑。18.2 读论文时固定问四个问题
输入是什么?
输出是什么?
依赖什么假设?
哪些假设在 Muxi 不满足?例如:
输入:端到端 RTT/带宽?交换机配置?镜像?
输出:亲和分组?共享瓶颈?物理路径?
假设:路径稳定?ECMP 可控?有 ground truth?
Muxi:ECMP/四 rail/缺 switch counter。18.3 迁移方式
正确迁移:
借鉴实验设计、分组、干扰、稳定性检查。错误迁移:
把论文中的可观测条件忽略,直接宣称能恢复物理图。19. 本周自测题:带答案方向
19.1 为什么 64 节点是 2016 pair?
答案方向:
无向 pair 数为 n(n-1)/2,64×63/2=2016。19.2 perfect matching 解决什么,不解决什么?
答案方向:
解决同一轮节点重复参与导致的端点自干扰;不解决共享上行、ECMP、背景流量和 shared buffer。19.3 行为拓扑和物理拓扑区别是什么?
答案方向:
行为拓扑来自端到端测量,描述当前 workload 下的表现;物理拓扑来自配线/设备/端口,描述真实连接。19.4 shared bottleneck test 为什么需要负对照?
答案方向:
没有负对照,无法区分目标 pair 变慢是干扰 pair 导致,还是时间/背景/测量噪声导致。19.5 为什么复测恢复会削弱固定坏 pair 假设?
答案方向:
稳定坏 pair 应该在相同条件下重复慢;复测恢复说明原始慢边更可能是间歇或瞬时行为。