2. 高速计算网络协议栈精要

在GPU高速计算集群中,一次AllReduce通信可能同时穿越NVLink、NVSwitch、InfiniBand或RoCEv2多条链路。如果排障时只盯着“网卡灯亮不亮”,往往会在错误的层面反复排查。理解协议栈的分层结构、各层的拥塞控制机制、RDMA语义的落点,以及NVLink/NVSwitch与IB/RoCE的边界,是建立故障域定位能力的前提。

一、两条主线的协议分层

InfiniBand与RoCEv2虽然都能承载RDMA语义,但分层方式差异明显。InfiniBand是一套完整的链路层到传输层体系:物理层定义SerDes速率与编码,链路层负责流控、虚通道(VL)与信用机制,网络层用GRH做全局路由,传输层提供RC、UC、UD等QP服务类型。RoCEv2则把IB传输层“搬”到以太网之上:RDMA语义仍由IB传输层承载,但链路层和网络层换成以太网与IP,UDP目的端口4791作为RoCEv2的标识,BTH头紧随UDP之后。

这一差异直接决定了故障域:InfiniBand的链路层自带基于信用的流控,天然无损;RoCEv2依赖PFC(Priority Flow Control)和ECN构建无损以太网,一旦PFC配置不一致或ECN阈值失配,就会从“无损”退化为丢包重传,RDMA性能断崖式下跌。因此,RoCEv2排障必须同时看以太网侧和RDMA侧,而IB排障更多聚焦在子网管理器(SM)、VL与信用上。

InfiniBand / RoCEv2 / NVLink 协议栈分层与故障域对照 InfiniBand 协议栈 传输层 RC / UC / UD · QP · BTH 网络层 GRH · 全局路由 · LID/GID 链路层 信用流控 · VL · 子网管理器 物理层 SerDes · 编码 · 速率协商 故障域特征 SM失联 · VL拥塞 · 信用耗尽 链路降速 · 符号错误 RoCEv2 协议栈 IB传输层(RDMA语义) RC / UC · QP · BTH UDP / IP 目的端口4791 · DSCP标记 以太网链路层 PFC · ECN · VLAN优先级 以太网物理层 25/100/200/400GE · FEC 故障域特征 PFC风暴 · ECN阈值失配 FEC误码 · DSCP映射错误 NVLink / NVSwitch GPU间直连 NVLink 4.0 · 900GB/s双向 NVSwitch交换 全互联 · 非阻塞 · SHARP NVLink-C2C CPU-GPU一致性互连 PCIe / C2C 边界 跨域需经网卡或C2C 故障域特征 NVLink降速 · NVSwitch端口 GPU拓扑识别错误 故障域划分原则:先定位协议层,再定位物理/逻辑边界;NVLink域内问题不经过IB/RoCE,IB/RoCE问题不经过NVSwitch

二、拥塞控制:IB靠信用,RoCE靠PFC+ECN

InfiniBand链路层的信用流控是逐跳的:发送端只有在收到接收端返回的信用(Credit)后才发送数据,因此链路本身不会因缓冲区溢出而丢包。拥塞通常表现为信用耗尽导致的发送停顿,此时应检查VL分配是否合理、是否有某条VL被大流量独占。IB还支持基于FECN/BECN的拥塞控制,但实际部署中更依赖SM的路径规划与VL隔离。

RoCEv2的无损依赖两个机制协同:PFC在链路层按优先级暂停帧,防止缓冲区溢出;ECN在网络层标记拥塞,由DCQCN算法在端侧降速。两者必须匹配:如果PFC只对优先级3生效,而RoCEv2流量被标记为优先级4,则PFC形同虚设;如果ECN的min-threshold设得过高,拥塞已经发生却来不及标记,DCQCN无法及时降速。典型配置中,交换机端口对PFC优先级3启用,ECN min-threshold设为缓冲区的一定比例(如150KB),max-threshold设为min的若干倍,标记概率随队列深度线性上升。

三、RDMA语义的落点

RDMA的核心语义包括Send/Recv、Read、Write、Atomic。在IB中,这些操作由QP承载,RC QP提供可靠有序的传输,UD QP提供不可靠数据报。在RoCEv2中,语义完全一致,但底层从IB链路层换成了UDP/IP,因此QP的可靠性由IB传输层保证,而网络层的丢包由传输层重传处理。这意味着RoCEv2的RDMA性能对丢包极其敏感:一次重传可能带来微秒级抖动,在AllReduce中会被放大。

排障时,ibv_devinfo可查看QP数量与状态,perfquery可读取端口计数器。对于RoCEv2,还需关注ethtool -S中的PFC暂停帧计数与ECN标记计数。若rx_pause持续增长,说明PFC频繁触发,需检查上游流量是否突发过大;若ecn_marked增长但吞吐未降,说明DCQCN参数可能未生效。

四、NVLink与NVSwitch的互连机制

NVLink是GPU之间的高带宽直连,NVSwitch则提供全互联交换。以DGX H100为例,8颗GPU通过NVSwitch实现全互联,任意两GPU间带宽可达900GB/s双向。NVLink域内的通信不经过IB网卡,因此故障域独立:如果nvidia-smi topo -m显示GPU间为NVLink连接,则AllReduce的机内部分不涉及IB/RoCE;若显示为PCIe或SYS,则说明NVLink链路可能降级或未识别。

NVSwitch的故障通常表现为端口降速或链路训练失败。可通过nvidia-smi nvlink -s查看各链路速率,正常应为25GB/s per lane(NVLink 4.0)。若某条链路显示为12.5GB/s,说明降速,需检查线缆、连接器或散热。NVLink-C2C则用于CPU-GPU一致性互连,在Grace Hopper等架构中,C2C带宽与NVLink域共同构成GPU的内存访问路径。

五、故障域划分的实践方法

面对一个通信性能问题,建议按以下顺序定位故障域:

  1. 确认通信路径:用nvidia-smi topo -m查看GPU间拓扑,判断是否经过NVLink/NVSwitch,还是经过PCIe/IB。
  2. 区分域内与域间:若问题发生在NVLink域内,优先检查NVLink速率与NVSwitch端口;若跨节点,则进入IB/RoCE域。
  3. IB域检查:ibstat看端口状态,perfquery看符号错误与链路降速,ibdiagnet做子网健康检查。
  4. RoCEv2域检查:ethtool -S看PFC/ECN计数,mlnx_qos看优先级映射,cma_roce_mode确认RoCEv2模式。
  5. RDMA语义层检查:ibv_devinfo看QP状态,rdma statistic看重传与超时。
关键判断依据:若ibv_devinfo显示QP为RESET或ERROR,问题在RDMA语义层;若端口为ACTIVE但perfquery符号错误增长,问题在物理/链路层;若PFC暂停帧激增但ECN标记为零,问题在PFC与ECN的协同配置。

最后需要强调:NVLink/NVSwitch域与IB/RoCE域是两条独立的故障域,排障时不要混淆。机内AllReduce走NVLink,机间走IB或RoCEv2;如果机内拓扑识别错误,即使IB网络完全正常,整体性能也会受限于PCIe瓶颈。建立“先拓扑、后协议、再参数”的排查顺序,才能快速收敛到真正的故障域。