拥塞反馈与多路径的端点控制环
把窗口、速率、接收压力与路径资格放进同一条数据包反馈链
综合 Falcon 的 Swift/RUE/PLB 与 MRC 的 NSCC/EV 状态,说明网络排队和目标资源如何被分别测量,及 ECMP、Structured EV、SRv6 的路径控制代价。
多路径能够把一次通信分散到更多链路,拥塞控制决定这些链路上允许保留多少未完成工作。两者共享 ACK、时延、ECN 和路径标识,却调节不同变量:窗口或速率控制总注入量,路径选择改变注入位置,接收端反馈限制目标资源的消耗速度。Falcon 与 MRC 都将这些机制放进端点,具体组织方式反映了各自对路径状态、可编程性和接收资源的选择。S039 pp. 15–17, 82–85 S040 pp. 54–63
先定位排队,再决定调整哪个窗口#
一次 ACK 变慢可能来自交换机排队、目标 NIC 堵塞,也可能来自 ACK 合并。Falcon 用四个时间戳拆分这些部分:T1 为请求接近线速发送的位置,T2 为远端包交付层接收位置,T3 为 ACK 接近线速发送的位置,T4 为本端接收 ACK 的位置。由此计算总 RTT 和扣掉远端驻留时间后的 fabric delay:S039 pp. 83–84
远端合并 ACK 时带上最近一个收到包的 T1、T2,使减去的 T3−T2 与对应样本匹配。若两端时钟已经同步,还能使用 T2−T1 和 T4−T3 观察正反向单程延迟。实现精度依赖时间戳靠近线路、时间戳点到线路之间没有显著排队等条件;包中的相关时间戳字段以 131.072ns 为单位。S039 pp. 38, 83–85
Falcon 把控制拆为 fcwnd 与 ncwnd。fcwnd 根据网络时延限制可靠包在 Fabric 中的数量,ncwnd 根据远端 NIC 的接收资源压力限制新事务请求。目标端分别统计接收 packet pool 和 buffer pool 的 EMA 占用,将其量化后取压力较高者反馈。Pull Request 与 Push Data 同时受 fabric 和 NIC 两道门控;返回的 Pull Data 只受 fabric 窗口约束。请求和响应采用不同门控,给完成已有事务所需的返回数据留下进展空间。S039 pp. 65–68, 85–88
这也解释了 receiver-driven feedback、credit 与 cwnd 的具体分工。Falcon 的 ULP credit 限制本地事务资源使用,ncwnd 调节远端新请求压力,fcwnd 控制网络在途包;链路上的 PFC/CBFC 则在另一层保护接收缓冲。跨层分析时,把每个计数器对应到资源持有人,才能确定背压最终停在哪里。S039 pp. 48–53, 65–68 S043 pp. 12–15
窗口、速率和反馈频率共同形成控制环#
Swift 对低于目标时延的连接增加 fcwnd,超过目标时延后按超出程度乘性减少,并以 RTT 时间标记限制连续减窗。目标时延含基础项、按窗口规模变化的项和按正向跳数变化的项。ncwnd 通过接收占用反馈独立增减。fcwnd 大于等于 1 时,硬件限制整数部分对应的在途包;小于 1 时保留一个在途包,并用 Timing Wheel 插入发包间隔,表示低于每 RTT 一包的平均发送率。S039 pp. 85–90
这类控制需要明确计算与执行的时序。Falcon 将测量和限速留在近线硬件,将算法放在独立的 Rate Update Engine。数据通路通过事件队列提交 ACK、NACK、重传及相关状态,RUE 回传窗口、包间隔、RTO、路径标签与权重。RUE 可以用硬件实现,也可以运行在 NIC 内嵌处理器;算法迭代由这组接口承接。S039 pp. 82, 96–103
ACK 频率和 RUE 计算负载同样参与反馈延迟。小窗口连接需要更密集的 ACK,带宽较大的连接可以降低 ACK 密度;ar_rate 用指数 N 表示每 2^N 个包请求一次显式 ACK,端点另有全局 ACK 限速。RUE 事件策略还要考虑上次事件距今时间,以及其后累计确认的字节或包数,避免大量小操作占满算法处理能力。设计一个更快的减窗公式,只有与及时的采样、入队和执行相配合才有实际效果。S039 pp. 17–18, 96–103
交换机也可以提供比二值 ECN 更丰富的观测。Falcon 1.1 支持紧凑的 4B CSIG L2 tag,由交换机按线速比较和替换操作记录瓶颈拥塞信息,接收端再通过 ACK/NACK 将其反射到发送端。多路径时,最新 CSIG 状态按路径保存,RUE 选择请求的信号类型并处理返回数据,使交换机信号生成和端点控制算法能够分别演进。S039 pp. 16–17, 101–103
这条反馈路径增加了一项部署条件:端点协商 CSIG 能力之后,还要确认包路径上的交换机能够端到端识别 CSIG。Falcon 的连接协商负责两端能力,Fabric 的支持由网络配置保证。因此,路径切换和维护改变经过的设备集合时,也需要重新核对信号可用性,保持控制环输入的含义一致。S039 p. 17
MRC 用 SACK 时钟联动网络与接收端#
MRC 采用发送侧、窗口型、SACK 驱动的 NSCC。RTT 是排队的滞后信号,ECN 是拥塞的前导信号:ECN 未置位且请求 RTT 低于目标时进行比例增加;ECN 未置位而 RTT 偏高时采用公平增加;ECN 置位且 RTT 偏高时乘性减少;ECN 已置位而该包 RTT 仍低时保持窗口。规格还允许采用 trim 通知、已实现 goodput 和 receiver window penalty 等附加信号。S040 p. 54
MRC 的在途量按字节计数。发送端采用 UDP length 加固定 40B nominal header 的名义包长递增 inflight,接收端以同一口径统计已收字节,并按 256B 单位累计回传。累计计数让丢失或合并 SACK 后的下一次反馈仍能推进 ACK 时钟;比较和差值需要处理模回卷,忽略乱序返回的陈旧计数。S040 pp. 57–59
接收端压力通过 7 位 rcv_cwnd_pen 反馈,值域为 0–127。0 表示不施加惩罚,64 持续一个 RTT 可将各发送端窗口减半,127 将发送压到每 RTT 一包的最小窗口;restore_cwnd 决定压力结束后是否恢复原窗口。MPR 则约束接收端能够跟踪的 PSN 跨度,动态 MPR 缩小时,即使网络窗口仍有空间,也要等待相关包重新进入允许范围。两个机制分别保护处理速率和包跟踪资源。S040 pp. 37–43
发送调度由 QPCC 与 QP 状态机衔接。QP 有数据但窗口尚不允许发送时处于 ACTIVE,可发送时进入 READY;数据已发完但仍等确认时处于 PENDING,全部结束后进入 IDLE。调度器只从 READY 选择。最终发包前再调用 GetSendParams 获取 EV 与端口,因为排队期间到达的 SACK/NACK 仍可能改变最佳路径。S040 pp. 55–59
逻辑路径标识要能对应到反馈#
Falcon 的多路径连接最多组织四条逻辑路径,每条用一个 20 位 Flow Label,低 2 位固定为 path-id。RUE 为各路径计算 fcwnd,再汇总成连接级窗口,并以每路 4 位权重驱动硬件 WRR。接收端为各路径保留时间戳、跳数、拥塞元数据和 ACK 合并状态;EACK 的确认位图则覆盖整个连接上从所有路径收到的包。这让确认前缀可以共同前进,同时保留控制环需要的逐路径归因。S039 pp. 63, 66, 69, 89, 103
逻辑 path-id 与实际网络路径之间还留有重新选择空间。重传保持原包的 PSN 与 path-id,Flow Label 其余位可以变化。早期重传按同一 path-id 比较乱序距离,降低正常跨路径时延差造成的误判。PLB 则统计一段 RTT 内拥塞 ACK 的比例,并在连续多个 RTT 达到条件后重新选择标签,处理持续热点。并发使用多条路径与为持续拥塞路径重新寻路,由这两组状态分别完成。S039 pp. 16, 69–71, 91–93
MRC 的 EV Profile 可以容纳更一般的路径候选集合。GOOD 属于可用集合,SKIP 表示近期拥塞后的暂时跳过,ASSUMED_BAD 表示检测到不可达,DENIED 由管理面禁用。SACK 反射请求 EV 和拥塞标记,普通 TRIM NACK 也可触发 SKIP;探测和超时帮助识别坏路径并判断何时恢复。S040 pp. 61–64
原图中,先看 GOOD 到 SKIP 的拥塞反馈,再看 GOOD 到 ASSUMED_BAD 的失效判断;左侧 DENY 的管理动作与底部、顶部自动恢复路径分别由不同主体驱动。这种区分决定维护时临时下线路径会不会被自动探测提前重新启用。

原图:S040,物理第 62 页,Figure 5;图内 DENY 对应表格中的 DENIED 状态。
编码方式决定可控性和运维代价#
| 路径表达方式 | 端点表达的信息 | Fabric 配合 | 状态解释 |
|---|---|---|---|
| ECMP 的 EV | 供交换机哈希的熵值 | ECMP 与 ECN 配置 | EV 对应稳定哈希选择,具体路径取决于网络 |
| Structured EV | 按跳分割的选择子域 | 交换机按配置解析子域并选出口 | 端点与全网共享位宽、范围和跳数含义 |
| SRv6 uSID | 路径上的微段序列 | SRv6 转发及匹配的封装处理 | 端点显式构造路径,可附单个 SRH |
| Falcon 多路径标签 | 逻辑 path-id 与标签其余部分 | 可据标签进行多路径转发 | 四个控制上下文内分别测量、调权和换路 |
依据:S040 pp. 60–68 S039 pp. 66, 69–71。
Structured EV 在 IPv6 下由 Flow Label 的低 16 位与 UDP source port 的 16 位组成 32 位字段,按预配置拆成不同网络阶段使用的子域。它把寻路控制向端点推进,也把端点配置与交换机解析契约绑定起来。SRv6 进一步用 uSID 描述路径,NIC 要处理封装与解封装,并兼容外层 SRv6 保留或已经被移除的接收形态。S040 pp. 60–68
候选 EV 数量也受反馈时效限制。MRC 的实现指导建议活跃集合大致在一到两个拥塞窗口的包数范围,集合超过约 100 后收益快速减小。其原因是集合越大,同一路径越久才得到再次采样,发送端越难及时确认拥塞是否消退。这是用于配置和实验的指导值,实际集合应与负载窗口、链路数量和故障分布共同选择。S040 p. 73
用一条 incast 路径检查控制环是否闭合#
设多个发送端同时写向一个接收端。交换机开始标记 ECN,MRC 将相应 EV 暂时跳过并调整发送窗口;若目标处理速率仍跟不上,接收端提高 window penalty;若位图资源不足,MPR 或相应资源 NACK 限制在途跨度。Falcon 中,同类压力分别体现为逐路径 fabric delay 与远端 buffer occupancy,再由 fcwnd、ncwnd 及 ULP 动态背压阈值作用于不同入口。S040 pp. 37–43, 54–63 S039 pp. 52–53, 65–68, 83–89
这个工程推演给出三项联动观察:网络队列下降后,目标 NIC 的资源是否继续积压;窗口恢复后,发送端是否仍困在旧 EV 状态;数据量下降时,ACK 或探测是否还足以驱动恢复。只记录总吞吐会掩盖其中任一处滞留。可靠传输解释了这些资源的确认与释放边界,Fabric 运维进一步把窗口、路径和队列信号连接到故障处置;Scale-up Ethernet说明单跳信用流控方案为何采用另一组状态成本。