↓ 跳过正文

利旧 400G AOC / MPO 线缆复用前的 4 小时压力测试:PRBS-31Q 双向验收与判定标准

·4780 字·10 分钟·
作者
闫工
十年运营商机房 IT 运维,CCIE。做数据中心网络架构、GPU 服务器与裸金属交付,顺手写点自研小工具。

📌 转载说明:本文首发于微信公众号《闫工的算力工具箱》 原文链接:https://mp.weixin.qq.com/s/6p2X3tvbkUIj_evCEWfQFQ

测试对象:利旧(退役 / 拆机 / 库存回收)的 400G AOC 线缆 / MPO 光纤跳线 + QSFPDD 光模块 测试码型:PRBS-31Q(Media-side 硬件 PRBS),正反双向各 4 小时 测试环境:H3C S9825-64D · Comware V9.1.043, Release 9130(该机型软件自带 Media-side PRBS 功能;换用其他支持该功能的交换平台,命令需相应调整) 规模:2 Spine + 4 Leaf = 6 台交换机,128 根线缆/批 本文覆盖:测试原理、判定标准、前置准备、脚本执行、结果解读与排错

— — —

概述
#

前阵子从退役机柜里拆出来一批 400G AOC 线缆和 QSFPDD 模块,外观完好、插上端口也能 up。但利旧件和新到货件最大的区别是——它没有质保,也没有可追溯的使用历史。这根线经历过多少次插拔、被弯折过什么角度、拆下来之前在什么负载下工作过,全都无从查证。

400G 由 8 条 50G PAM4 通道(Lane)并行组成,单条 Lane 出现虚焊、错位或光衰,不会阻止端口协商成功。端口照样 up,业务照样跑,只是那一路在持续消耗 FEC 的纠错余量。日常流量有 FEC(前向纠错)兜底,轻微误码被静默修正,应用层没有感知;等 FEC 修不动时故障才集中暴露,通常发生在训练任务跑到关键节点的深夜。

所以要绕开上层协议,直接看物理层。这套方案用 PRBS-31Q 硬件码型直测物理层,在 4 小时内暴露线缆与模块的余量问题;通过 forward + reverse 双向各 4 小时覆盖 AOC 两端的 TX/RX 独立通道,让旧件的隐性损伤无处可藏。

如果你手头也有利旧线缆要复用,这篇文章仅作研究参考——先知道什么算合格,再看怎么测(判定标准见下一章)。

— — —

一、判定标准
#

1.1 PASS / WARNING / FAIL 三档
#

结果按最差指标决定:4 小时压测中任一指标触碰 FAIL,整根线缆判定 FAIL。同一根线在两个方向上取更差的一次作为最终结论。

检查项PASSWARNINGFAIL
告警(LOL 失锁)无—存在任何 LOL
RX 光功率> -8 dBm-10 ~ -8 dBm≤ -10 dBm
RX 光功率波动< ±1.5 dBm±1.5 ~ ±3.0 dBm> ±3.0 dBm
当前 BER< 1E-121E-12 ~ 1E-10> 1E-10
eSNR> 22 dB18 ~ 22 dB≤ 18 dB
温度变化< ±5°C±5 ~ ±8°C> ±8°C
TX 光功率波动< ±1.5 dBm±1.5 ~ ±3.0 dBm> ±3.0 dBm

三档怎么处置:

判定处置
PASS通过,可进入复用清单
WARNING单项指标接近临界,可限于非关键业务,建议缩短复检周期
FAIL淘汰,不得上架

1.2 阈值为什么比手册宽
#

初版脚本把光功率波动 FAIL 阈值设为 ±1.0 dBm,结果 4 小时压测中大量正常线缆的光功率抖动达到 1~2.x dBm,被误判为 FAIL——一度怀疑这批利旧件整体都有问题。

实测数据表明,400G 光模块在 4 小时连续压测下的光功率波动本就大于手册给出的理论健康值。阈值调整后:

指标原阈值(FAIL)调整后 FAIL调整后 WARN
RX 光功率波动±1.0 dBm±3.0 dBm±1.5 dBm
温度变化—±8°C±5°C

调整后重跑,误杀清零:128 端口实测中 FAIL 全部对应真实物理故障。

💡 阈值的经验:压测阈值应当用真机数据校准,不能照抄手册。手册给的是理论健康值,实测波动大于理论值是常态。文中的阈值来自 H3C S9825-64D 上跑出的实测数据,其他平台需要重新校准再定档。

— — —

二、原理与背景
#

2.1 利旧件的典型隐患
#

利旧线缆与模块的损伤分两类:一类能通过外观初检筛掉,一类必须靠压测才能暴露。

外观初检可识别:

检查项典型问题
连接器端面划伤、污染、研磨层磨损(多次插拔的累积损伤)
卡扣与锁止结构卡扣断裂、卡止力不足(插不紧或运行中脱出)
外皮与应力释放外皮开裂、应力释放套松脱、过度弯折痕迹
标签与追溯标签丢失或字迹模糊,导致来源与使用批次不可追溯

必须靠压测暴露:

隐患类型成因压测中的表现
激光器老化模块累计通电时长过长,发光效率衰减RX 光功率偏低、波动偏大
单 Lane 劣化内部焊点或耦合结构受应力后接触不良该 Lane BER 偏高,或直接 LOL 失锁
端面微损伤肉眼不可见的研磨层磨损eSNR 偏低,误码率贴近门限
温漂敏感性上升长期使用后器件对温度变化更敏感温度波动时相关指标同步恶化

📌 结论:利旧件不能只做外观检查就上架。外观合格只能说明"看起来没问题",压测数据才能说明"性能余量还剩多少"。

2.2 为什么不能只看"灯亮"
#

观测方式能发现的问题发现不了的问题
端口 up / 速率协商链路完全不通、速率不匹配单 Lane 劣化、光衰余量不足
业务流量跑通应用层可见的连通性被 FEC 修正的误码
PRBS 压测物理层误码、Lane 级劣化、光功率漂移—

FEC 的纠错能力是有限的:当误码率接近 FEC 门限,链路会处于"能跑但脆弱"的状态,环境温度、机柜振动、端面污染任一变化都可能把它推过阈值。

2.3 PRBS-31Q 与 8 Lane 结构
#

PRBS(伪随机二进制序列)是专用于高速链路误码性能测试的码型。本方案使用 PRBS-31Q(Media-side 硬件码型),序列长度 2³¹−1,约 21 亿 bit 周期,是商用模块可用的最严酷码型之一。

特性说明
瞬态误码检出强码型足够长,偶发误码难以逃逸
绕过上层协议不依赖业务报文,链路物理 up 即可测,直接暴露物理层问题
8 Lane 独立400G = 8 × 50G PAM4,每 Lane 独立发送比对,定位到具体通道

测试信号流:发送端 ASIC → Media Generator 注入 PRBS-31Q → 光模块 TX → 8 Lane 并行 → 对端光模块 RX → Media Checker 比对 → 返回 BER / eSNR 读数。

2.4 为什么必须双向各跑 4 小时
#

一根 AOC 线缆两端各有独立的发射与接收电路,单方向只验证了线缆一半的物理路径(一端 TX → 另一端 RX)。利旧件的方向性损伤很常见——某一端连接器在拆卸过程中受过力、接口内针脚磨损程度不同——这类问题只在反向测试中才会暴露。

方向发送端(generator)接收比对端(checker)
forwardSpineLeaf
reverseLeafSpine

⚠️ 采集端必须跟随方向翻转:BER / LOL 只在 checker(接收比对)端有读数。reverse 方向时 checker 是 Spine,若脚本仍从 Leaf 采集,取到的是 generator 端数据,全程为空。

— — —

三、规划与准备
#

3.1 测试床拓扑
#

利用现网 Spine-Leaf 架构作为测试床,一批可测 128 根线缆(4 Leaf × 16 端口):

角色设备名管理 IP(示例)测试角色
Spine01SPINE0110.0.0.1发送端组 1
Spine02SPINE0210.0.0.2发送端组 2
Leaf01~04LEAF01~0410.0.0.11~14接收端组 1~4

端口映射:Spine01 的 1/0/164 对应 Leaf0104 的 1/0/116;Spine02 的 1/0/164 对应 Leaf0104 的 1/0/1732。单批共 128 根线缆。

利旧 400G AOC / MPO 线缆复用前的 4 小时压力测试:PRBS-31Q 双向验收与判定标准

图:Spine 用全 64 口 400G,每台 Leaf 用 32 口接收两个方向;8 束 MPO AOC 跨接,配色与右下角目标 Leaf 对应

单批覆盖范围:128 根线缆 × 2 个方向 = 256 条测试链路,每方向 4 小时,合计 8 小时(含预热与报告生成约 8.5 小时)。

3.2 硬件准备
#

项目检查要点
来源清点与外观初检记录每根线的回收来源与设备编号;外皮开裂、卡扣断裂、端面明显划伤的直接淘汰,不进压测
待测线缆/模块按 128 根/批分组,两端贴同编号标签(如 Cable-001),便于 FAIL 定位
MPO 端面清洁使用专用 MPO 清洁笔(cletop)清洁所有端面
交换机端口确认端口无物理损伤、无灰尘
线缆插接到位插入时听到"咔哒"声才算到位

3.3 环境与依赖
#

# 跳板机连通性验证(6 台交换机)
for ip in 10.0.0.1 10.0.0.2 10.0.0.11 10.0.0.12 10.0.0.13 10.0.0.14; do
    ping -c 2 $ip && echo "OK $ip" || echo "FAIL $ip"
done
# Python 依赖
sudo apt install -y python3-venv
python3 -m venv ~/400g_test/venv
source ~/400g_test/venv/bin/activate
pip install paramiko
# 验证 SSH 可登录(返回 Release 字样即成功)
for ip in 10.0.0.1 10.0.0.2 10.0.0.11 10.0.0.12 10.0.0.13 10.0.0.14; do
    ssh -o ConnectTimeout=5 admin@$ip "display version | include Release"
done
# 确认光模块已上电、8 Lane 全部 Activated
display transceiver status interface FourHundredGigE 1/0/11

利旧 400G AOC / MPO 线缆复用前的 4 小时压力测试:PRBS-31Q 双向验收与判定标准

图:display transceiver status 实测输出,8 个 Lane 全部 Activated,可进入下一步配置

📌 未配置 PRBS 前,光模块的 Media Output / Media Input 显示 Disable 属正常状态;配置 PRBS 后 Media 端才会变为 Enable。

— — —

四、实施步骤
#

4.1 脚本组成
#

测试由两个文件构成,部署在跳板机上,通过 SSH 自动控制 6 台交换机:

文件职责
config.py交换机地址与账号、端口映射、测试时长、判定阈值
str.py主逻辑:长连接管理、并发采集、报告生成,支持 --direction forward/reverse

关键实现点:

  • 使用 transceiver lane pattern media-generator/media-checker PRBS-31Q 一条命令配置全部 8 Lane;
  • SSH 会话全程复用,自动处理 --More-- 分页与 Continue? 二次确认;
  • 配置后用 display this 回读确认,避免"命令已下发但未生效"的假阳性;
  • 每 15 分钟采集一次诊断、告警、BER、eSNR。

4.2 执行流程
#

# 进入工作目录,清理 Python 缓存
cd ~/400g_test && rm -rf __pycache__ && source venv/bin/activate

# 替换 config.py 中的占位密码
sed -i "s/your_password/<实际密码>/g" config.py

# 挂 screen 防止 SSH 断连中断测试(8 小时任务必须)
screen -S stress_test

# 正方向:Spine 发 / Leaf 收,4 小时
python3 str.py --debug

# 正方向跑完,同一会话内直接起反方向:Leaf 发 / Spine 收,再 4 小时
python3 str.py --direction reverse --debug

# Ctrl+A 然后 D 退出但不杀进程;重连:screen -r stress_test

利旧 400G AOC / MPO 线缆复用前的 4 小时压力测试:PRBS-31Q 双向验收与判定标准

图:实测启动日志。6 台交换机 256 端口配置完成,Spine01/02 DOWN 端口数各 64,随后进入 4 小时压测

⚠️ rm -rf __pycache__ 是必须的:from config import * 会把旧阈值与端口映射缓存进 config.cpython-*.pyc,改完配置不清缓存,脚本仍按旧参数运行。

📌 测试期间不要拔插线缆:会影响链路状态与测试结果。正方向跑完后保持接线不动,直接以 --direction reverse 续跑。

4.3 预热与采集节奏
#

阶段时长操作
预热60 秒PRBS 信号建立、链路稳定
基线采集1 分钟采集初始诊断数据
持续压测4 小时每 15 分钟采集一次(共 16 轮)
最终采集1 分钟采集结束数据
报告生成自动输出 stress_test_report_*.txt + stress_test_data_*.json

— — —

五、结果解读与排错
#

拿到报告先别急着按 FAIL 数淘汰线缆。顺序是:先确认配置真的生效 → 再读报告 → 最后才定位到具体问题。跳过第一步,很容易把"没测上"当成"测坏了"。

5.1 配置生效验证
#

# 统计 400GE 端口 DOWN 数量,两台 Spine 均 ≥ 60 才算 PRBS 配置生效
display interface brief | include 400GE

未配置对端 checker 时端口显示 Current state: DOWN 属正常——两端都配上 PRBS 后才会 UP。

利旧 400G AOC / MPO 线缆复用前的 4 小时压力测试:PRBS-31Q 双向验收与判定标准

图:两台 Spine 的 64 个端口全部 DOWN,这是 PRBS 模式已生效的硬证据

✅ 报告里 FAIL 一片时,先回到这一步确认端口状态。如果端口没进 PRBS 模式,报告数字反映的是业务流量而不是物理层误码,整批数据作废。

5.2 报告结构
#

stress_test_report_YYYYMMDD_HHMMSS.txt
├── 报告头(时间、方向、参数、统计摘要)
├── 详细结果表格(每条链路状态)
├── 时间序列波动分析
└── 判定标准说明

利旧 400G AOC / MPO 线缆复用前的 4 小时压力测试:PRBS-31Q 双向验收与判定标准

图:128 条链路、PASS 112、FAIL 16、通过率 87.5%,共 1920 个数据点

5.3 FAIL 端口不等于坏线:识别 N/A
#

实测曾出现 16 个端口全部显示 N/A(无任何数据)导致整体 FAIL 的情况。N/A 通常是采集不到数据,而非物理故障,按概率排序:

可能原因排查方式
光模块未插入 / 未上电检查端口是否装齐模块
光纤端面脏污 / 接触不良清洁端面后重插
端口未配置 PRBS确认配置阶段是否成功下发
SSH 并发超时 / 解析失败降低 MAX_WORKERS 后重试

利旧 400G AOC / MPO 线缆复用前的 4 小时压力测试:PRBS-31Q 双向验收与判定标准

图:spine02 的 16 个端口温度 / RX 光功率 / Bias 全部显示 N/A,多为未接光模块或线缆

处理建议:压测前先用 display transceiver diagnosis interface X/X/X 逐个确认端口能读到数据,把读不到数据的端口提前排除在 PORT_MAPPING 之外。

5.4 按现象查表
#

排除了采集问题、确认配置也生效之后,剩下的 FAIL 才是真故障。常见现象与处理:

现象可能原因处理
大量端口 FAILMPO 端面脏污cletop 清洁所有端面后重测
配置 PRBS 报错模块不支持 CMIS 4.0检查模块兼容性
SSH 连接超时网络抖动 / 并发过高调小 MAX_WORKERS
脚本中途退出SSH 断开用 screen / tmux 运行
display transceiver diagnosis 无信息接口 DOWN先 display interface 确认状态
测试结果异常线缆未插紧拔出重插至听到"咔哒"声
VDM 首次读到 Max BER = 1.00E00计数器刚清零的饱和值属正常,运行后恢复真实读数

— — —

六、安全与规范
#

  1. 测试会完全中断业务

    必须在维护窗口或独立测试环境执行。

  2. 密码不得留占位符

    config.py 中所有 your_password 必须替换为实际值。

  3. 必须挂 screen / tmux

    单批 64 端口一轮采集涉及数百条 SSH 命令,断连即前功尽弃;双向合计 8 小时更要挂会话。

  4. MPO 端面必须清洁

    脏污会造成大面积 FAIL,污染测试结论。

  5. 按 PASS / FAIL 分区存放

    测试完成的线缆分区放置,避免混用。

  6. 正反两份报告都要存档

    上架前复核与后续复盘时对照查看。

  7. MAX_WORKERS 保持默认 16

    H3C SSH server 在高并发下会拒绝连接。

  8. 改完 config.py 必须清缓存

    rm -rf __pycache__ 后再运行。

— — —

参考
#

  • H3C S9825-64D 产品手册(Comware V9):端口诊断与 PRBS 配置章节
  • IEEE 802.3bs:400G 以太网 PAM4 调制与 FEC 规范
  • OIF-CEI-4.0:通用电气接口实现协议(28G/56G 通道误码要求)

声明:本文所述测试方法与判定标准,仅供技术研究与测试参考。实际操作请结合自身设备型号、厂商手册与生产环境要求,并务必在维护窗口或独立测试环境中执行。

相关文章