跳到主要内容

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 实现位置
DCQCNECN 1-bit 标记 → 发送端降速ns3-rdma, HPCC, ns-3-alibabacloud
HPCCINT 多 bit 精确链路负载信息 → 精准速率调整HPCC repo, ns-3-alibabacloud
TIMELYRTT 增量检测拥塞 → 速率调整ns3-rdma (独立分支),ns-3-alibabacloud
DCTCPECN 标记比例 → 窗口调整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 / ClosFatTreeHelper 或手动构建 PointToPoint 链路
Rail-Optimized手动拓扑构建,SimAI 已实现完整模板
NVSwitch + Railns-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]MSRA3.17DCQCN, PFC, ECN低 (归档)
[HPCC][2]阿里巴巴~3.27HPCC, DCQCN, TIMELY, DCTCP
[ns-3-alibabacloud][3]阿里云较新全 CC 算法,QP, NVSwitch, INT
[astra-network-ns3][4]GT / Meta / Intel基于 HPCCASTRA-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

参考资料

  1. ns3-rdma: NS3 simulator for RDMA over RoCEv2. https://github.com/bobzhuyb/ns3-rdma
  2. HPCC: High Precision Congestion Control. https://github.com/alibaba-edu/High-Precision-Congestion-Control
  3. ns-3-alibabacloud. https://github.com/aliyun/ns-3-alibabacloud
  4. astra-network-ns3. https://github.com/astra-sim/astra-network-ns3
  5. SimAI: Full-Stack AI Training Simulator. https://github.com/aliyun/SimAI