4. 关键性能指标定义与解读

在 AI 集群中,网络性能诊断的难点不在于“有没有指标”,而在于“指标之间如何互相解释”。单看带宽利用率 80% 可能很正常,但如果同时出现 PFC 暂停帧激增、ECN 标记比例上升、GPU 利用率周期性掉坑,那这条链路很可能已经进入拥塞—反压—降速的恶性循环。本节把 AI 集群最常用的九类指标放在同一条因果链上,说明每个指标“量的是什么、正常范围怎么判断、异常时指向哪里”。

一、基础三件套:带宽、时延、抖动

带宽分三个层次:链路物理带宽(如 400Gb/s)、有效吞吐(实际传输的 bit/s)、以及应用层有效载荷带宽。AI 训练中真正关心的是有效吞吐,因为 NCCL 的 AllReduce 会叠加协议头、重传和同步开销。判断依据:若链路利用率长期低于 60% 而 GPU 利用率也不高,瓶颈可能在计算或存储;若链路接近 100% 且 PFC/ECN 同时上升,瓶颈在网络。

时延在 AI 集群中通常拆成三段:端点处理时延(网卡、协议栈)、链路传播时延(约 5ns/m 光纤)、排队时延。排队时延是拥塞的直接产物,也是抖动的主要来源。诊断时优先看 P99 而非平均值,因为 AllReduce 的完成时间由最慢的那条流决定。

抖动是时延的方差。在 RoCEv2 无损网络中,抖动放大往往先于丢包出现:当交换机队列开始堆积,同一流的报文到达间隔被拉长,NCCL 的 ring/tree 算法会因等待最慢分片而空转。经验上,若 P99 时延是 P50 的 5 倍以上,就应检查 ECN 与 PFC 配置。

二、丢包率:无损网络里的“隐形杀手”

RoCEv2 依赖无损链路,任何丢包都会触发重传,而重传在 AI 训练中代价极高。丢包率通常用 rx_discards、tx_discards、out_of_buffer 等计数器衡量。判断标准:在无损网络中,持续丢包率应接近 0;若出现非零丢包,优先排查 MTU 不一致、PFC 未生效、或链路误码。注意,丢包率低不代表没问题——PFC 和 ECN 正是为了避免丢包而引入的“代价机制”。

三、PFC 暂停帧与 ECN 标记:一对“刹车与油门”

PFC(Priority Flow Control)是链路级的反压机制:当交换机某优先级队列超过阈值,向下游发送 PAUSE 帧,要求对端暂停发送。PFC 暂停帧计数(rx_pause、tx_pause)反映的是“已经堵到必须刹车”。少量 PFC 可接受,但持续增长意味着拥塞扩散,甚至可能引发 PFC 风暴和死锁。

ECN(Explicit Congestion Notification)是端到端的拥塞信号:交换机在队列超过阈值时标记 IP 头 ECN 位,接收端通过 CNP 通知发送端降速。ECN 标记比例(ecn_marked / 总包数)反映“提前预警”的频率。理想状态是 ECN 先动、PFC 后动;若 PFC 先于 ECN 大量出现,说明 ECN 阈值设置过高或未启用。

调优方向:让 ECN 在队列 30%~50% 时开始标记,PFC 在 70%~80% 时才触发。这样绝大多数拥塞由 ECN 平滑吸收,PFC 只作为最后防线。

四、拥塞控制窗口:从 DCQCN 到端到端速率

RoCEv2 常用 DCQCN 拥塞控制。发送端维护一个拥塞窗口(cwnd)和速率(rate),收到 CNP 后按乘性降速,随后加性恢复。窗口大小直接决定单流吞吐:窗口过小则带宽跑不满,窗口过大则队列堆积。诊断时关注 cwnd 的波动幅度——若频繁大幅抖动,说明 ECN 标记过于激进或 RTT 估计不准。

五、GPU 利用率与网络相关性:把两条曲线叠起来看

GPU 利用率(sm__cycles_active 或 nvidia-smi 的 util)单独看没有意义。真正有价值的是把 GPU 利用率曲线与网络吞吐、PFC、ECN 曲线放在同一时间轴上对比:

  • GPU 利用率周期性掉坑,同时网络吞吐也掉坑 → 网络拥塞导致通信等待;
  • GPU 利用率掉坑但网络吞吐平稳 → 瓶颈在计算、数据加载或同步;
  • GPU 利用率高但网络吞吐低 → 计算密集,网络不是瓶颈;
  • GPU 利用率与 PFC 暂停帧同步上升 → 反压已经传导到计算侧。

下面这张图把九类指标组织成一条从“链路负载”到“GPU 表现”的因果链,并标出每类指标的典型观察点和异常指向。

AI 集群网络性能指标因果链 从链路负载 → 拥塞信号 → 端到端速率 → GPU 表现 链路负载层 带宽利用率 / 有效吞吐 观察:tx/rx bytes、util% 拥塞信号层 ECN 标记 / PFC 暂停帧 观察:ecn_marked、rx_pause 端到端速率层 拥塞控制窗口 cwnd 观察:cwnd、rate、CNP GPU 表现层 GPU 利用率 观察:sm_active% 时延 / 抖动 P50 / P99 时延、抖动方差 排队时延是主要来源 丢包率 rx/tx_discards、out_of_buffer 无损网络中应接近 0 典型组合判读 健康 带宽高、ECN 少量 PFC 接近 0 时延平稳、无丢包 GPU 利用率稳定 轻度拥塞 ECN 标记上升 PFC 少量出现 P99 时延抬升 cwnd 开始波动 严重拥塞 PFC 持续增长 ECN 大量标记 抖动剧烈、可能丢包 GPU 利用率掉坑 非网络瓶颈 网络指标正常 GPU 利用率仍低 查计算/存储/同步 排除网络因素

六、实操:如何把指标串起来看

假设一个 8 节点、每节点 8 张 400Gb/s 网卡的集群,运行 175B 模型训练。采集窗口 10 秒,观察到以下示例数据(均为教学假设值):

指标正常参考本次观测指向
链路带宽利用率70%~90%95%接近饱和
P99 时延< 50μs180μs排队严重
抖动(P99-P50)< 20μs120μs队列不稳定
丢包率≈ 00.001%已出现重传
PFC 暂停帧接近 0持续增长反压已触发
ECN 标记比例1%~5%18%拥塞预警频繁
cwnd稳定大幅抖动降速恢复反复
GPU 利用率> 90%72% 周期性掉坑通信等待

判读顺序:先看 GPU 利用率是否与网络吞吐同步掉坑,确认网络是瓶颈;再看 PFC 与 ECN 谁先动。本例中 ECN 标记 18% 且 PFC 持续增长,说明 ECN 阈值可能偏高,队列已经堆到触发 PFC 才被标记。调整方向:降低 ECN 标记阈值(例如从 60% 队列降到 40%),让 ECN 更早介入,减少 PFC 触发;同时检查是否有单条流或单个节点成为热点,必要时用 perftest 或 ib_write_bw 做点对点基线测试。

注意:PFC 暂停帧和 ECN 标记不是“越低越好”。完全为 0 可能意味着阈值设置过高、拥塞未被及时感知;持续高位则说明网络长期过载。关键是让 ECN 承担主要调节、PFC 只做兜底。

七、指标采集与观察建议

在 NVIDIA 集群中,常用采集路径包括:网卡侧 ethtool -S 查看 rx_pause、tx_pause、rx_discards;交换机侧通过 show interface counters 或 telemetry 流式采集 ECN/PFC 计数;GPU 侧用 DCGM 采集 sm__cycles_active。建议统一时间戳,把三类数据对齐到同一时间轴,才能做相关性判断。采集频率建议 1 秒,训练任务启动后至少观察 5 分钟,覆盖 warmup 和稳态两个阶段。

最后强调一个原则:任何单一指标都不能直接下结论。带宽高可能是好事,也可能是拥塞前兆;PFC 为 0 可能是健康,也可能是阈值失灵。把带宽、时延、抖动、丢包、PFC、ECN、cwnd、GPU 利用率放在同一条因果链上交叉验证,才能从“看到异常”走到“定位原因”。