NS-3
包级离散事件仿真与 RDMA 扩展机制
核心要点:
- 离散事件内核:事件队列按时间戳排序,
Simulator::Run()顺序执行,自持续事件链- 三套 RDMA 扩展:ns3-rdma (MSRA,较老) / HPCC (阿里) / ns-3-alibabacloud (阿里云,最活跃)
- 拥塞控制覆盖:DCQCN / HPCC / HPCC-PINT / TIMELY / DCTCP / Swift / PFC
- 职责分界:传输层到物理层归 NS-3,芯片内部 (DMA / NoC / 存储) 归 SystemC / gem5
- 规模限制:单机 128-256 GPU 内存 2-8 GB, 1000+ 节点需分布式 MPI (扩展性受限)
NS-3 (Network Simulator 3) 是开源的离散事件网络仿真器,建模粒度为每个数据包的路由 / 排队 / 拥塞控制响应。在 AI / HPC 集群通信仿真中,NS-3 通常不独立部署,而是作为 ASTRA-sim 和 SimAI 的高精度网络后端。
NS-3 仿真内核怎么工作
核心问题:离散事件仿真的运行机制是什么?关键抽象有哪些?
事件驱动引擎核心机制:
- 每个事件绑定一个仿真时间戳 (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 抽象:支持 Header / Trailer 的添加和移除;Tag 机制附加元数据;零拷贝分片和合并;序列化支持 (用于分布式仿真)。
三套 RDMA 扩展怎么选
核心问题:NS-3 本身不含 RDMA,业界三个扩展实现各自能力和活跃度如何?
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 通信模拟)
各拥塞控制算法在哪实现
核心问题:DCQCN / HPCC / TIMELY 等算法的核心机制是什么?在哪个 repo 找?
| 算法 | 核心机制 | 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 文档提及支持 |
@tbl-sim-ns3-cc-algorithms 拥塞控制算法实现位置
交换机缓冲区模型:Broadcom ASIC 共享缓冲区模拟 / MMU 入口控制 (静态 / 动态阈值) / PFC 触发 / ECN 标记 / 包丢弃三级决策 / Egress 调度 (严格优先级 + 轮询)。
拓扑怎么建
核心问题:AI / HPC 集群典型拓扑在 NS-3 里怎么表达?
NS-3 内置 FatTreeHelper / BCubeHelper 等拓扑 Helper:
| 拓扑 | NS-3 建模方式 |
|---|---|
| Fat-Tree / Clos | FatTreeHelper 或手动构建 PointToPoint 链路 |
| Rail-Optimized | 手动拓扑构建,SimAI 已实现完整模板 |
| NVSwitch + Rail | ns-3-alibabacloud 支持 NVSwitch 建模 |
| Dragonfly | 手动构建 |
@tbl-sim-ns3-topology AI / HPC 典型拓扑的 NS-3 建模方式
NS-3 怎么集成进 ASTRA-sim / SimAI
核心问题:ASTRA-sim / SimAI 用什么接口调 NS-3?二者的集成差异在哪?
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% 精度的关键来源之一 (详见 7.3 SimAI)。
精度和性能的边界在哪
核心问题:NS-3 包级仿真的精度、规模、执行时间各自的实际边界?
SimAI 验证数据 (NSDI'25)
| 指标 | 结果 |
|---|---|
| 整体对齐精度 | 平均 98.1% (与真实集群对比) |
| 测试规模 | 小规模实验室 → 大规模工业环境 (512–1024 GPU) |
@tbl-sim-ns3-simai-accuracy SimAI NS-3 后端的精度验证
对比参考:ASTRA-sim 原版 NS-3 后端基础规模误差 45.9%,扩展到 512 GPU 时飙升至 530.2%。SimAI 通过 ns-3-alibabacloud 改善到 ~2%。误差来源:原版拥塞控制建模不足 + QP 行为简化 (发送 / 接收窗口简化,无独立 per-QP 速率控制)。
规模限制
| 场景 | 节点数 | 内存估算 |
|---|---|---|
| RDMA 数据中心仿真 | 128–256 GPU | 约 2–8 GB |
| Fat-Tree + 全包级仿真 | 512 节点 | 约 10–20 GB |
| 大规模 AI 集群 | 1000+ GPU | 需要分布式仿真 |
@tbl-sim-ns3-scale-limits NS-3 仿真规模与内存估算
规模扩展挑战:
- 节点数 ×2 时仿真时间 ×4–5 (超线性增长)
- 活跃流数量远多于节点数 (每个流维护独立 CC 状态)
- 大规模下分布式 NS-3 (MPI) 每个 rank 需实例化完整拓扑,限制了实际可扩展性
执行时间
- 128 节点拓扑构建:约 3 秒
- 512 节点拓扑构建:约 75 秒
- RDMA 仿真比标准 TCP 仿真慢 (更多 per-packet 事件:PFC / ECN 标记 / CC 更新)
- SimAI NS-3 Simulation 模式:分钟到小时级 (取决于规模和流量量)
难以精确建模的行为
- NCCL 内部优化:bandwidth-aware graph 选择 / transport 选择 (IB Verbs vs Socket) / rank 到 GPU 映射 — 需在仿真器中显式重实现
- GPU Direct RDMA: GPU 显存直接参与 RDMA 传输时的 PCIe / NVLink 带宽竞争
- PFC 风暴和死锁:大规模下 PFC 级联效应难以完全捕获
- 微突发:纳秒级流量突发与 NS-3 事件调度精度的权衡
- 实际网卡固件行为:CC 算法硬件实现可能与论文描述有偏差
哪些场景不应该用 NS-3
核心问题:NS-3 的职责边界是什么?跨过这条线应该用什么?
NS-3 建模职责限于传输层到物理层 (网络协议 / 拓扑)。以下场景应换其他工具:
| 不适合建模 | 原因 | 应该用什么 |
|---|---|---|
| 芯片内部微架构 | NS-3 抽象层在网络接口以上 | SystemC / gem5 |
| DMA 引擎行为 | 不建模 CPU / GPU 内部数据搬运 | SystemC TLM |
| GPU 计算核心 | 是网络仿真器 | SCALE-sim / Timeloop |
| PCIe 总线仲裁 | 芯片级总线协议超出范围 | SystemC / gem5 |
| NVLink 协议细节 | 只能建模为带宽 / 延迟参数化链路 | 专用 NVLink 模型 |
| SRAM / HBM 存储层级 | 存储器行为不在范围 | DRAMSim / Ramulator |
| 算子执行时序 | 计算 kernel 的时钟级行为 | Timeloop / MAESTRO |
| 芯片内部计算 / 通信 overlap 精确建模 | NS-3 不建模芯片内部状态 | SystemC TLM |
@tbl-sim-ns3-out-of-scope NS-3 职责外的场景与替代工具
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 [结束]
关键开源项目对比
核心问题:ns3-rdma、ns3-rdma-hw、ns3-uec 三个开源 NS-3 扩展在能力和活跃度上有何差异?
| 项目 | 来源 | NS-3 版本 | 核心能力 | 活跃度 |
|---|---|---|---|---|
| [ns3-rdma][1] | MSRA | 3.17 | DCQCN, PFC, ECN | 低 (归档) |
| [HPCC][2] | 阿里巴巴 | ~3.27 | HPCC, DCQCN, TIMELY, DCTCP | 低 |
| [ns-3-alibabacloud][3] | 阿里云 | 较新 | 全 CC 算法,QP, NVSwitch, INT | 高 |
| [astra-network-ns3][4] | GT / Meta / Intel | 基于 HPCC | ASTRA-sim 集成 | 中 |
| [SimAI][5] | 阿里云 | 通过 ns-3-alibabacloud | 全栈 LLM 训练仿真 | 高 |
@tbl-sim-ns3-projects 开源项目能力对照
Takeaway
| 知识点 | 核心结论 |
|---|---|
| 离散事件内核 | 事件队列按时间戳排,Simulator::Run() 顺序执行 |
| 三套 RDMA 扩展 | ns-3-alibabacloud 最全最活跃,是 SimAI 的后端 |
| CC 算法覆盖 | DCQCN / HPCC / HPCC-PINT / TIMELY / DCTCP / Swift / PFC 全套 |
| 精度参考 | SimAI 后端 98.1%; ASTRA-sim 原版后端 512 GPU 时 530% 误差 |
| 规模边界 | 128-256 GPU 单机 (2-8 GB); 1000+ 需 MPI 分布式 |
| 职责分界 | 传输层及以下归 NS-3,芯片内部 (DMA / NoC) 归 SystemC / gem5 |
参考资料
- ns3-rdma: NS3 simulator for RDMA over RoCEv2. https://github.com/bobzhuyb/ns3-rdma
- HPCC: High Precision Congestion Control. https://github.com/alibaba-edu/High-Precision-Congestion-Control
- ns-3-alibabacloud. https://github.com/aliyun/ns-3-alibabacloud
- astra-network-ns3. https://github.com/astra-sim/astra-network-ns3
- SimAI: Full-Stack AI Training Simulator. https://github.com/aliyun/SimAI