3. 拥塞控制算法:DCQCN、Timely、HPCC 对比

聊到 IB 网络的拥塞控制,有三个算法你绕不开:DCQCN、Timely、HPCC。它们就像三把不同的钥匙,开同一把锁——解决网络拥塞。但每把钥匙的齿纹、手感、适用场景都不一样。

我最早接触的是 DCQCN,那时候还在调一个金融交易集群。后来做 AI 训练网络,又跟 HPCC 杠上了。Timely 呢?嗯,它更像一个“中间派”,在延迟敏感场景里很讨喜。

今天咱们就把这三个家伙拉出来,好好对比一下。不搞虚的,全是实战经验。

3.1 DCQCN:数据中心量化拥塞通知

DCQCN 全称是 Data Center Quantized Congestion Notification。说白了,它靠交换机给发送端“打小报告”来降速。

核心原理:

  • 交换机检测到队列长度超过阈值,就标记数据包的 ECN(显式拥塞通知)位。
  • 接收端收到带 ECN 标记的包后,生成 CNP(拥塞通知包)发回发送端。
  • 发送端收到 CNP,就降低发送速率。
  • 没收到 CNP 时,慢慢恢复速率。

这个机制有点像“踩刹车再松油门”。但问题在于——反应有点慢。我调过一套 DCQCN 参数,发现从拥塞发生到发送端降速,中间至少隔了一个 RTT(往返时间)。

关键参数:
  • Kmin:最小队列阈值,低于此值不标记。
  • Kmax:最大队列阈值,高于此值全标记。
  • Pmax:最大标记概率。
  • G:速率恢复因子,控制升速快慢。
避坑指南: 我曾经把 G 设得太大,结果速率恢复太快,导致拥塞反复震荡。建议从 1/16 开始调,别贪心。

3.2 Timely:基于 RTT 的延迟检测算法

Timely 的思路跟 DCQCN 完全不同。它不看队列长度,而是盯着 RTT(往返时间)的变化。

你想想看,网络一旦开始排队,RTT 就会增加。Timely 就是利用这个特性,通过 RTT 的梯度来判断拥塞程度。

核心公式:

// 伪代码示意
if (RTT > T_high) {
    速率 *= (1 - beta);  // 降速
} else if (RTT < T_low) {
    速率 += alpha;       // 升速
} else {
    // 根据 RTT 梯度微调
    if (gradient > 0) 降速;
    else 升速;
}

Timely 的好处是不需要交换机支持 ECN。我有个项目,交换机是老款 Mellanox,不支持 DCQCN,最后就是用 Timely 搞定的。

注意: Timely 对 RTT 测量精度要求很高。我遇到过网卡时间戳不准,导致算法误判。建议用硬件时间戳,别用软件。

3.3 HPCC:高性能拥塞控制

HPCC(High Precision Congestion Control)是这三个里最“激进”的。它利用 INT(In-band Network Telemetry)技术,直接读取交换机队列信息。

说白了,HPCC 能看到整条路径上每个交换机的队列长度。它不像 DCQCN 那样等反馈,而是提前计算最优发送速率。

核心逻辑:

  • 发送端在每个数据包里嵌入 INT 请求。
  • 沿途交换机在包头上写入当前队列长度。
  • 接收端返回这些信息。
  • 发送端根据“最拥塞的链路”计算速率。

我在一个 64 节点 GPU 集群上测过 HPCC。相比 DCQCN,它的流完成时间(FCT)降低了 30% 以上。但代价是——需要交换机支持 INT,不是所有硬件都能跑。

HPCC 的速率计算公式(简化版):
target_rate = (BDP - total_queue) / RTT

其中 BDP 是带宽延迟积,total_queue 是路径上所有队列长度之和。

3.4 三大算法对比

我把它们放在一张表里,你一眼就能看出区别:

特性 DCQCN Timely HPCC
拥塞信号 ECN 标记 RTT 变化 INT 队列信息
交换机要求 支持 ECN 无特殊要求 支持 INT
反应速度 1-2 RTT 1 RTT 亚 RTT
精度 中等 中等
部署难度
适用场景 通用数据中心 延迟敏感应用 高性能计算/AI

3.5 知识体系图

下面这张 SVG 图,把三个算法的核心逻辑串起来了。我画的时候特意把“拥塞信号”作为分叉点,这样你一看就明白它们本质的区别在哪。

拥塞控制算法对比 拥塞控制算法 DCQCN Timely HPCC 信号:ECN 标记 信号:RTT 变化 信号:INT 队列 特点:依赖交换机 ECN 反应慢,部署简单 特点:无需交换机支持 适合延迟敏感场景 特点:精度最高 需要 INT 硬件支持 选择依据:硬件能力 + 延迟容忍度 + 部署成本

3.6 我的选择建议

说了这么多,到底该用哪个?我个人的经验是这样的:

  • 如果你用的是老交换机,不支持 ECN 也不支持 INT,那就用 Timely。它最省事,只要网卡支持时间戳就行。
  • 如果交换机支持 ECN,但你对延迟要求不高,DCQCN 是稳妥之选。参数调好了,稳定性很好。
  • 如果你在做 AI 训练或 HPC,而且交换机支持 INT,别犹豫,上 HPCC。它带来的性能提升,值得你花时间调优。
一个小技巧: 我有时候会在同一个集群里混用算法。比如存储流量用 DCQCN,计算流量用 HPCC。只要做好流量隔离,效果反而更好。

嗯,这三个算法就聊到这儿。记住一点:没有最好的算法,只有最合适的。你的网络环境、硬件能力、业务需求,才是最终的决定因素。


公众号:蓝海资料掘金营,微信deep3321