跳到主要内容

ISSUE-025: G5 仿真测试覆盖审查 — 过时测试 + 缺口

发现日期:2026-05-15 状态批次 A 已完成 (2026-05-15) / 批次 B 待启动 测试数:274 → 281 (+7 净增加,0 失败) 类型建模误差风险 (测试缺口未直接造成 bug,但回归保护薄弱) 影响范围:G5 仿真所有模块。已知部分 P0 缺口 (如 hash 周期共振,ISSUE-018) 已修复但无回归测试;CFS 一致性模式 / Relay 多跳透传 / 跨 LG 事务完成等无端到端覆盖,风险集中在大消息 / 多 chip / 多 LG 场景


问题现象

对 G5 仿真 5 个 spec 文件 (4369 行) 与 278 个 Rust 测试做对照审查:

  • 总功能点 ~160 个 (按可测试行为粒度)
  • ✅ 覆盖 96 (60%)
  • ⚠️ 部分覆盖 25 (16%)
  • ❌ 未覆盖 39 (24%)
  • 过时/弱效用测试 6 个

覆盖呈两端化:

  • 高覆盖 (70-85%): CDMA 指令体系,RC Link TX (含 DCQCN),collective 展开
  • 低覆盖 (<30%): CFS 模式,Switch DT-iSLIP 边界,A4S 跨 chip 路径,Relay 透传

调查过程

  • [审查] 对照 5 个 spec (G5-CDMA建模设计规格.md 1555 / G5-PAXICore事务层设计规格.md 309 / G5-RC-Link传输层设计规格.md 1287 / G5-Switch建模设计规格.md 731 / 互联通信G5仿真建模设计规格.md 487) 与 18 个测试文件
  • [对照] 按模块逐项标记 ✅ / ⚠️ / ❌
  • [验证] grep spec 章节 vs 测试名引用;抽样确认部分覆盖测试的实际断言强度
  • [评估] 按 spec 给出的工况数 / 边界条件 / 错误路径数,反推单项覆盖深度

根因分析

测试基础设施稳健 (Rust build 阻止已删字段测试存活),但测试设计有结构性失衡

  1. 集成测试占比仅 5% (15/278) — 多 chip / 多 LG / Switch 路径过度依赖少量集成测试;单一回归会掩盖多条路径
  2. 单元测试单点过密 — CDMA tests.rs 一个文件 59 个测试,而 Switch 只有 6 个;资源分配与 spec 复杂度不匹配
  3. 历史 ISSUE 修复缺回归 — ISSUE-018 (hash ITLV)、ISSUE-024 (qp_id 编码) 修复后没有补 regression,同类 bug 重新出现无保护
  4. 降级路径覆盖弱 — panic 类边界 ✅,但 NAK 风暴恢复 / DCQCN 持续 congested / Switch DT drop 后等运行时降级未覆盖
  5. Phase 2 计划项无 baselinewrite_done sideband, A4S 物理隔离 当前是 Phase 1 简化,Phase 2 切换时无对照数据

Spec / 文档依据

项目 Spec

docs/specs/G5仿真建模/ 共 5 文件 4369 行

审查方法:见 audit 报告 ([本会话产出,未独立成文])


解决方案

批次拆分

批次 A (低成本,高 ROI, ~1-2 小时):

  • 清理 / 重构 6 个过时弱效用测试
  • 补 P0#2 hash vs RR 周期共振 regression
  • 补 P0#4 CHS Send 不触发 CdmaLocalComplete 断言
  • 补 P1 qp_id {XPU_ID, BANK} 编码单元测试

批次 B (大工作,半天到一天):

  • P0#1 跨 LG 事务完成端到端断言
  • P0#3 CFS 一致性模式整套路径
  • P0#5 Relay 芯片透传 (多跳 Mesh/Ring)
  • P0#6 CreditReturn 免序列化路径
  • P1 其余 (Switch port_busy overlap / iSLIP 收敛性 / Fence 多线程隔离 / RX per-LG / RETRY_TIMEOUT 等)
  • 2-port Ring 标度问题 (2 个 #[ignore] 测试) — 见下文 "搁置回归测试"

搁置回归测试 (ignored,需在批次 B 调查)

批次 A audit 时发现 4 个 #[ignore] 测试,2 个是功能未实现的合理占位,2 个是真实回归被搁置,必须在批次 B 调查:

测试位置类型处理
test_ring_allreduce_num_chunkstree_allreduce.rs:194功能占位 (num_chunks > 1 未支持,msg_id 命名空间无 chunk bit)保留 ignore,等命名空间扩展
test_2port_with_chunksallreduce.rs:310同上保留 ignore
test_2port_allreduce_faster_than_1portmulti_chip/tests.rs:267疑似建模误差,注释 "2-port ring 历史上恒定 5233ns 不随 N 变化,thread_id 修复后暴露"批次 B 调查 — 2-port 比 1-port 快是 Ring 算法基本设计目标,仿真不满足意味着模型可能漏建某条加速路径
test_2port_latency_varies_with_nmulti_chip/tests.rs:284同上,"2-port 延迟应随 N 变化,不能恒定"批次 B 调查 — 修了 thread_id (ISSUE-024) 后暴露的标度问题,可能与跨 LG 事务完成 (P0#1) 或 hash ITLV 散布 (P0#2) 相关,一起排查

风险:这两个搁置测试在 cargo test完全不可见 (ignored 输出,容易被忽略). 当前仿真在 2-port 配置下产出的 latency 结果未经标度验证,用户配置 num_ports=2 跑 multi-chip AllReduce 可能拿到错误的 latency 数据。


关键缺口清单

P0 (6 项)

#缺口spec §
1跨 LG 事务完成保证RC Link §跨 LG 事务完成
2hash vs RR 周期共振回归RC Link §为什么 hash 优于 RR (历史 ISSUE-018)
3CFS 模式整套路径CDMA §CHS/CFS
4CHS Send 不触发 CdmaLocalCompleteCDMA §CHS 特殊处理
5Relay 芯片透传 (多跳无 Switch)顶层 §逐跳转发
6CreditReturn 免序列化RC Link §CreditReturn 免序列化

P1 (10 项)

缺口spec §
qp_id {XPU_ID, BANK} 编码RC Link §QP ID 编码 (历史 ISSUE-024)
iSLIP 只第一轮更新指针Switch §指针更新规则
Switch port_busy 不含 fwd_latSwitch §port_busy_until 更新
Fence 多线程隔离CDMA §仲裁机制
write_done sideband Phase 2 baselineCDMA §write_done sideband
RETRY_TIMEOUT_NS 超时重传RC Link §超时重传
iSLIP iterations=1/4 吞吐对比Switch §吞吐率 vs 迭代次数
DT α 灵敏度 (α=0.5/1.0/2.0/4.0)Switch §alpha 值的影响
RX per-LG EPSN 独立RC Link §RX 侧设计
A4S 物理隔离 + Phase 2 切换CDMA §msg 信号传输路径

过时测试 6 项

测试位置处理
test_cmd_queue_load_more_than_64_does_not_paniccdma/tests.rs重构:测软上限断言,不只测不 panic
test_write_done_sideband_yaml_loadingcdma/tests.rs删除:与 sideband 功能无关
test_expand_collectives_dispatchtree_allreduce.rs删除:与 expand.rs 32 个 dispatch 测试重复
test_2port_n2_falls_back_to_1portexpand.rs保留 (复查后):验证 wire bytes 公式 (N-1)/N × M,与 test_ring_2port_1port_fallback 验证 cmd 数量不同维度
test_n1_backward_compatpaxi.rs重命名:N=1 是合法配置,不是"兼容"
test_a4s_zero_line_rate_panicsa4s.rs保留 (input 验证,价值低但无害)

验证

批次 A 完成标准:

  • 6 个过时测试按 "处理" 列动作 (3 删 + 2 重构 + 1 保留)
  • 3 个 P0/P1 回归测试通过,故意回滚被测代码可让新测试失败
  • cargo test --release 总数维持或增加,0 失败

批次 B 完成标准:待批次 A 结束后单独 plan.