Skip to content

Repository files navigation

aether-ub

这是一个独立的 AetherPDES 原生 Unified Bus 仿真工程。运行时不链接 ns-3, 也没有修改 AetherPDES 源码;原 ns3ub 只作为差分验证和性能基线。

工程在 third_party/AetherPDES 内附带一份构建所需的 AetherPDES 源码快照, 并由 CMake FetchContent 以本地 SOURCE_DIR 方式接入。来源分支固定为 perf-opt-p5-p6b,实际内容锁定到不可变提交 b361934820815c1f2401004c64b03711ccc80546。默认构建不需要访问私有上游仓库, 也不会因为远端分支继续更新而改变实验底座。

快速开始

依赖:CMake 3.24+、支持 C++17 的编译器、MPI,以及运行测试时使用的 Python 3.10+。

cd /path/to/aether-ub

cmake --preset dev
cmake --build --preset dev
ctest --preset dev

./build/dev/aether-ub --case /path/to/case --mode sequential
mpirun -np 2 ./build/dev/aether-ub \
  --case /path/to/case --mode conservative --window auto

默认配置全程使用仓库内的固定 AetherPDES 快照,不需要联网下载框架源码。

提交前可运行统一格式检查:

cmake --build build/dev --target format-check

主性能验收 case 是 dayu64p_8p_all_reduce_ring_16mb:64 个 Device、8 个 Switch、8,064 个 URMA_WRITE 任务。另对 ns3ub 仓库的 25 个 scratch case 做了全量扫描和差分;其中 23 个原版可完成 case 均能由 Aether 原生程序运行, 并全部达到相同停止虚拟时间。19 个 case 的任务级 canonical 输出完全一致, 其余 4 个的最大偏差为 246 ns。迁移的实际执行路径包括:phase 依赖与 可配置的跨进程可见延迟、64 KiB TA 分段、4 KiB TP 包、可靠 ACK、write response、 8 路 multipath/packet spray、路由、Switch VOQ、round-robin/DWRR allocator、端口 预取、链路序列化与传播、入口处理延迟、CBFC 信用消费/阻塞/piggyback/40B control-credit, 以及 100 us 进度轮询停止边界。case 中关闭的重传、拥塞控制和 fault 会在 加载时校验为关闭,不会被静默忽略。

额外完成了 URMA_READ/WRITE_NOTIFY、MEM_STORE/LOAD、静态 TP/动态 CTP、 HASH/ADAPTIVE 路由、Selective/GBN 重传、legacy/retrans fault、DCQCN/CAQM, 以及 PFC fixed/dynamic/paper-dynamic 的原生状态机。 PFC 的三层 ingress admission、shared pool、per-port headroom、processing/VOQ/ egress 占用、Pause/Resume 全 VL 状态都属于 UB LP 可回滚状态。PFC 动态压测与 ns3ub 对照得到相同的 510,000 us 虚拟时间、2,765,022 个 wire packet(其中 171,022 个 40B PFC 帧)和逐任务完成时刻。

TP 发送侧还包含可配置 inflight window、Selective/SACK、fast retrans、 MarkPSN 抑制、GBN/Selective RTO 和 timer generation token;确定性 retrans_fault.csv 的 drop 与 detached delay 也已迁移。原 non_first_tp_packet_loss_markpsn case 与 ns3ub 均在 1.131 us 给出业务完成 可见事件、100 us 结束,且 38 个实际 wire packet 的逐端口发送时刻一致。

代码位置

  • cmake/AetherDependency.cmake:固定 Aether 官方仓库、来源分支和提交; 默认选择 vendored 快照,同时提供本地 checkout 和远端 FetchContent 入口。
  • third_party/AetherPDES:固定提交的构建所需 AetherPDES 源码,禁止混入 UB 业务修改。
  • CMakePresets.json:统一 devreleaseci 三套构建配置。
  • src/case.cpp:读取原 case 的 node/topology/routing/traffic 和 network_attribute.txt,并校验本次迁移的活动配置。
  • include/aether_ub/packet.hpp:不依赖 Aether 的 UB 包和值类型。
  • include/aether_ub/event.hpp:UB 与 Aether 之间唯一的序列化事件信封。
  • src/partition.cpp:UB 拓扑感知的初始 LP 分区策略。
  • src/model.cpp:Aether Logical Process、任务/TP、交换机、端口队列、 allocator、链路和 CBFC 的时间状态机。
  • src/main.cpp:Aether Engine、Sequential/Conservative MPI 启动、统计与 canonical 输出。
  • tests/:232 个原 ns3ub UB 测试类的清单、原生契约测试和 MPI 黑盒测试。
  • .github/workflows/ci.yml:Linux/Open MPI 的可复现构建与全量测试。
  • docs/MIGRATION_BOUNDARY.md:业务侧与框架侧的职责和修改门槛。
  • docs/MIGRATION_MATRIX.md:原 src/unified-bus 各模块的迁移状态与顺序。
  • benchmarks/20260831-native-aether-vs-ns3ub:同 case 的可复现实验脚本、 25 次原始记录和结果报告。

编译和运行

默认的独立构建通过 FetchContent 使用仓库内 vendored Aether:

cmake -S . -B build/release \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_TESTING=OFF
cmake --build build/release -j

./build/release/aether-ub --case /path/to/case --mode sequential
mpirun -np 2 ./build/release/aether-ub --case /path/to/case --mode conservative
mpirun -np 4 ./build/release/aether-ub --case /path/to/case --mode conservative
mpirun -np 8 ./build/release/aether-ub --case /path/to/case --mode conservative

也可以直接使用 release preset:

cmake --preset release
cmake --build --preset release
cmake --install build/release --prefix /path/to/install

使用本地 Aether checkout

做框架优化 A/B 时,通过 AETHER_ROOT 显式覆盖 FetchContent。工程不会修改 该目录:

cmake -S . -B build/local -DCMAKE_BUILD_TYPE=Release \
  -DAETHER_ROOT=/path/to/AetherPDES \
  -DBUILD_TESTING=ON
cmake --build build/local -j
ctest --test-dir build/local --output-on-failure

可复现构建不应覆盖 AETHER_UB_AETHER_COMMIT。只有准备正式升级框架并重新跑 正确性与性能基线时,才同时更新 cmake/AetherDependency.cmakeTHIRD_PARTY_NOTICES.md 和报告中的 provenance。

若运行环境本身有权访问上游私有仓库,也可以关闭 bundled 模式,让 FetchContent 直接检出固定提交:

cmake -S . -B build/fetch \
  -DAETHER_UB_USE_BUNDLED_AETHER=OFF \
  -DBUILD_TESTING=ON

测试

原生测试清单来自 ns3ub 的 src/unified-bus/test/ub-test.cc,覆盖其中全部 232 个唯一 TestCase 类;focused suite 的重复注册不重复计数。全量运行:

ctest --preset dev

第一个 CTest 目标执行 199 个进程内 UB 契约测试;第二个执行 33 个 aether-ub 黑盒系统测试,并逐行比较 Aether Sequential 与双进程 Conservative 的 canonical 任务时间线。迁移规则和结果见 docs/TEST_MIGRATION.md

本次迁移的验收范围是 Sequential 和 Conservative MPI;Optimistic/Hybrid 不是正确性或性能交付条件。

当前默认依赖是 Aether 优化 MR #2 的提交 b361934。需要复测合入前基线时, 通过 AETHER_ROOT 传入对应的框架 checkout。

业务工程和 Aether 框架是两个独立源码树。通过 AETHER_ROOT 可以只替换框架 实现,不改 UB 业务源码:

cmake -S . -B build-framework-opt -DCMAKE_BUILD_TYPE=Release \
  -DAETHER_ROOT=/path/to/AetherPDES-framework-checkout
cmake --build build-framework-opt -j

./build-framework-opt/aether-ub --case /path/to/case --queue ladder
./build-framework-opt/aether-ub --case /path/to/case --queue binned

--queue 的名字直接交给所选 Aether checkout 的事件队列工厂校验,因此以后 增加框架队列不需要再修改 UB 业务程序。

MPI 模式默认使用 --window auto:它会按当前 LP 分区,取最短跨进程链路 事件(传播延迟 + 最短活动包序列化)和跨进程 phase 依赖中的较小值。也可以用 --window 50ns 显式指定,但超过自动计算的安全上限会直接报错。

一个 tick 是 1 ps。摘要中的 simulated_us 包括与 ns3ub 相同的 100 us 完成轮询边界;--canonical-output <base> 可另外保存任务 START 和 COMPLETE_VISIBLE 时间。

Device 和 Switch 会分别轮转到各 rank,避免交换机集中到某个进程。每个 进程只创建自己拥有的可变节点 LP;完整 case 的只读拓扑、路由和任务表仍会 在各进程保留一份。运行摘要会输出本地 LP 数范围、跨 rank 事件数以及紧凑 事件大小,便于检查分区是否真的生效。

每个 UB Node LP 的端口队列、TP 序号、task/phase 和统计状态都有显式值状态; 业务对象之间只用稳定 ID,不跨进程传 C++ 指针。--lb-interval N 保留为框架 能力入口,但当前终验只覆盖串行和保守同步。

本次实测报告见 benchmarks/20260831-native-aether-vs-ns3ub/REPORT.md。 50 ns 链路与自动窗口的补充实验见 benchmarks/20260831-50ns-window-scaling/REPORT.md。 允许修改框架调用后的原生业务迁移 v2 结果见 benchmarks/20260903-native-business-migration/REPORT.md。 独立 Aether 框架 checkout、heap/ladder/binned 队列和调度热路径优化结果见 benchmarks/20260904-framework-queue-opt/REPORT.md。 25 个 scratch case 的迁移终验、DWRR/DCQCN/MTP/MPI 对比和最新代码量见 benchmarks/20260904-full-business-migration/REPORT.md。 Aether 优化 MR #2 在 DWRR、DCQCN 和 64-device 大 case 上的隔离 A/B 见 benchmarks/20260904-aether-pr2/REPORT.md

许可证

Aether-UB 的 UB 业务迁移代码沿用原 ns3ub 模块的 GPL-2.0-only 许可证。通过 FetchContent 获取的 AetherPDES 使用 BSD-3-Clause,依赖版本和声明见 THIRD_PARTY_NOTICES.md;安装时也会包含 Aether 的 完整许可证文本。

About

Unified Bus network simulator on AetherPDES

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages