4. 关键性能指标与健康基线
在高速计算网络中,"网络是否健康"不能靠 ping 通不通来判断。一条 400Gb/s 的 InfiniBand 或 RoCE 链路,即使业务仍能跑通,也可能因为持续误码、PFC 反压或 ECN 过度标记,把 RDMA 有效带宽压到标称值的 30%。因此,可观测性工程的第一步,是把"健康"翻译成一组可采集、可比较、可告警的量化指标,并为每个指标建立基线。本节围绕七类核心指标,说明它们的物理含义、采集位置、典型阈值,以及如何用一段稳定窗口的数据建立基线。
一、七类核心指标的定义与采集点
端口误码(Port Errors)是链路层最基础的指标。在 IB 网络中,主要看 PortXmitData、PortRcvData 与 PortRcvErrors、SymbolErrorCounter、LinkErrorRecoveryCounter。误码率 BER 通常用 PortRcvErrors / PortRcvData 估算。健康链路在 FEC 纠错后应接近 0;若 SymbolErrorCounter 持续增长,说明物理层信噪比不足,常见于光模块老化、连接器污染或线缆弯折过度。
链路抖动(Link Flapping)指端口在 Active 与 Down/Init 之间反复切换。采集 LinkDownedCounter 与 PortXmitWait 的时间序列,若 5 分钟内 LinkDownedCounter 增量大于 0,即视为抖动事件。抖动往往先于误码告警出现,是链路劣化的早期信号。
PFC 风暴(PFC Storm)发生在 RoCEv2 无损网络中。当某端口持续发送 PFC Pause 帧,上游端口被迫暂停发送,反压沿链路扩散,形成"暂停风暴"。关键指标是 rx_pfc_pause_duration、tx_pfc_pause_duration 以及各优先级(Priority)的 PFC 帧计数。健康状态下 PFC 应偶发且短暂;若某优先级 PFC 持续时间占比超过 5%,说明该优先级流量已出现拥塞。
ECN 标记率(ECN Marking Rate)是 DCQCN 拥塞控制的输入信号。交换机在队列超过 Kmin 后开始对 IP 报文打 CE 标记,超过 Kmax 后全部标记。标记率 = CE 标记报文数 / 总报文数。标记率过低(<0.1%)说明拥塞控制未生效;过高(>10%)说明网络已持续拥塞,需要调整 Kmin/Kmax 或增加带宽。
RDMA 重传(RDMA Retransmission)反映端到端可靠性。RoCEv2 中可通过 out_of_sequence、retransmit 计数器观察;IB 中看 PortRcvRemotePhysicalErrors 与 PortRcvSwitchRelayErrors。重传率 = 重传包数 / 总发送包数,健康值应低于 0.01%。重传会直接消耗有效带宽,并放大尾延迟。
GPU Direct 带宽衡量 GPU 显存与网卡之间的数据通路效率。用 nvidia-smi nvlink -s 看 NVLink 状态,用 ib_write_bw --use_cuda 测 GPU Direct RDMA 带宽。健康基线应达到链路标称带宽的 85% 以上,例如 400Gb/s 链路实测应 ≥ 340Gb/s。
NCCL 集合通信效率是分布式训练的关键指标。用 nccl-tests 的 all_reduce_perf 测得的 bus bandwidth 与理论峰值之比即为效率。健康基线通常要求 AllReduce 效率 ≥ 80%,若低于 60%,需排查是否走了 PCIe 而非 NVLink、是否发生 PFC 反压或 ECN 过度标记。
二、基线建立的方法与实操
基线不是拍脑袋定的阈值,而是从"已知健康"的运行窗口中统计出来的。推荐做法是:在业务稳定、无告警、无变更的时段,连续采集至少 30 分钟,对每个指标计算 P50、P95、P99 分位数。以 P99 为参考,乘以 1.5 作为告警阈值,乘以 2.0 作为严重阈值。例如某 400Gb/s RoCE 链路在稳定窗口内 ECN 标记率 P99 为 2.3%,则告警阈值设为 3.45%,严重阈值设为 4.6%。
采集工具方面,IB 网络可用 perfquery 与 ibdiagnet;RoCEv2 网络可用 ethtool -S 读取 rx_pfc_pause_duration、tx_pfc_pause_duration、rx_prioX_pause 等计数器;ECN 标记率可从交换机 show interface counters 或 ethtool -S 的 rx_ecn_marked 获取。GPU Direct 与 NCCL 则通过 ib_write_bw 和 nccl-tests 主动测量。
# 示例:采集 RoCE 端口 PFC 与 ECN 计数器(每 1s 一次,共 60 次)
for i in $(seq 1 60); do
ethtool -S eth0 | grep -E "pfc|ecn" >> roce_counters.log
sleep 1
done
# 示例:测量 GPU Direct RDMA 带宽(400Gb/s 链路)
ib_write_bw -d mlx5_0 --use_cuda=0 -s 1048576 -n 10000
# 示例:NCCL AllReduce 效率测试(8 GPU)
./all_reduce_perf -b 8 -e 8G -f 2 -g 8
三、指标之间的因果链与排障顺序
这七类指标不是孤立的,它们之间存在清晰的因果链:物理层误码升高 → 链路重传增加 → 有效带宽下降 → 队列积压 → PFC 反压或 ECN 标记率上升 → RDMA 重传加剧 → NCCL 效率下降。因此排障时应从底层往上查:先看 SymbolErrorCounter 是否增长,再看 LinkDownedCounter,然后看 PFC 与 ECN,最后才怀疑应用层配置。
最后需要强调,基线是动态的。业务流量模式变化、固件升级、拓扑调整后,都应重新采集基线。建议每季度复评一次,并在每次重大变更后 24 小时内做一次快速基线校验,确保告警阈值始终反映当前网络的真实健康水平。