NS-3 网络仿真在 AI/HPC 中的应用
NS-3(Network Simulator 3)是开源的离散事件网络仿真器,建模粒度为每个数据包的路由、排队、拥塞控制响应。在 AI/HPC 集群通信仿真中,NS-3 通常不独立部署,而是作为 ASTRA-sim 和 SimAI 的高精度网络后端,提供包级网络行为的精确建模。
核心架构
事件驱动引擎
NS-3 是离散事件仿真器(Discrete-Event Simulator),核心运行机制:
- 每个事件绑定一个仿真时间戳(simulation time)
- 事件队列按时间戳顺序排列
Simulator::Run()从队列中按序取出事件执行- 事件执行过程中可以生成新的未来事件(自持续事件链)
- 终止条件:事件队列清空或显式调用
Simulator::Stop()
关键设计模式:
- Attribute System:对象通过属性机制暴露可配置参数,无需重编译
- Topology Helpers:将多步骤的设备/通道/连接创建抽象为单个操作
- Container 模式:
NodeContainer、NetDeviceContainer、ApplicationContainer管理对象集合
Node / NetDevice / Channel 模型
Node(计算设备抽象)
|-- Application 列表(用户级程序,驱动仿真活动)
|-- Protocol Stack(TCP/UDP/IP 实现)
|-- NetDevice 列表(网络接口卡抽象)
|-- 连接到 Channel(通信子网抽象)
Node 采用图论术语"node",设计为空壳容器,通过聚合插入对象扩展功能。
NetDevice 封装软件驱动和模拟硬件,主要实现包括 PointToPointNetDevice(点对点直连)、CsmaNetDevice(以太网类)等。
Channel 表示通信介质,与特定 NetDevice 类型配对。包外发调用 NetDevice::Send(),内收通过注册的回调函数上传。
Packet 抽象
Packet 对象模型的关键特性:
- 支持 Header/Trailer 的添加和移除
- Tag 机制附加元数据
- 零拷贝分片和合并
- 序列化支持(用于分布式仿真)
AI/HPC 相关能力
RoCEv2 / RDMA 建模支持
NS-3 本身不包含 RDMA/RoCEv2 模块,但学术界和工业界有三个成熟的扩展实现:
ns3-rdma(MSRA,bobzhuyb):来自微软亚洲研究院 DCQCN 论文配套代码。实现 QBB Net Device(DCQCN + PFC)、Broadcom Switch Model(ASIC 缓冲区管理)、Egress Queue(MMU 缓冲 + 调度器)。支持 DCQCN 和 TIMELY。基于 NS-3.17(较老版本),活跃度低。
HPCC repo(阿里巴巴):来自 SIGCOMM 2019 论文。实现 HPCC + HPCC-PINT(INT 头压缩至 1-2 bytes)、DCQCN、TIMELY、DCTCP,以及 Broadcom 共享缓冲区交换机。
ns-3-alibabacloud(阿里云):当前最活跃、功能最全的实现,是 SimAI 的网络后端。核心增强包括:
- 8 优先级队列 QBB/PFC
- 基于队列深度的 ECN 标记 + 接收端 CNP 反馈
- 完整 RDMA Host Stack(QP/RxQP 建模,窗口控制,ACK/NACK 处理)
- 多 CC 算法:DCQCN, HPCC, HPCC-PINT, TIMELY, DCTCP
- ECMP(5-tuple hash 等价多路径转发)
- INT/PINT(带内遥测元数据注入)
- NVSwitch(服务器内 GPU 通信模拟)
拥塞控制算法实现
| 算法 | 核心机制 | NS-3 实现位置 |
|---|---|---|
| DCQCN | ECN 1-bit 标记 -> 发送端降速 | ns3-rdma, HPCC, ns-3-alibabacloud |
| HPCC | INT 多 bit 精确链路负载信息 -> 精准速率调整 | HPCC repo, ns-3-alibabacloud |
| TIMELY | RTT 增量检测拥塞 -> 速率调整 | ns3-rdma(独立分支), ns-3-alibabacloud |
| DCTCP | ECN 标记比例 -> 窗口调整 | HPCC repo, ns-3-alibabacloud |
| PFC | 逐跳 PAUSE/RESUME 无损以太网 | 所有三个实现 |
| Swift | 端到端延迟信号 | SimAI 文档提及支持 |
交换机缓冲区模型:Broadcom ASIC 共享缓冲区模拟、MMU 入口控制(静态/动态阈值)、PFC 触发/ECN 标记/包丢弃三级决策、Egress 调度(严格优先级 + 轮询)。
拓扑建模
NS-3 内置支持 FatTreeHelper、BCubeHelper 等拓扑 Helper。AI/HPC 集群典型拓扑建模方式:
| 拓扑 | NS-3 建模方式 |
|---|---|
| Fat-Tree / Clos | FatTreeHelper 或手动构建 PointToPoint 链路 |
| Rail-Optimized | 手动拓扑构建,SimAI 已实现完整模板 |
| NVSwitch + Rail | ns-3-alibabacloud 支持 NVSwitch 建模 |
| Dragonfly | 手动构建 |
与 ASTRA-sim / SimAI 的集成
ASTRA-sim 集成
集成接口(AstraNetworkAPI):
sim_send(tag, src, dst, size, callback) → 触发 NS-3 包级仿真
sim_recv(tag, src, dst, size, callback) → 注册接收回调,包到达唤醒事件
物理拓扑配置(文本格式,每行一条链路):
# <src> <dst> <bw_Gbps> <latency_μs> <err_rate> <queue_size>
0 1 100 1.0 0.0 1024000
逻辑拓扑(JSON 格式,允许逻辑维度与物理布局解耦):
{"logical-dims": ["8", "16"]}
代码来源:astra-network-ns3 仓库扩展自阿里巴巴 HPCC 项目,继承了其 RDMA/CC 能力,但拥塞控制建模精度有限。
SimAI 集成
SimCCL 产出的 P2P 流通过接口注入 ns-3-alibabacloud:
sim_send()— 生成 NS-3 网络包sim_recv()— 注册回调,包到达后唤醒仿真事件
SimAI 的 NS-3 集成相比 ASTRA-sim 原版的核心改进:真实 QP 创建/销毁逻辑、perQP 粒度 NIC 配置、Max-Min 调度原则、CC 模块解耦可替换。这些改进是 SimAI 98.1% 精度的关键来源之一。
精度与性能边界
SimAI 验证数据(NSDI'25)
| 指标 | 结果 |
|---|---|
| 整体对齐精度 | 平均 98.1%(与真实集群对比) |
| 测试规模 | 小规模实验室 -> 大规模工业环境(512–1024 GPU) |
对比参考:ASTRA-sim 原版 NS-3 后端在基础规模下误差 45.9%,扩展到 512 GPU 时误差飙升至 530.2%。SimAI 通过 ns-3-alibabacloud 将此改善到约 2% 误差。
误差来源分析:原版 NS-3 后端的高误差主要来自拥塞控制建模不足(CC 算法建模不精确)和 QP 行为简化(发送/接收窗口简化,无独立 per-QP 速率控制)。
规模限制
| 场景 | 节点数 | 内存估算 |
|---|---|---|
| RDMA 数据中心仿真 | 128–256 GPU | 约 2–8 GB |
| Fat-Tree + 全包级仿真 | 512 节点 | 约 10–20 GB |
| 大规模 AI 集群 | 1000+ GPU | 需要分布式仿真 |
规模扩展的挑战:
- 节点数 x2 时仿真时间 x4–5(超线性增长)
- 活跃流数量远多于节点数(每个流维护独立 CC 状态)
- 大规模下分布式 NS-3(MPI)每个 rank 需实例化完整拓扑,限制了实际可扩展性
执行时间
经验数据:
- 128 节点拓扑构建:约 3 秒
- 512 节点拓扑构建:约 75 秒
- RDMA 仿真通常比标准 TCP 仿真慢(更多 per-packet 事件:PFC、ECN 标记、CC 更新)
- SimAI NS-3 Simulation 模式:分钟到小时级(取决于规模和流量量)
难以精确建模的行为
- NCCL 内部优化:NCCL 的 bandwidth-aware graph 选择、transport 选择(IB Verbs vs Socket)、rank 到 GPU 的映射优化——这些高层策略需要在仿真器中显式重实现
- GPU Direct RDMA:GPU 显存直接参与 RDMA 传输时的 PCIe/NVLink 带宽竞争
- PFC 风暴和死锁:大规模下的 PFC 级联效应难以完全捕获
- 微突发(Microbursts):纳秒级的流量突发与 NS-3 事件调度精度的权衡
- 实际网卡固件行为:CC 算法的硬件实现可能与论文描述有偏差
不适合 NS-3 建模的场景
NS-3 的建模职责范围限于传输层到物理层(网络协议/拓扑),以下场景应使用其他工具:
| 不适合建模 | 原因 | 应该用什么 |
|---|---|---|
| 芯片内部微架构 | NS-3 抽象层在网络接口以上 | SystemC / gem5 |
| DMA 引擎行为 | NS-3 不建模 CPU/GPU 内部数据搬运 | SystemC TLM |
| GPU 计算核心 | NS-3 是网络仿真器 | SCALE-sim / Timeloop |
| PCIe 总线仲裁 | 芯片级总线协议超出范围 | SystemC / gem5 |
| NVLink 协议细节 | NS-3 只能建模为带宽/延迟参数化链路 | 专用 NVLink 模型 |
| SRAM/HBM 存储层级 | 存储器行为不在范围内 | DRAMSim / Ramulator |
| 算子执行时序 | 计算 kernel 的时钟级行为 | Timeloop / MAESTRO |
| 芯片内部计算/通信 overlap 精确建模 | NS-3 不建模芯片内部状态 | SystemC TLM |
NS-3 与 SystemC 的职责分界:
应用层(训练框架) <- ASTRA-sim / SimAI
|
集合通信层(NCCL) <- SimCCL / MockNCCL
|
传输层(RoCEv2/TCP) <- NS-3 [开始]
|
网络层(路由/转发) <- NS-3
|
链路层(以太网/PFC) <- NS-3
|
物理层(信号/编码) <- NS-3 简化 [结束]
|
------ 分界线 ------
|
NIC 内部(DMA/QP) <- SystemC TLM [开始]
|
总线(PCIe/NVLink) <- SystemC TLM
|
片上网络(NoC) <- SystemC / BookSim
|
计算核心(ALU/MAC) <- SystemC RTL / gem5
|
存储(SRAM/HBM) <- SystemC TLM / DRAMSim [结束]
关键开源项目汇总
| 项目 | 来源 | NS-3 版本 | 核心能力 | 活跃度 |
|---|---|---|---|---|
| ns3-rdma | MSRA | 3.17 | DCQCN, PFC, ECN | 低(归档) |
| HPCC | 阿里巴巴 | ~3.27 | HPCC, DCQCN, TIMELY, DCTCP | 低 |
| ns-3-alibabacloud | 阿里云 | 较新 | 全 CC 算法, QP, NVSwitch, INT | 高 |
| astra-network-ns3 | GT/Meta/Intel | 基于 HPCC | ASTRA-sim 集成 | 中 |
| SimAI | 阿里云 | 通过 ns-3-alibabacloud | 全栈 LLM 训练仿真 | 高 |