流控与无损可丢
背压如何成为死锁的必要条件,以及无损与可丢的权衡
核心要点:
- 背压是网络死锁的必要条件
- 可丢网络丢包即破坏「不可抢占」
- credit 与 PFC 是两种无损背压
- PFC 粗粒度暂停,credit 精确授额
- UEC 弃严格无损,link 可靠 + transport 容丢
前置阅读:
- 背压 / credit-based / PFC / 无损 / 可丢 / LLR 名词 → 11.1 互联通信死锁与流控总览 名词定义
- Coffman 四条件与死锁判据 → 11.2 死锁理论基础
- PFC 死锁的 CBD 成因与预防 → 11.4 PFC 死锁
背压为什么是死锁的必要条件?
无损是因,死锁风险是果——无损靠背压实现,而背压正是制造 Coffman「占有并等待」与「循环等待」两条件的机制。
- 无背压(可丢网络):缓冲满了直接丢包。丢包等于强制释放被占资源,破坏了 Coffman「不可抢占」条件,循环等待无法形成或维持。
- 有背压(无损网络):缓冲满了反向暂停上游。上游报文占着自己的缓冲、等下游释放——「占有并等待」成立;若这种等待沿网络成环,「循环等待」成立,死锁条件齐备。
因此一个网络是否需要操心死锁,取决于它是否要求无损。这条因果决定了下文两类网络的根本分野,也解释了为什么可丢网络(如传统 TCP/IP)从不讨论网络死锁——它们用丢包持续破坏「不可抢占」条件(Coffman 框架见 02-死锁理论基础)。
无损背压有哪两种实现,差别在哪?
实现无损有两条技术路线,都靠背压,但粒度与代价不同。
credit-based 流控按缓冲额度精确授权:接收方向发送方授予 credit(缓冲额度),发送方有多少 credit 就发多少。Ultra Ethernet 的 CBFC(Credit-Based Flow Control) 用两个 20-bit 循环计数器分别跟踪已消耗与已释放的 credit,按虚拟通道(VC)维护、周期性同步。它精确——接收方只授予确有空间的额度,从不超发,因此不需要为在途帧预留额外缓冲。NVLink、InfiniBand、UALink 的 link 层均采用。
PFC 按优先级粗粒度暂停:PFC(IEEE 802.1Qbb)当某优先级队列缓冲超阈值,向上游发 pause 帧暂停该优先级[1]。相比早期 802.3x(暂停整条链路),PFC 可对 8 个优先级类分别暂停,pause 时长以 pause quanta(暂停时长单位)逐类编码。代价是 pause 帧发出后到对端响应前仍有在途帧,必须预留 **headroom(余量缓冲)**吸收,且 headroom 大小需按链路长度 per-link 调优。PFC 是 RoCEv2 实现无损的标准手段。
| 维度 | credit-based(CBFC) | PFC(802.1Qbb) |
|---|---|---|
| 粒度 | 精确到接收方缓冲可容纳的额度 | 8 个优先级类粗粒度暂停 |
| 触发方式 | 接收方按 buffer 占用授予 credit | 缓冲超阈值发 pause 帧 |
| 在途帧处理 | credit 已预留,无需额外缓冲 | 需 headroom 吸收 pause 在途帧 |
| 调优负担 | 自动(按 buffer 占用) | 需 per-link headroom 调优 |
| 典型问题 | 实现复杂度高 | victim flow、pause storm、HoL 阻塞 |
| 采用 | NVLink / IB / UALink / UEC link 层 | RoCEv2 |
@tbl-deadlock-flowctrl-credit-pfc credit-based 与 PFC 对比
两种背压的时序差异见 @fig-deadlock-credit-pfc:credit 按额度发送、从不溢出、无 pause 传播;PFC 缓冲超阈值发 pause、需 headroom、可反向传播。

两者都是无损背压,原理上都有死锁风险。差别在于 PFC 的粗粒度 pause 沿链路级联传播,更易形成大范围循环依赖与 pause storm(暂停风暴,pause 帧级联导致大面积流量停滞),还会波及本身不拥塞的 victim flow(受害流)——这使 PFC 死锁成为最棘手的案例(成因与预防见 04-pfc死锁)。降低 PFC 触发频率的常用手段是叠加端到端拥塞控制 DCQCN:交换机在到 pause 阈值前先标记 ECN,接收方回 CNP,发送方据此降速[2](算法细节见 01-硬件互联/05-roce);但 DCQCN 只减少 pause,不消除死锁可能。
无损和可丢在死锁面上如何取舍?
无损与可丢是两种对待拥塞的哲学,其在死锁面上的差异是根本性的。
| 维度 | 无损(lossless) | 可丢(lossy) |
|---|---|---|
| 拥塞时 | 背压暂停上游 | 丢包 |
| 丢包恢复 | 不丢,无需恢复 | 重传(端到端或链路级) |
| 死锁风险 | 有(循环等待可成立) | 无(丢包=抢占,破坏不可抢占条件) |
| HoL 阻塞 | 严重(pause 波及无辜流) | 轻 |
| 尾延迟 | pause storm 下恶化 | 取决于重传开销 |
| 代表 | RoCEv2(PFC)、InfiniBand | 传统 TCP/IP、UEC transport |
@tbl-deadlock-flowctrl-lossless-lossy 无损与可丢的取舍
这里的 HoL 阻塞(Head-of-Line Blocking)指队首报文受阻导致其后无关报文一并被堵。可丢网络以「丢包 + 重传」的恢复成本,换取了消除死锁面、避免 HoL 阻塞。在万卡 AI 集群、故障常态化的场景下,维持一个无死锁的无损网络(调好 headroom、防住 CBD、监控 pause storm)的运维代价极高——这正是业界路线转向的动因。
Ultra Ethernet 为什么放弃严格无损?
Ultra Ethernet(UEC)用分层手段在「可靠」与「容丢」之间取平衡,不再强依赖严格无损[3]:
- link 层 LLR(Link Level Retry):对 FEC 不可纠正的错误在链路本地重传——发送端把可重传帧存入 replay buffer 并编序号,收端确认后释放。这是 link 层的可靠机制,替代 PFC 提供链路可靠性,但不靠暂停上游。
- link 层 CBFC(可选):作为 PFC 的现代替代,credit 精确授予避免丢包,按 VC 维护。
- transport 层 lossy 传输:transport 层支持 best-effort(容忍丢包)运行以避免 HoL 阻塞,设计为能在可能丢包的网络上良好工作。
- IP 层 packet trimming:拥塞时丢 payload 保 header,将 header 转发到目的端,目的端据此向发送方请求重传,给端点早期显式丢包信号,配合乱序投递做快速恢复。
关键区分(接 01-总览 的 fabric 导引):LLR 是 link 层的可靠重传,真正「容丢」发生在 transport / IP 层。UEC 不是整体可丢,而是 link 层保可靠、transport 层容丢的分层设计。其设计将无损要求从 transport 层移除,使系统无需严格 PFC 配置即可规模化部署,从而绕开 PFC 死锁。
三条流控路线如何定位?
| 路线 | 无损 | 死锁面 | 主要代价 | 代表 |
|---|---|---|---|---|
| PFC 无损 | 是 | 高(pause 成环) | headroom 调优、pause storm、CBD 防护 | RoCEv2 |
| credit 无损 | 是 | 中(原理上有,粒度细) | 实现复杂、缓冲开销 | NVLink / IB / UALink |
| UEC 容丢 | link 可靠 / transport 容丢 | 低(transport 容丢消解) | 重传 + 乱序重排开销 | Ultra Ethernet |
@tbl-deadlock-flowctrl-routes 三条流控路线对比
开放问题
- 调研 UEC transport 层 lossy 传输的实测尾延迟与重传开销
- 量化 headroom 缓冲随链路长度 / 速率的缩放关系
Takeaway
| 问题 | 结论 |
|---|---|
| 背压与死锁的因果 | 无损背压制造「占有并等待」+「循环等待」,是死锁必要条件 |
| 可丢为何无死锁 | 丢包=强制释放资源,破坏「不可抢占」条件 |
| credit vs PFC | 同为无损背压;credit 精确无需 headroom,PFC 粗粒度需调优、易 pause storm |
| 无损 vs 可丢 | 无损有死锁风险 + HoL 阻塞;可丢以重传成本换无死锁 |
| UEC 路线 | link 层 LLR 保可靠、transport 层容丢,绕开 PFC 死锁 |
@tbl-deadlock-flowctrl-takeaway 流控与无损可丢速查
参考资料
- IEEE 802.1Qbb, Priority-based Flow Control, IEEE 802.1. https://1.ieee802.org/dcb/802-1qbb/
- Zhu et al., Congestion Control for Large-Scale RDMA Deployments (DCQCN), SIGCOMM 2015. https://dl.acm.org/doi/10.1145/2785956.2787484
- Hoefler et al., Ultra Ethernet's Design Principles and Architectural Innovations, arXiv:2508.08906, 2025. https://arxiv.org/abs/2508.08906
延伸阅读
- Introduction to 802.1Qbb (PFC) — ipSpace.net — PFC pause 帧机制与 headroom 解释
- Ultra Ethernet Consortium Specification — UEC 1.0 规范原文
- 1.5 RoCE (RDMA over Converged Ethernet) — RoCE 协议栈与 DCQCN 拥塞控制