返回案例库

精选案例 · 工程接入与部署 / 数据处理与可视化

HSAgent 服务器集群 MCP 工具包实践

标题由系统整理

作者: PB23030756

原题:PB23030756 投稿 · AI 辅助编程案例

刘奕康分享了用 Rust 从零搭建可插拔协议网络模拟器(strack-sim)的 AI 辅助编程体验。项目支持 STrack 和 SimpleTCP 协议,总计约 3000+ 行源码,26 个测试通过。…

案例速读

该案例详细记录了 AI 在大型 Rust 网络模拟器开发中的多角色参与:架构分析、模式代码生成、复杂 bug 定位(死锁、全局 PID 冲突)以及协议实现辅助。具体实验数据(Incast 场景 FCT 改善 13%)和经验总结(AI 擅长与不擅长的边界)提供了可操作的方法论,适合作为 AI 辅助编程实战的优质参考。 建议从 「PB23030756 投稿 · AI 辅助编程案例」、「一、项目简介」、「架构亮点:可插拔协议抽象」、「四阶段开发」 进入正文,先确认真实任务和模型辅助过程。

  • 重点看 AI 在调试阶段定位死锁、全局 ID 冲突等棘手问题的方法可复用。、AI 生成模式化代码(拓扑索引、测试用例)后人工 review 的高效协作模式。、架构决策时用 AI 分析不同方案优缺点,避免踩坑的实践。。结合 工程接入与部署 / 数据处理与可视化 / AI 辅助编程 / Rust 和「AI 辅助编程的学习者、Rust 语言开发者、网络协议研究者」,它更适合作为任务检索后的精读材料。
  • 正文目录和原始材料仍然是判断依据;导读只帮助你更快定位阅读重点。
首读入口
一、项目简介
读者
AI 辅助编程的学习者、Rust 语言开发者、网络协议研究者
复用
AI 在调试阶段定位死锁、全局 ID 冲突等棘手问题的方法可复用。
结构
12 个目录入口

原文内容

PB23030756 投稿 · AI 辅助编程案例

姓名: 刘奕康 学号: PB23030756 项目: strack-sim —— Rust 多路径 RDMA 网络模拟器


一、项目简介

这是一个用 Rust 从零搭建的可插拔协议网络模拟器,核心定位是支撑 AI/ML 集群网络中多路径 RDMA 传输协议的研究。

架构亮点:可插拔协议抽象

项目并非 STrack 专属。底层定义了通用的 Protocol trait,目前已有两套独立的协议实现:

协议实现 核心特性 用途
STrack Packet Spraying + 路径黑名单 + SACK Bitmap + 选择性重传 复现 NSDI’24 方案
SimpleTCP 单路径 + 慢启动/Congestion Avoidance + 快速重传 + RTO 验证 trait 通用性 + TCP 限制对比

如需新增协议(如 DCQCN、HPCC、Swift),只需实现 Protocol trait 即可接入完整仿真框架。

四阶段开发

阶段 内容 代码量
1️⃣ DES 引擎:EventQueue(BinaryHeap 最小堆)+ Simulator ~200 行
2️⃣ 物理层与拓扑:Packet / Link / Switch + Fat-Tree / Leaf-Spine ~500 行
3️⃣ 可插拔协议栈:Protocol trait + STrack + SimpleTCP + 拥塞控制 ~800 行
4️⃣ 流量生成与指标采集:Incast / AllReduce / AllToAll + 混合流量 + SimSummary ~600 行

总计源码约 3000+ 行(不含测试和示例),26 个测试全部通过。


二、AI 辅助编程体验

整个项目从零到完成,AI 在多个维度深度参与。

1. 架构设计:AI 作参谋,我拍板

项目初期我在两种架构间犹豫:基于 htsim 风格的 handler 注册模式 vs 集中式事件分发模式。

AI 帮我分析了两种方式的优劣:

  • Handler 注册模式:干净但 Rust 的 borrow checker 会让人头疼
  • 集中式 SimRunner:虽然后期 dispatch 函数会膨胀,但避免了生命周期问题

最终选了集中式,事实证明是对的——后续迭代中频繁修改多个实体状态,集中分发省了大量 borrow checker 斗争的时间。

2. 代码生成:AI 写模式化代码,我写核心逻辑

AI 最适合处理那些有模式但不复杂的代码:

拓扑生成(Fat-Tree 索引计算)

// AI 生成的 k-ary Fat-Tree 索引计算
// 我需要手工验算每个索引对不对
for k in 0..k/2 {
    for s in 0..k/2 {
        let core = core_start + c * k/2 + s;
        let pod = pod_start + p * k/2 + c;
        let agg = agg_start + p * k/2 + (c + k/2) % k;
        // ...
    }
}

这类嵌套循环的索引计算,手写容易 off-by-one,AI 生成后人工验算一遍效率高很多。

测试用例生成:项目的 26 个测试中,约 70% 由 AI 生成或辅助生成,尤其是一些参数组合的边界情况测试。

3. 调试与修复:AI 价值最大的地方

几个印象深刻的 AI 协助调试案例:

🔴 死锁定位:Incast 场景下模拟器卡死,我手动追踪了两小时无果。把事件时间线给 AI 看,它指出是 TxTickPacketArrive 在同一时间戳的调度顺序问题——ACK 被调度到了 DATA 前面,导致死锁。在 Event 结构里加 seq 字段解决。

🔴 全局 PID 冲突:不同协议实例(STrack / SimpleTCP)各自从 1 开始编号 packet_id,在全局 packet_buf 中冲突导致诡异错误。AI 建议在 SimRunner 中加一个 global_pid 生成器,handle_tx_tick 中重写所有出包的 id。这个建议是项目中最关键的修复。

🔴 周期 TxTick 必要性:当 cwnd 满时仅靠 ACK 触发 txTick 是不够的——丢包后永远无 ACK。AI 建议未完成流定期 tick(25us)检查 RTO,解决了"卡死"问题。

4. 协议实现:AI 写实现,我来 review

SimpleTCP 实现:AI 生成了完整的慢启动、拥塞避免、快速重传、RTO 超时的逻辑框架。我重点 review 了 ECN 响应和 cwnd 更新逻辑,发现并修正了一处在快速恢复阶段 cwnd 增长的边界条件错误。

STrack SACK Bitmap:64-bit bitmap 表示乱序接收状态,位运算部分 AI 生成后我模拟了几个场景验证正确性。


三、成果展示

Incast 场景实测(512KB × 15 sender → 1 receiver)

指标 ECMP STrack 改善
仿真总时长 874 μs 762 μs -12.8%
FCT P50 816.6 μs 704.7 μs -13.7%
FCT P99 848.3 μs 735.9 μs -13.3%
总发送包数 7752 8652 +11.6%
总重传包数 72 972 +1250%

STrack 在 FCT 上有约 13% 的改善,代价是更多重传——这是 Packet Spraying 的预期行为:负载被分散到更多 spine 上,单个链路瞬时拥塞反而更激烈。

不同工作负载下的对比

FCT 对比图片暂时无法显示:FCT 对比 在不同负载强度下,STrack(蓝色)的 FCT 普遍优于 ECMP(橙色)

拥塞对比图片暂时无法显示:拥塞对比 ECMP 与 STrack 的丢包/重传/ECN 标记分布对比

链路利用率图片暂时无法显示:链路利用率 STrack 通过 Packet Spraying 实现了更均衡的链路利用率分布

TCP 限制场景

在 TCP 限制对比实验中,项目使用 SimpleTCP 协议实现验证了更广泛的传输层设计空间:

FCT 柱状图图片暂时无法显示:FCT 柱状图 不同配置下的 FCT 柱状图对比

FCT 散点图图片暂时无法显示:FCT 散点图 逐流 FCT 的散点分布

重传比例图片暂时无法显示:重传比例 不同方案的重传比例对比

包类型分布图片暂时无法显示:包类型分布 各类包(DATA/ACK/NACK)的分布情况


四、经验总结

AI 擅长什么

  1. 调试效率提升最显著:全局 PID 冲突这类 bug,自己排查可能半天,AI 几分钟定位到根因
  2. 模式化代码生成:拓扑索引、测试用例、结构体样板代码,AI 写了我 review,效率翻倍
  3. 边界情况验证:协议实现中的各种 corner case,AI 比我一个人想得更全面

AI 不擅长什么

  1. 全局架构设计:整体架构(模块划分、事件流设计、抽象层次)必须自己定,AI 给的方案太泛
  2. 生成的代码需要 review:尤其是索引计算、位运算、状态机转换,AI 容易 off-by-one
  3. 不能替代核心理解:不理解协议本质就无法判断 AI 生成的拥塞控制逻辑是否正确

核心心得

你是架构师,AI 是高效的码农和调试助手。 不要指望 AI 设计系统,但让它帮你写实现、找 bug、写测试,效率提升非常可观。


五、项目结构

strack-sim/                  ← 项目根目录
├── Cargo.toml               Rust 项目配置
├── src/
│   ├── lib.rs               crate 入口
│   ├── core/                DES 引擎(阶段一)
│   ├── network/             物理层(阶段二)
│   ├── topology/            拓扑生成(阶段二)
│   ├── nic/                 协议栈(阶段三)
│   │   ├── protocol.rs      Protocol trait ← 可插拔抽象
│   │   ├── strack.rs        STrack 协议实现
│   │   └── tcp.rs           SimpleTCP 协议实现
│   ├── traffic/             流量生成(阶段四)
│   ├── monitor/             指标采集(阶段四)
│   └── sim_runner.rs        端到端仿真主循环
├── examples/                端到端示例
├── tests/                   集成测试(26 个全部通过)
├── output/                  分析图表输出
└── docs/                    设计文档

返回顶部