上上周写了一篇 AIMD(难以超越的 AIMD),有人问到我此前的 Cugas(CUBIC + Vegas) 如何,我说当时就应付一下经理,但就着那个思路,不妨再展开说几句。

前面提到过,AIMD 已经足够优秀,迄至 CUBIC 已臻于完美,但它还是无法甄别非拥塞随机丢包,导致随机丢包时表现力不够,这可以认为是硬伤,背后的原因就是信息不足,本质上是端不识网导致,任何端到端算法都有各自硬伤。

另一方面,Vegas 作为 Delay-based cc 代表,识别拥塞的能力一流,但却被先入为主的 AIMD 压制,无法与其共存,这也是硬伤,背后的原因是 Vegas 没有负反馈动力学基础,仅仅基于不精确的测量,本质上还是端不识网。

但无论 AIMD 还是 Vegas,在数学上都可证明其内在公平性,不能混部是一大憾事。BBRv3 算一个,但它严重依赖测量,且公平收敛粒度竟以经验值硬编码,太过粗糙,而公平性正是 AIMD 控制论的主场亮点,所以肯定有更简单的以 AIMD 为基础,以 RTT 为辅助的混合样式。

微软早年推出的 Compound 算一个,可从其 wiki 页面 Compound TCP 进一步了解。

我这里提出一个更简单的,加权求和 CUBIC 和 Vegas 的窗口,而权值由 β = minRTT sRTT \beta=\dfrac{\text{minRTT}}{\text{sRTT}} β=sRTTminRTT 确定,如下:

W final = ( 1 − β ) ⋅ W CUBIC + β ⋅ W Vegas W_{\text{final}}=(1-\beta)\cdot W_{\text{CUBIC}}+\beta\cdot W_{\text{Vegas}} Wfinal=(1β)WCUBIC+βWVegas

其中 CUBIC 和 Vegas 各自计算自己的窗口,通过 β 合体成最终窗口。核心思想即:

  • 当 sRTT ≈ minRTT,网络轻载,信任 Vegas 更多;
  • 当 sRTT >> minRTT,网络拥塞,信任 CUBIC 更多;
  • 当发生丢包时,完全信任 CUBIC

类似 VJ-Style,我重写成对 CUBIC 的误差校正:

W final = W CUBIC + β ⋅ ( W Vegas − W CUBIC ) W_{\text{final}}= W_{\text{CUBIC}}+\beta\cdot (W_{\text{Vegas}}-W_{\text{CUBIC}}) Wfinal=WCUBIC+β(WVegasWCUBIC)

而该矫正恰好可做甄别随机丢包之用,当发生随机丢包时,β 接近 1,算法依旧会降窗重传,但马上就以 Vegas 为主而恢复,而不必经过漫长的 Additive Increase 过程。

浙江温州皮鞋湿,下雨进水不会胖。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐