我又来说这张图了,但这次它只是引子,不是主角:
注意到 log scale,这张图与前文分析的 AIMD response curve 异曲同工。
但 BBR 显然导不出 loss rate(即前文的 p) 和 cwnd 的关系,因为 BBR 是基于 BDP 的,而 BDP 与 buffer,丢包无关,它是即时测量值。于是变通一点,给定 BDP,对 inflight 和 p 建模,一种叠加 gain 丢包的方案是:
w = B b d p ( 1 − p ) + min ( B b d p ( G g a i n − 1 ) L c y c l e ⋅ ( 1 − p ) p , B b d p ⋅ p ) w=B_{bdp}\left(1-p\right)+\min\left(\frac{B_{bdp}\left(G_{gain}-1\right)}{L_{cycle}}\cdot\frac{\left(1-p\right)}{p},B_{bdp}\cdot p\right) w=Bbdp(1−p)+min(LcycleBbdp(Ggain−1)⋅p(1−p),Bbdp⋅p)
丢包时用 gain 补偿,不需要多解释。给出给动图,p 坐标为对数坐标:
注意看,是不是与 BBR 论文的图匹配了。
此外,不叠加 gain 丢包以及 叠加一次 gain 的式子如下:
w = B b d p ( 1 − p ) + min ( B b d p ( G g a i n − 1 ) L c y c l e , B b d p ⋅ p ) w=B_{bdp}\left(1-p\right)+\min\left(\frac{B_{bdp}\left(G_{gain}-1\right)}{L_{cycle}},B_{bdp}\cdot p\right) w=Bbdp(1−p)+min(LcycleBbdp(Ggain−1),Bbdp⋅p)
w = B b d p ( 1 − p ) + min ( B b d p ( G g a i n − 1 ) L c y c l e ⋅ ( 1 − p ) , B b d p ⋅ p ) w=B_{bdp}\left(1-p\right)+\min\left(\frac{B_{bdp}\left(G_{gain}-1\right)}{L_{cycle}}\cdot\left(1-p\right),B_{bdp}\cdot p\right) w=Bbdp(1−p)+min(LcycleBbdp(Ggain−1)⋅(1−p),Bbdp⋅p)
由于 BBR 及时 drain 掉 queue,它用 gain 补偿丢包也就无可厚非,依赖相对准确的 BDP 测量,BBR 的这种行为并没有超发。
关于 BBR 的说明先到这里,下面看 CUBIC,这次我要导出 CUBIC 的 response function。
观察 CUBIC 的表达式
w
(
t
)
=
C
⋅
(
t
−
(
1
−
β
)
⋅
W
C
3
)
3
+
W
w(t)=C\cdot(t-\sqrt[3]{\dfrac{(1-\beta)\cdot W}{C}})^3+W
w(t)=C⋅(t−3C(1−β)⋅W)3+W,只需要计算 w(t) 在 (-K, 0) 的积分即可,然后加上基底面积取倒数,就是丢包率 p,事实上只需要算出双对数坐标下的斜率即可,推导过程麻烦但不复杂,直接给出结果:
所有的算法都统一到这一个图里了,此外还可以加上 Scalable TCP,HSTCP 等,一张图里看一切。但值得注意的是,BBR 的 inflight 与 p 的关系是随行的,你必须给定一个 BDP 才能讨论,即 BBR 起始位置的 y 坐标就是 BDP,随着 p 的增加,曲线的 y 坐标给出 inflight。
TCP 的响应函数很多做新样式 RDMA 的人都没听过,但却是非常重要的,它直接导出了网络容量和发送窗口之间的关系,而网络容量又由 buffer,rtt,丢包率 共同决定。它对传输协议设计以及拥塞控制算法设计至关重要。本文属于旧事重提,更加详细的阐述还要更多,比如 bbr 的响应函数(由于 bbr 属于主动利用测量数据,不算响应)是什么,它在双对数坐标系里是什么样子,未完待续。当然,等着收礼的卑微 low 逼小经理并不知道我在说什么。
浙江温州皮鞋湿,下雨进水不会胖。