现代数据中心中的计算密集型应用(例如,Hadoop [1], [2], [3] 和分布式机器学习 [4], [5], [6], [7])对低延迟的需求日益增加。这些应用采用各种多打一通信模式,例如 all-reduce 和 all-gather [8],产生大量 Incast 流量。当 Incast 流量超过网络容量时,就会发生 Incast 拥塞——这是一种瞬时拥塞事件,其中多个发送方同时向单个接收方传输数据。Meta 的测量 [9] 显示,当发生 Incast 拥塞时,网络会出现数百个活动流的激增,并广泛标记显式拥塞通知(ECN)。队列长度(即交换机端口缓冲区的占用情况)的这种激增导致排队延迟增加和吞吐量剧烈波动。此外,主机每秒可能遭遇多达 200 次突发,进一步加剧了延迟问题。为了满足这些应用的服务级别目标,必须最小化 Incast 场景下的性能损失。
虽然网络级拥塞管理技术(如自适应路由 [10]、负载均衡 [11], [12] 和拥塞隔离 [13])有助于缓解临时瓶颈,但端到端拥塞控制算法(CCAs)通过根据网络状况调节传输速率来从根本上解决网络过载,在现代通信系统中至关重要 [14]。现有的 CCAs 可分为两类,即,主机型和交换机型。主机型 CCAs,如 DCQCN [15]、HPCC [16] 和 TIMELY [17],基于 ECN、带内网络遥测(INT)信息和往返时间(RTT)做出速率调整决策。所有这些信息提供了网络拥塞状态的实时反映。当队列长度达到特定阈值时生成 ECN。当网络交换机排队的数据包累积时,RTT 会增加;INT 携带交换机处的实时队列长度信息。基于这些信息,CCAs 计算并更新发送速率以匹配瞬时拥塞状态。交换机型 CCAs,如 RoCC [18] 和 XCP [19],利用可编程交换机生成包含细粒度指标的通知,如实时队列长度、链路速率等。这些指标使发送方能够估算准确的发送速率。此外,交换机型 CCAs 可以利用可编程交换机向主机传输拥塞信号,从而实现亚 RTT 粒度和对拥塞的快速响应。实际用例表明,大多数主机型 CCAs 和交换机型 CCAs 在一般网络条件下表现良好。
然而,当前的 CCAs 在 Incast 场景中仍存在以下问题。(i) 速率控制不精确。在 Incast 场景中,大量流可能同时到达交换机,导致队列快速建立和速率适配不准确。对于主机型 CCAs,反馈延迟为一个 RTT。主机看到的拥塞状态可能与交换机处的瞬时状态显著偏离,导致 Incast 初始阶段速率退避不足,进而造成传输性能下降。虽然交换机型 CCAs 接收队列状况信息的反馈周期较短,但在高度波动的队列条件下,其速率估算会变得不稳定。(ii) Incast 后恢复效率低。当前的 CCAs 无法在 Incast 事件结束后高效地恢复到稳态。主机型 CCAs 受限于每个 RTT 的控制,且不了解公平速率(即通过将出口端口带宽平均分配给所有经过它的活动流计算出的传输速率)。它们需要较长时间才能最终提升到公平速率,导致带宽利用率低。交换机型 CCAs 虽然能够更快收敛到公平速率,但受参数漂移影响——其 Incast 后工作点显著偏离 Incast 前最优点。因此,当网络状况从 Incast 转变为非拥塞稳态时,主机型和交换机型 CCAs 均无法保持最佳性能。
此外,一些专为 Incast 场景定制的 CCA [20], [21], [22] 也面临 (iii) 场景专属设计 问题。例如,SIM [21] 在发生 Incast 时计算暂停时间并停止传输。虽然在 Incast 场景中表现良好,但这些 CCA 在网内拥塞下会出现过度反应。
为了解决上述问题,本文提出了 IncastBridge,它在网内拥塞下确保稳健性能,同时有效处理 Incast 拥塞。IncastBridge 的主要特性总结如下。
(1) 实时网络状态的间接利用。Incast 代表一种具有显著队列波动的严重网络拥塞形式。这导致基于实时队列的速率计算不适用。因此,IncastBridge 将实时队列信息转换为二进制信号,以通知主机网络是否正在经历 Incast。
(2) 一致的目标速率。CCA 的盲目速率调整可能导致收敛缓慢。基于实时队列长度的延迟但准确的速率调整可能会降低带宽利用率并导致控制不稳定。因此,IncastBridge 从交换机反馈中获得最终稳态阶段预期的公平速率,并执行稳定的速率退避。
(3) 亚 RTT 控制。在 Incast 场景中,网络状况恶化得如此之快,传统的基于 ACK 的 CCA 无法及时调整发送速率。IncastBridge 专门利用亚 RTT 控制,向端主机 CCA 提供一致的目标速率,确保及时感知 Incast 事件。
(4) 与经典 CCAs 的无缝集成。理想的 CCA 需要适用于 Incast 场景和网内拥塞。IncastBridge 作为中间件,作为独立模块集成到现有 CCAs 的代码中,确保当 Incast 消退时无缝转换控制权。
本工作的贡献如下。
- •
我们指出了一个 RTT 滞后和队列波动的特性如何导致 CCAs 在 Incast 场景中性能下降,然后检查了现有 CCAs 在 Incast 场景中的控制方案的缺点(第 2 节)。
- •
我们提出了 IncastBridge,通过稳定的速率退避和恢复策略提高了主机型 CCAs 在 Incast 期间的性能。同时,一旦 Incast 消退,它无缝转回标准 CCA 行为,并在稳定条件下保持稳健传输(第 3 节)。
- •
我们进行了真实世界测试床和大规模仿真实验,评估了 IncastBridge 在各种工作负载、网络负载和 Incast 程度下的有效性。结果表明,IncastBridge 在 Incast 场景中表现优异(第 4 节)。