4. RoCEv2协议栈与无损以太网基础
在AI训练集群中,RDMA over Converged Ethernet version 2(RoCEv2)几乎是事实上的高性能网络承载方式。它把IBTA定义的RDMA语义封装进UDP/IP报文,使RDMA可以运行在标准以太网之上,从而兼顾低CPU开销、低时延与大规模组网能力。但RoCEv2本身并不保证无损,它只是把“无损”的责任交给了以太网链路层和拥塞控制机制。理解PFC、ECN、DCQCN三者的分工与配合,是设计AI集群网络的基础。
RoCEv2协议栈:从应用语义到以太网帧
RoCEv2的报文封装层次自下而上为:以太网头部、IP头部、UDP头部、IB传输头(BTH)、扩展传输头(ETH)以及RDMA载荷。其中UDP目的端口固定为4791,源端口通常由硬件按流哈希生成,用于ECMP负载分担。BTH中的OpCode区分SEND、RDMA WRITE、RDMA READ等操作,PSN(Packet Sequence Number)用于检测丢包与乱序。与RoCEv1直接封装在以太网层不同,RoCEv2引入IP层后可跨三层路由,这是它适合大规模AI集群的关键。
需要特别注意的是,RoCEv2对丢包极其敏感。一次RDMA WRITE丢包会触发Go-Back-N重传,导致整条QP(Queue Pair)停顿,时延抖动远大于TCP。因此RoCEv2网络必须尽量做到“不丢包”,而不是“丢包后快速恢复”。这正是PFC与ECN存在的意义。
PFC:链路级反压的最后防线
PFC(Priority Flow Control)是IEEE 802.1Qbb定义的链路层流控机制。它允许交换机或网卡在某个优先级队列达到阈值时,向对端发送PAUSE帧,要求对端暂停该优先级的发送。与全局PAUSE不同,PFC按优先级独立控制,因此可以把RDMA流量放在一个专用优先级(如优先级3),避免被存储或管理流量影响。
PFC的关键参数是Xoff和Xon阈值。Xoff是触发发送PAUSE的队列深度,Xon是发送RESUME的队列深度。两者之间需要留出足够的缓冲,以吸收PAUSE帧传播期间仍在途的报文。若Xoff设置过高,队列可能溢出丢包;若Xoff设置过低,PFC会频繁触发,导致链路利用率下降。在AI集群中,通常建议Xoff设置在端口缓冲的30%~50%,Xon设置在Xoff的60%~80%,具体需结合端口速率和RTT计算。
PFC的隐患同样明显。当一条链路被PAUSE后,上游交换机可能因为无法发送而积压,进而向更上游发送PAUSE,形成PFC风暴。此外,同一优先级内不同流之间会发生队头阻塞(HOL),一条拥塞流可能拖慢同优先级的所有流。因此PFC应作为最后防线,而不是主要拥塞控制手段。
ECN与DCQCN:端到端拥塞控制的主动路径
ECN(Explicit Congestion Notification)在IP头部使用两个比特标记拥塞。交换机在队列深度超过Kmin但未到Kmax时,以概率标记经过的报文;超过Kmax则全部标记。接收端收到带ECN标记的报文后,生成CNP(Congestion Notification Packet)回送给发送端。发送端据此降低发送速率。整个过程不需要丢包,因此非常适合RoCEv2。
DCQCN(Data Center Quantized Congestion Control)是微软提出的RoCEv2拥塞控制算法,它把ECN标记与速率调整结合起来。发送端维护一个速率R和参数α。收到CNP后,α增大,速率按比例下降;之后速率再逐步恢复。DCQCN的关键参数包括:Kmin、Kmax、Pmax(最大标记概率)、α更新周期、速率恢复定时器等。在AI集群中,Kmin通常设置为端口缓冲的10%~20%,Kmax为40%~60%,Pmax为1%~10%。
DCQCN与PFC的协同逻辑是:ECN先触发,让发送端平滑降速;只有当ECN来不及抑制、队列继续增长到Xoff时,PFC才介入。这样既避免了丢包,又减少了PFC触发频率。实际调优时,应确保Kmin明显小于Xoff,给DCQCN留出反应时间。
AI集群适用性分析
AI训练流量具有明显的突发性和同步性。以AllReduce为例,所有GPU在同一时刻发送梯度,形成微突发(microburst)。这种流量模式下,PFC容易被频繁触发,而ECN+DCQCN则能通过提前标记平滑速率。因此,在AI集群中推荐以ECN+DCQCN为主、PFC为辅的配置策略。
具体到参数设计,假设100Gbps端口、RTT约10μs、端口缓冲为4MB。若Kmin设为400KB、Kmax设为2MB、Pmax为5%,则DCQCN可以在队列达到400KB时开始降速,避免队列继续增长到PFC阈值。PFC的Xoff可设为2.5MB,Xon设为1.8MB,作为最后防线。这样的配置在典型AI集群中可显著降低PFC触发次数,同时保持零丢包。
总结来看,RoCEv2的无损能力依赖PFC、ECN、DCQCN三层机制的协同。PFC提供链路级保护,ECN提供拥塞信号,DCQCN完成端到端速率调整。在AI集群中,应以ECN+DCQCN为主要手段,PFC作为兜底,并通过合理的阈值设计避免PFC风暴和HOL阻塞。理解这三者的分工与参数关系,是后续进行网络调优和故障排查的基础。