3. 流控机制概述:流控的作用、常见流控协议简介
3.1 为什么需要流控:从“发送方想发”到“接收方能用”
在无损网络中,流控(Flow Control)解决的是一个看似简单却极其关键的问题:发送方想发数据,但接收方不一定来得及处理。如果发送方持续以线速向接收方推送报文,而接收方的处理能力、缓冲区深度或下游链路带宽不足,数据就会在接收端堆积,最终导致缓冲区溢出、报文丢弃。
传统TCP网络允许丢包,并通过重传机制恢复。但无损网络(如RoCEv2、FC、InfiniBand)要求零丢包,因为即使极小的丢包率也会引发TCP全局同步、RDMA重传风暴,使实际吞吐量断崖式下降。因此,无损网络必须依赖链路级或端到端的流控机制,在缓冲区尚未溢出之前,主动让发送方“踩刹车”。
流控的本质可以概括为三个层次:
- 防溢出:通过反馈信号限制发送速率,避免接收端缓冲区溢出;
- 保公平:多个流共享链路时,避免某个流独占带宽导致其他流饥饿;
- 提效率:在无损前提下,尽可能提高链路利用率,减少因流控造成的空转等待。
3.2 三种主流流控协议:PFC、ECN、QCN
当前无损网络中应用最广泛的流控协议主要有三种:PFC(Priority Flow Control,优先级流控)、ECN(Explicit Congestion Notification,显式拥塞通知)和QCN(Quantized Congestion Notification,量化拥塞通知)。它们作用层次不同、机制不同、适用场景也不同。
| 协议 | 作用层次 | 触发方式 | 反馈对象 | 典型场景 |
|---|---|---|---|---|
| PFC | 链路层(L2) | 接收端缓冲区超过阈值 | 直接上游交换机/网卡 | RoCEv2无损网络、FC存储网络 |
| ECN | 网络层(L3) | 交换机队列深度超过阈值 | 发送端(通过ACK标记) | TCP/IP网络、RoCEv2(配合DCQCN) |
| QCN | 链路层/端到端 | 交换机采样报文并计算速率偏差 | 发送端(通过CNM报文) | 数据中心以太网(较少单独使用) |
3.2.1 PFC:逐跳的“暂停/恢复”机制
PFC是IEEE 802.1Qbb标准定义的链路层流控机制。它将物理链路划分为8个优先级队列,每个队列独立进行流控。当接收端某个优先级的缓冲区占用超过设定的XOFF阈值时,接收端会向对端发送一个PFC暂停帧(Pause Frame),携带对应的优先级位图,请求对端暂停发送该优先级的数据。当缓冲区占用回落到XON阈值以下时,接收端发送恢复帧,对端继续发送。
PFC的关键参数包括:
- XOFF阈值:触发暂停的缓冲区占用水位;
- XON阈值:解除暂停的水位;
- 暂停时间(Pause Quanta):暂停帧中指示的暂停时长,单位是512比特时间。
# 示例:在交换机接口上查看PFC统计(NVIDIA/Cisco风格)
switch# show interface ethernet 1/1 priority-flow-control
Interface: Ethernet1/1
PFC Mode: On
Priority 3: XOFF=120KB, XON=80KB, Tx Pause Frames=1523, Rx Pause Frames=0
Priority 4: XOFF=120KB, XON=80KB, Tx Pause Frames=0, Rx Pause Frames=0
3.2.2 ECN:端到端的“标记-反馈”机制
ECN是IP层和传输层配合的拥塞通知机制(RFC 3168)。交换机在检测到队列深度超过ECN阈值时,不再丢弃报文,而是在IP头中标记CE(Congestion Experienced)位。接收端收到带CE标记的报文后,在TCP ACK中设置ECE(ECN-Echo)标志,发送端据此降低发送速率(通常通过减少拥塞窗口)。
在RoCEv2无损网络中,ECN通常与DCQCN(Data Center Quantized Congestion Notification)算法配合使用。DCQCN在发送端维护一个速率衰减因子,收到ECN反馈后按比例降速,并通过定时器逐渐恢复速率。
ECN的关键参数包括:
- ECN阈值(Kmin/Kmax):队列深度的低/高水位,超过Kmin开始标记,超过Kmax全部标记;
- 标记概率:在Kmin到Kmax之间,按比例或随机标记;
- 反馈延迟:从发送到收到ECN反馈的RTT时间。
# 查看ECN标记统计(Linux网卡)
ethtool -S enp3s0 | grep -i ecn
rx_ecn_marked: 2341
tx_ecn_marked: 0
3.2.3 QCN:基于采样的“速率调节”机制
QCN是IEEE 802.1Qau标准定义的链路层拥塞通知机制,主要面向数据中心以太网。QCN的独特之处在于:交换机不是通过队列深度触发,而是通过概率采样的方式,对经过的报文进行采样,并计算当前速率与期望速率的偏差。当偏差超过阈值时,交换机生成一个CNM(Congestion Notification Message)报文,直接发送给报文的源发送端。发送端收到CNM后,按照量化步长降低发送速率,并通过定时器逐渐恢复。
QCN相比PFC的优势在于:它是端到端的反馈,不会造成逐跳的拥塞蔓延;相比ECN的优势在于:它不需要传输层配合,直接作用于发送端网卡。但QCN的部署复杂度较高,且对交换机采样精度要求高,目前在实际数据中心中应用较少,更多被DCQCN(基于ECN)取代。
3.3 三种流控机制的关系与协同
在实际无损网络中,PFC、ECN、QCN并非互斥,而是常常协同工作。以典型的RoCEv2无损网络为例:
- ECN负责“远距离”拥塞通知:当核心交换机队列拥塞时,通过ECN标记通知发送端降速,这是第一道防线;
- PFC负责“最后一公里”的缓冲保护:当接收端或边缘交换机缓冲区仍然面临溢出风险时,PFC暂停帧作为兜底机制,防止丢包;
- QCN(如使用):在部分场景中替代或补充ECN,提供更精细的速率控制。
3.4 典型场景:RoCEv2无损网络中三种机制的分工
以RoCEv2(RDMA over Converged Ethernet version 2)为例,这是当前AI训练、HPC集群中最常见的无损网络场景。其流控体系通常采用DCQCN(Data Center Quantized Congestion Notification)算法,该算法正是ECN与PFC的有机结合:
- ECN负责“粗粒度”的端到端拥塞控制:核心交换机检测到队列拥塞后,在RoCEv2报文IP头中标记CE位。接收端网卡收到CE标记后,在CNP(Congestion Notification Packet)报文中反馈给发送端。发送端收到CNP后,按照DCQCN算法将发送速率减半(或按比例降低),并通过定时器逐渐恢复。
- PFC负责“细粒度”的链路保护:当ECN反馈来不及生效(例如瞬时突发流量),接收端或边缘交换机的缓冲区即将溢出时,PFC暂停帧立即生效,暂停对应优先级的报文发送,确保不丢包。
- QCN在RoCEv2中较少使用:因为DCQCN已经提供了更优的端到端速率控制,QCN的逐跳采样机制反而增加了交换机负担。
3.5 常见误区与复盘
3.6 本节小结
流控是无损网络的“交通警察”,PFC、ECN、QCN是三种核心的流控协议。PFC工作在链路层,通过暂停帧逐跳保护缓冲区;ECN工作在网络层,通过标记和反馈实现端到端拥塞控制;QCN通过采样和CNM报文实现精细速率调节。在实际部署中,ECN+PFC的组合(如DCQCN)最为常见,而QCN的应用相对较少。理解这三种机制的工作原理、参数含义和协同关系,是后续诊断流控参数冲突的基础。