长肥管道下的 CUBIC

CUBIC \text{CUBIC} CUBIC 是针对长肥管道优化的 AIMD \text{AIMD} AIMD 变体,但这种优化体现在哪里,先看标准 AIMD \text{AIMD} AIMD 是怎么个事。

它的不足体现在 Aspera \text{Aspera} Aspera 列举的一个反例中:

如图所示,标准 AIMD \text{AIMD} AIMD 随着 RTT \text{RTT} RTT 增加吞吐陡降,而这张图并非夸张,它就是 AIMD \text{AIMD} AIMD 吞吐函数的图像:

T ^ = 2 − b a 2 b   R p \hat T = \dfrac{\sqrt{2-b}\sqrt{a}}{\sqrt{2b}\,R\sqrt{p}} T^=2b Rp 2−b a

其中 a , b a,b a,b 为参数, R R R 为 RTT \text{RTT} RTT, p p p 为丢包率。

标准 AIMD \text{AIMD} AIMD 吞吐公式基于拥塞周期稳态假设,每周期窗口加性增到最大值后丢包,窗口乘性减,如此重复,稳态下每周期恰丢 1 1 1 个包,通过周期内总发送包数与丢包率关系联立可推解,写过太多篇,不再赘述。

CUBIC \text{CUBIC} CUBIC 作为 AIMD \text{AIMD} AIMD 变体,窗口从线性增长变为三次函数,替换窗口增长函数即可推导出吞吐公式,通过两者公式比对,一眼便可看出事实。

CUBIC \text{CUBIC} CUBIC 窗口 W W W 是时间 t t t 的三次函数:

W ( t ) = C ⋅ ( t − K ) 3 + W max W(t)=C\cdot (t-K)^3+W_{\text{max}} W(t)=C⋅(t−K)3+Wmax

其中 K K K 为窗口从 β W max \beta W_{\text{max}} βWmax 增长到 W max W_{\text{max}} Wmax 所需时间,代入 t = 0 t=0 t=0 可推出:

K = W max ⋅ ( 1 − β ) C 3 K=\sqrt3{\dfrac{W_{\text{max}} \cdot (1-\beta)}{C}} K=3CWmax⋅(1−β)

稳态下带宽固定, K K K 即一个拥塞周期时长。

瞬时速率可表示为 W ( t ) R T T \dfrac{W(t)}{RTT} RTTW(t),一个周期发送的总包数则为:

N = ∫ 0 K W ( t ) R T T d t N=\displaystyle\int_0^K \dfrac{W(t)}{RTT}\text{d}t N=∫0KRTTW(t)dt

稳态下每周期恰丢 1 1 1 包,丢包率 $p=\dfrac{1}{N},即:

1 p = 1 R T T ∫ 0 K W ( t ) d t ⋯ ( 1 ) \dfrac{1}{p}=\dfrac{1}{RTT} \displaystyle\int_0^K W(t)\text{d}t \quad\cdots(1) p1=RTT1∫0KW(t)dt⋯(1)

对 W ( t ) W(t) W(t) 在一周期内积分,结合 C K 3 = W max ( 1 − β ) ) CK^3=W_{\text{max}}(1-\beta)) CK3=Wmax(1−β)) 化简:

∫ 0 K W ( t ) d t = ∫ 0 K C ( t − K ) 3 + W max d t = − C K 4 4 + W max K = − W max ( 1 − β ) K 4 + W max K = W max K ⋅ 3 + β 4 \begin{aligned}\int_0^K W(t)\text{d}t &=\int_0^K \leftC(t-K)\^3+W_{\\text{max}} \\right\text{d}t\\&=-\dfrac{CK^4}{4} + W_{\text{max}}K\\&=-\dfrac{W_{\text{max}}(1-\beta)K}{4}+W_{\text{max}}K\\&=W_{\text{max}}K\cdot\dfrac{3+\beta}{4}\end{aligned} ∫0KW(t)dt=∫0KC(t−K)3+Wmaxdt=−4CK4+WmaxK=−4Wmax(1−β)K+WmaxK=WmaxK⋅43+β

因此周期平均窗口为:

W ‾ = 1 K ∫ 0 K c w n d ( t ) d t = W max ⋅ 3 + β 4 ⋯ ( 2 ) \overline{W} = \dfrac{1}{K} \displaystyle\int_0^K cwnd(t) dt = W_{\text{max}} \cdot \dfrac{3+\beta}{4} \quad\cdots (2) W=K1∫0Kcwnd(t)dt=Wmax⋅43+β⋯(2)

对比 AIMD \text{AIMD} AIMD 平均窗口 W ‾ = W max ⋅ 1 + β 2 \overline{W} = W_{\text{max}} \cdot \dfrac{1+\beta}{2} W=Wmax⋅21+β, CUBIC \text{CUBIC} CUBIC 三次函数增长先快后缓,大部分时间窗口更接近 W max W_{\text{max}} Wmax,因此平均窗口更大。

吞吐定义:

T = W ‾ R T T ⋯ ( 3 ) T=\dfrac{\overline{W}}{RTT} \quad\cdots (3) T=RTTW⋯(3)

将 ( 2 ) (2) (2) 代入 ( 1 ) (1) (1),结合 K K K 的表示 消去 W max , K W_{\text{max}},K Wmax,K,得:

T = ( C ⋅ ( 3 + β ) 4 ⋅ ( 1 − β ) ⋅ R T T ⋅ p 3 ) 1 / 4 T=\left(\dfrac{C \cdot (3+\beta)}{4 \cdot (1-\beta) \cdot RTT \cdot p^3} \right)^{1/4} T=(4⋅(1−β)⋅RTT⋅p3C⋅(3+β))1/4

忽略常量看趋势,同时写下 CUBIC \text{CUBIC} CUBIC 和 AIMD \text{AIMD} AIMD 做比对:

T CUBIC ∝ 1 R T T 1 / 4 ⋅ p 3 / 4 , T AIMD ∝ 1 R T T 1 ⋅ p 1 / 2 T_{\text{CUBIC}} \propto \dfrac{1}{RTT^{1/4} \cdot p^{3/4}}, \quad T_{\text{AIMD}} \propto \dfrac{1}{RTT^{1} \cdot p^{1/2}} TCUBIC∝RTT1/4⋅p3/41,TAIMD∝RTT1⋅p1/21

则一目了然,$\text{CUBIC} 吞吐与 R T T 1 / 4 RTT^{1/4} RTT1/4 成反比, R T T RTT RTT 敏感性更低,便更适合高速长距离网络。

结合平均窗口:

W ‾ CUBIC = W max ⁡ ⋅ 3 + β 4 = 0.925 W max ⁡ , W ‾ AIMD = W max ⁡ ⋅ 1 + β 2 = 0.85 W max ⁡ \overline{W}{\text{CUBIC}} = W{\max}\cdot\dfrac{3+\beta}{4}= 0.925W_{\max},\quad\overline{W}{\text{AIMD}}= W{\max}\cdot\dfrac{1+\beta}{2}=0.85W_{\max} WCUBIC=Wmax⋅43+β=0.925Wmax,WAIMD=Wmax⋅21+β=0.85Wmax

CUBIC \text{CUBIC} CUBIC 有 92.5 % 92.5\% 92.5% 的时间运行在接近满带宽状态,而标准 AIMD \text{AIMD} AIMD 只有 85 % 85\% 85%, CUBIC \text{CUBIC} CUBIC 链路利用率提升接近 10 % 10\% 10%。

再看 p p p 影响, T ∝ p − α T \propto p^{-\alpha} T∝p−α 中, α \alpha α 越大,相同 p p p 下吞吐更高, α CUBIC = 3 4 , α AIMD = 1 2 \alpha_{\text{CUBIC}}=\dfrac{3}{4},\alpha_{\text{AIMD}} = \dfrac{1}{2} αCUBIC=43,αAIMD=21,故 CUBIC \text{CUBIC} CUBIC 吞吐更高。

再看弹性,由于 W = k ⋅ p − α W = k \cdot p^{-\alpha} W=k⋅p−α,则 d W d p = k ⋅ ( − α )   p − α − 1 \dfrac{dW}{dp} = k \cdot (-\alpha)\, p^{-\alpha-1} dpdW=k⋅(−α)p−α−1,构造弹性定义,即相对变化之比:

ε = W 的相对变化 p 的相对变化 = d W / W d p / p \varepsilon=\dfrac{\text{W 的相对变化}}{\text{p 的相对变化}} = \dfrac{\text{d}W/W}{\text{d}p/p} ε=p 的相对变化W 的相对变化=dp/pdW/W

带入关系式:

ε = p k p − α ⋅ ( − α   k p − α − 1 ) = p k p − α ⋅ ( − α k ) p − α − 1 = p 1 + α ⋅ ( − α ) p − α − 1 = − α \begin{aligned} \varepsilon &= \dfrac{p}{k p^{-\alpha}} \cdot \big(-\alpha\,k p^{-\alpha-1}\big) \\ &= \dfrac{p}{k p^{-\alpha}} \cdot (-\alpha k) p^{-\alpha-1} \\ &= p^{1+\alpha} \cdot (-\alpha) p^{-\alpha -1}\\ &= -\alpha \end{aligned} ε=kp−αp⋅(−αkp−α−1)=kp−αp⋅(−αk)p−α−1=p1+α⋅(−α)p−α−1=−α

故弹性为 − α -\alpha −α。

这意味着 CUBIC \text{CUBIC} CUBIC 丢包敏感性更高,丢包率小幅波动的时候, CUBIC \text{CUBIC} CUBIC 吞吐波动幅度更大。

评估敏感性,在低丢包链路,如骨干网,数据中心, CUBIC \text{CUBIC} CUBIC 具备优势, p − 3 / 4 p^{-3/4} p−3/4 带来巨大优势,填充高 BDP \text{BDP} BDP,这就是它替代 Reno-AIMD \text{Reno-AIMD} Reno-AIMD 的理由,但在随机丢包链路,如无线场景, CUBIC \text{CUBIC} CUBIC 的弹性过大,便失去了容错性。

CUBIC \text{CUBIC} CUBIC 选则更大的 α \alpha α,换取低丢包环境更高吞吐,代价是更容易被丢包扰动。但方向也很明确,即识别随机丢包并排除其影响,这就是我的另一个优化了,参见 区分丢包类型的 Reno-RNA。

CUBIC \text{CUBIC} CUBIC 是最好的端到端的,应用无关的通用拥塞控制算法,远胜 BBR \text{BBR} BBR,但总有人拿 iperf \text{iperf} iperf 测速说事,这本来就不对,但姑且如此,我说你把 CUBIC \text{CUBIC} CUBIC 操作点从崖点换到膝点试试,对方就听不懂了。

既然 loss-based \text{loss-based} loss-based,就总要丢点包,若改信号为时延达到目标,就能以一定点时延换取满载带宽,这样的 CUBIC \text{CUBIC} CUBIC 就是所有 capacity-seeking \text{capacity-seeking} capacity-seeking 算法的极致了。

就这么一环扣一环,证据确凿,非常明确的导出最后的合理优化方案,这才是一个做网络优化的工人应有的素质。

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

相关推荐
呉師傅1 小时前
Win7剪切文件变成复制文件如何修改【资源管理器异常类故障】
运维·网络·windows·电脑
honsor1 小时前
机房动环实战:H-THDRJ45 双网口温湿度变送器 Modbus RTU RS485 冗余组网方案
运维·服务器·网络
快乐的韭菜根根1 小时前
Slurm 指定 GPU 卡:`File=/dev/nvidiaX` 映射的坑与修复
java·服务器·网络
隐擎fox1 小时前
解密 HTTP/2 帧时序与流控指纹:Akamai H2 指纹逆向检测与协议重塑工程实战
网络·网络协议·tcp/ip·http
艾莉丝努力练剑2 小时前
【AI大模型接入SDK】Trae生成main方法
网络·人工智能·网络协议·http·架构·1024程序员节
隔窗听雨眠2 小时前
从行为引导到基础设施约束:AGI代理风险缓解的工程化路径
网络·人工智能·agi
pt10432 小时前
Cisco设备网络安全系列-16:微服务、Kubernetes与无服务器架构安全
网络·安全·微服务·架构
SatanII3 小时前
Kubernetes 网络
网络·容器·kubernetes
青瓦梦滋11 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http