「AI-RAN」Aerial,使用ORAN C1模式
使用 C1模式,可以省去一台交换机。
1. 最终拓扑与物理网口
VIAVI QG2(最终 Grandmaster)
│
Spark aerial00:SLAVE ── 共享 PHC 0 ── aerial01:MASTER
│ │
└─ phc2sys → Spark 系统时钟 └─ WNC O-RU:SLAVE / locked
| Linux 接口 | PCI 地址 | 物理端口 | 当次连接 | 用途 |
|---|---|---|---|---|
| aerial00 | 0000:01:00.0 | p0 | QG2,1 Gbps | PTP 上游 |
| aerial02 | 0002:01:00.0 | p0 | 与 aerial00 对应同一物理端口 | 本次不选用 |
| aerial01 | 0000:01:00.1 | p1 | WNC,10 Gbps | PTP 下游及 Aerial 前传 |
| aerial03 | 0002:01:00.1 | p1 | 与 aerial01 对应同一物理端口 | 本次不选用 |
两组接口的对应关系由 phys_switch_id、phys_port_name、devlink、协商速率及物理收发计数交叉确认;不能把四个 Linux 接口名当成四条独立物理链路。
最初按 aerial02 作为下游进行过一次尝试,后发现它与 aerial00 同属 p0,因此改为 aerial01。中间版本保存在 c1-initial-aerial02/;最终应学习 c1/。当次可用以下只读命令复核映射:
devlink port show
cat /sys/class/net/aerial00/phys_port_name
cat /sys/class/net/aerial01/phys_port_name
cat /sys/class/net/aerial02/phys_port_name
cat /sys/class/net/aerial03/phys_port_name
ethtool -T aerial00
ethtool -T aerial01
2. /etc/ptp.conf:从单端口客户端改为双端口边界时钟
完整差异:change-diffs/01-ptp.conf.diff。
-clientOnly 1
+clientOnly 0
+clock_type BC
clientOnly 0:允许这个时钟向下游授时。clock_type BC:明确采用边界时钟。- 原
[aerial00]配置保留,继续从 QG2 接收时间。 - 增加
[aerial01],使同一个 ptp4l 实例同时管理上下游。
新增的下游段:
[aerial01]
serverOnly 1
announceReceiptTimeout 3
delay_mechanism E2E
network_transport L2
serverOnly 1 使下游端口不进入客户端角色,避免从 RU 选择上游时间源。Spark 仍然以 QG2 为最终 GM;边界时钟从上游校准共享 PHC,再在下游发送 Sync/Announce 并回复 RU 的 Delay_Req。
原注释 # Role: client 被保留以兼容安装脚本的状态查询,表示上游客户端角色。实际时钟类型由 clock_type BC 决定,新增的 # Topology 注释也明确写出 C1。
以下为最终完整配置:
# PTP configuration for NVIDIA Aerial
# Role: client
# Topology: LLS-C1 boundary clock; client denotes the upstream role.
# Upstream: aerial00; downstream: aerial01.
[global]
dataset_comparison G.8275.x
G.8275.defaultDS.localPriority 128
maxStepsRemoved 255
logAnnounceInterval -3
logSyncInterval -4
logMinDelayReqInterval -4
G.8275.portDS.localPriority 128
network_transport L2
domainNumber 24
tx_timestamp_timeout 30
clientOnly 0
clock_type BC
clock_servo pi
step_threshold 1.0
egressLatency 28
pi_proportional_const 4.65
pi_integral_const 0.1
[aerial00]
announceReceiptTimeout 3
delay_mechanism E2E
network_transport L2
[aerial01]
serverOnly 1
announceReceiptTimeout 3
delay_mechanism E2E
network_transport L2
上下游都报告 PHC 0,因此本次没有开启 boundary_clock_jbod,也没有增加 PHC 之间的同步进程。
3. /etc/systemd/system/ptp4l.service:补充下游网口初始化
原 aerial00 的初始化命令全部保留,新增:
ExecStartPre=/usr/sbin/ifconfig aerial01 up
ExecStartPre=/usr/sbin/ethtool --set-priv-flags aerial01 tx_port_ts on
ExecStartPre=/usr/sbin/ethtool -A aerial01 rx off tx off
依次用于拉起网口、启用该网口的硬件 TX 端口时间戳,以及关闭该网口的 RX/TX pause 流控。实际检查时,时间戳和流控参数已经是这些值;把它们写入服务可在后续启动时重新应用。
ExecStart=/usr/sbin/ptp4l -f /etc/ptp.conf、CPU 绑定 4、自动重启策略均保持原样。文件差异见 change-diffs/02-ptp4l.service.diff。
安装配置后,脚本按顺序停止 phc2sys、停止 ptp4l,写入文件并执行 daemon-reload,再启动 ptp4l 和 phc2sys。这些命令会中断授时,仅阅读本文无需重新执行。
4. phc2sys 与时间尺度:文件没有修改
以下命令完整保留:
/usr/sbin/phc2sys -s aerial00 -c CLOCK_REALTIME -n 24 -O 0 -R 256 -u 256
它继续把 aerial00 对应的 PHC 同步到系统时钟。-O 0 保留了 Aerial 原有的 TAI 时间尺度设置;本次没有把系统时间切换为 UTC。C3 和 C1 归档中的 phc2sys.service 完全相同。
同样保留了 domain 24、L2、E2E、G.8275.x 数据集比较、Sync/Announce 频率、PI 参数、egressLatency 等参数。ptp_minor_version 也没有新增或修改。
5. 启动 Aerial 时的另一个必要改动:业务前传网口
文件:/home/airan/aerial-cuda-accelerated-ran/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_WNC_DGX.yaml。
-nic: '0000:01:00.0'
+nic: '0000:01:00.1'
总计替换 9 处:1 处 NIC 定义和 8 处 cell 配置中的 NIC 引用。修改 cell 模板引用不等于启用了 8 个小区;当次运行的是 1 个小区。
这让 Aerial 的业务报文使用连接 RU 的 p1,而不是连接 QG2 的 p0。src_mac_addr 仍为全零,由 Aerial 使用所选网口的实际 MAC,即 aerial01 的 4c:bb:47:30:5a:8e。
修改前的完整文件保存在 aerial-runs/20261030-182605/before/,逐行差异见 change-diffs/03-aerial-nic.diff。重新核对确认,当前文件相对启动前备份只有这 9 处替换。
RU 目的 MAC e8:c7:cf:ad:8f:1a、VLAN 2、workers_ul、pusch_aggr_per_ctx 和 E3/data_config 等改动,在此次启动前已经存在。它们可能出现在相对 Git 提交的 diff 中,但不属于本次新增修改。
6. WNC 四路 radio 的业务配置及启用状态
通过 115200 波特率串口登录,修改 radio 1–4 的 transport peer-mac:
-transport peer-mac 4c:bb:47:30:45:3f
+transport peer-mac 4c:bb:47:30:5a:8e
这是 RU 发送业务报文时使用的 DU 对端 MAC,必须与本次 Aerial 选择的 aerial01 对应。
当次实际执行的 CLI 命令:
config
radio 1
transport peer-mac 4c:bb:47:30:5a:8e
exit
radio 2
transport peer-mac 4c:bb:47:30:5a:8e
exit
radio 3
transport peer-mac 4c:bb:47:30:5a:8e
exit
radio 4
transport peer-mac 4c:bb:47:30:5a:8e
exit
exit
radio enable
前后 running-config 对比确认,radio enable 对四路 radio 还产生了:
-shutdown
+no shutdown
-lna shutdown
+no lna shutdown
RU 的 PTP 配置本来就是 domain 24、G.8275.1、eth1、Ethernet forwardable,因此没有修改 RU 的 PTP 参数。中心频率 3350010 kHz、带宽 100 MHz、SCS 30 kHz、VLAN 2、eAxC、压缩和发射功率也保持原值。
这些变更只写入当时的 running-config。本次没有执行 copy running-config startup-config,因此不能假定它们会在 RU 重启后保留。完整前后差异见 change-diffs/04-wnc-radio.diff,命令回显在 /home/airan/aerial-runs/20261030-182605/oru-configuration-transcript.json。
7. 配套进程启动与其他文件
使用现有镜像,先启动核心网,再启动 Aerial/OAI:
cd /home/airan/openairinterface5g/doc/tutorial_resources/oai-cn5g
docker compose up -d --pull never
cd /home/airan/openairinterface5g/ci-scripts/yaml_files/sa_gnb_aerial
docker compose up -d --pull never
本次没有修改两个 docker-compose.yaml 或 OAI gNB.conf;与启动前备份逐一比对均一致。没有重建镜像、修改驱动/固件、修改 TDD、重新运行 installer 或创建 Git 提交。
另生成了串口查询、监测、ping 和测速工具及其日志。这些是诊断辅助文件,不是 C1 授时必须加载的配置。临时 HTTP 测速服务已停止;手机端 iPerf3 服务未监听,标准 30 秒双向测试未完成。速率观测和稳定性结果见 /home/airan/aerial-runs/20261030-182605/RESULTS.md。
8. 验证方法和当次结果
python3 /home/airan/ptp-modes/20261030-180950/verify-c1.py
脚本检查两个服务、aerial00=SLAVE、aerial01=MASTER、GM 存在,以及下游 Sync/Announce 的发送计数。RU 的独立串口验证命令是:
show ptp clock
show ptp parent
show s-plane status
当次 RU 返回 locked,父时钟为 Spark 4cbb47.fffe.305a8d 的端口 2,最终 GM 为 QG2 fcaf6a.fffe.06aa9d,stepsRemoved=2,记录的一次偏差为 18 ns。这里的“端口 2”是 ptp4l 中第二个配置端口,不是 Linux 接口 aerial02。
L1 初始化时曾发生一次下游 TX 时间戳超时,约 16 秒后自动恢复。之后正式 10 分钟观察中没有新的 PTP 故障或容器重启。满载时出现过 RLC 缓冲区满和约 1 秒的时延峰值,见性能报告;这些结果不能等同于长期满载稳定性保证。
9. 备份、脚本与回退范围
| 文件/目录 | 用途 |
|---|---|
c3-backup/ | 原 ptp.conf、ptp4l.service、phc2sys.service;附 SHA256 和权限清单 |
/var/backups/aerial-ptp/c3-SjV4M5Sm/ | 首次切换时建立的 root 所有备份 |
c1/ | 最终 C1 文件及校验值 |
activate-c1.sh | 从已备份的原 C3 状态切换,预检查、root 备份、安装、验证、失败回退 |
apply-c1-update.sh | 当次将初始 aerial02 方案纠正为最终 aerial01 的更新脚本;更新前也备份 |
restore-c3.sh | 恢复原三个 Spark PTP 文件并重启 PTP 服务 |
verify-c1.py | Spark 侧只读检查;不代替 RU 自身的锁定检查 |
VERIFICATION.md | 当次成功锁定的原始输出 |
change-diffs/ | 本文涉及的四份完整差异 |
activate-c1.sh 会先检查当前文件是否等于原 C3 备份,因此当前已经是 C1 时,重复执行会因原文件校验不符而停止。它不是任意当前状态上的幂等安装器。
恢复原 Spark PTP 配置的命令(仅供需要回退时使用):
sudo bash /home/airan/ptp-modes/20261030-180950/restore-c3.sh
该回退脚本只恢复 Spark 的三个 PTP 文件;不会回退 Aerial YAML、RU 的 peer MAC/无线启用状态,或物理连线。完整回到操作前状态还需恢复 Aerial 的启动前 YAML,以及 RU 四路 radio 的旧 peer MAC、shutdown 和 lna shutdown。仅恢复 Spark 客户端配置,也不会自动建立完整 C3 的外部 RU 授时链路。
原 install_services.sh 没有被修改,重新安装仍可能覆盖这里的双端口 C1 配置。重新生成配置前应先保留当前配置。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)