如何解决TCP BBR的RTT不公平性问题

首先看下BBR的RTT不公平是什么。

λ ( t ) \lambda(t) λ(t)为时间 t t t时刻一条BBR流的测量速率,根据范雅各布森管道Bottleneck通量原理,它的值等于 B D P R T T \dfrac{BDP}{RTT} RTTBDP

λ ( t ) = B D P R T T \lambda(t)=\dfrac{BDP}{RTT} λ(t)=RTTBDP

对于需要拥塞控制强干预的流而言,忽略次要的主机处理时延,RTT由传播时延和排队时延组成,从而有:

λ ( t ) = B D P R T p r o p + D e l a y q u e u i n g \lambda(t)=\dfrac{BDP}{RTprop+Delay_{queuing}} λ(t)=RTprop+DelayqueuingBDP

如果该流完全按BBR的行为探测带宽,那么 λ ( t ) \lambda(t) λ(t)则是该流在上一轮测量带宽基础上以1.25倍增益up probe的结果,该up probe过程发送的数据总量即BDP,则:

λ ( t ) = 1.25 × R T p r o p × λ ( t − 8 R T p r o p ) R T p r o p + D e l a y q u e u i n g \lambda(t)=\dfrac{1.25\times RTprop\times \lambda(t-8RTprop)}{RTprop+Delay_{queuing}} λ(t)=RTprop+Delayqueuing1.25×RTprop×λ(t8RTprop)

R T p r o p RTprop RTprop T T T D e l a y q u e u i n g Delay_{queuing} Delayqueuing D D D,则有:

λ ( t ) = 1.25 T T + D λ ( t − 8 T ) \lambda(t)=\dfrac{1.25T}{T+D}\lambda(t-8T) λ(t)=T+D1.25Tλ(t8T)

对于所有共享同一Bottleneck queue的流,其排队时延 D D D是一致的。注意,有效增益系数是小于1.25的,因为一旦产生了queuing,实际带宽不可能按照1.25倍速来增益,而是小于1.25倍速,这是有效增益系数分母中 D D D引入的。

于是可以从测量带宽 λ ( t ) \lambda(t) λ(t)的有效增益系数 1.25 T T + D \dfrac{1.25T}{T+D} T+D1.25T看出BBR的RTT不公平性:

  • RTT越大,有效增益系数越大,抢占能力越强。

原生BBR可以天然对抗这种RTT不公平性,BBR在ProbeBW状态的up probe探测周期为8 rounds:

static const int bbr_pacing_gain[] = {
    
    
	BBR_UNIT * 5 / 4,	/* probe for more available bw */
	BBR_UNIT * 3 / 4,	/* drain queue and/or yield bw to other flows */
	BBR_UNIT, BBR_UNIT, BBR_UNIT,	/* cruise at 1.0*bw to utilize pipe, */
	BBR_UNIT, BBR_UNIT, BBR_UNIT	/* without creating excess queue... */
};

很明显,RTT越大,8 rounds周期就越久,从而让RTT小的流在相同时间内up probe探测更加频繁。这在一定程度上促进了不同RTT流之间抢占带宽的公平性。

然而这解决不了另外的问题。

在8 rounds周期的up probe机制下,相对较大RTT的流反应太慢了。

比如,共享同一bottleneck的其它流退出,由于RTT太大,执行完6 rounds steady phase的时间太久,在下一次up probe之前,腾出来的带宽被浪费了。

此外,如果在steady phase,一个RTT很大的流由于其它流退出排空了queue,从而测得了RTprop,此时它应该尽快up probe,而不是等到up probe phase的到来。

总体而言,原生BBR从增益系数上看,对相对较小RTT的流抢占带宽不利,但是从up probe周期上看又对相对较大RTT的流灵敏反应不利,因此这里有一些魔改的空间。

把公平性体现在增益系数上,为现有增益系数乘上一个RTT的减函数即可,以固定的绝对时间周期进行up probe,抹去RTT的影响,这就皆大欢喜了。这非常类似BIC到CUBIC之间的进化,CUBIC的增窗函数中没有RTT因子,因此它也是以绝对时间为参照的。

寻找一个RTT的减函数作为系数因子很容易,RTT取倒数即可,但问题是要确定一个物理意义。

理想公平情况下,RTT不同的两条流的带宽相同,它们的BDP之比就是RTT之比,设 α i \alpha_i αi为增益系数因子,等式如下:

α 1 T 1 λ 1 ( t ) α 2 T 2 λ 2 ( t ) = T 1 + D T 2 + D \dfrac{\alpha_1T_1\lambda_1(t)}{\alpha_2T_2\lambda_2(t)}=\dfrac{T_1+D}{T_2+D} α2T2λ2(t)α1T1λ1(t)=T2+DT1+D

如果 λ 1 = λ 2 \lambda_1=\lambda_2 λ1=λ2,那么:

α 1 T 1 α 2 T 2 = T 1 + D T 2 + D \dfrac{\alpha_1T_1}{\alpha_2T_2}=\dfrac{T_1+D}{T_2+D} α2T2α1T1=T2+DT1+D

这下我们就有了 α \alpha α的通项:

α = g ( T ) = T + D T = 1 + D T \alpha=g(T)=\dfrac{T+D}{T}=1+\dfrac{D}{T} α=g(T)=TT+D=1+TD

显然,这是一个大于1的以RTprop T T T为自变量的减函数,注意到 D D D就是排队时延,它等于一条流的实际RTT和其RTprop的差,因此:

α = T i + s R T T − T i T i = s R T T T i \alpha=\dfrac{T_i+sRTT-T_i}{T_i}=\dfrac{sRTT}{T_i} α=TiTi+sRTTTi=TisRTT

其中, s R T T sRTT sRTT代表实际测得的RTT,其值可以取即时RTT移动指数平均过的srtt。

OK,现在我们就有了一个RTT公平的增益系数为准的迭代公式:

λ ( t ) = α T T + D λ ( t − 8 T ) = λ ( t − 8 T ) \lambda(t)=\dfrac{\alpha T}{T+D}\lambda(t-8T)=\lambda(t-8T) λ(t)=T+DαTλ(t8T)=λ(t8T)

α \alpha α增益下,最终测量带宽 λ \lambda λ不再增加达到了平衡。在上面 α \alpha α表达式 g ( T ) g(T) g(T)里,RTprop记为 T T T T T T越大,增益越小,在这个保证下,不同的RTT的流也能公平up probe带宽了。

在上面式子的公平性系数保证下,便可以把ProbeBW的steady phase固定为固定间隔了,比如120ms,大概相当于RTT为20ms的流的6 rounds。

为了配合ProbeBW steady phase时间的固定化,max-filtered bandwidth的window也需要调整。在ProbeBW steady phase是6个RTT时,max-filtered bandwidth的window是10 rounds,如今要配合着固定间隔来归一,需要调整成:

W = 120 m s T + 4 W=\dfrac{120ms}{T}+4 W=T120ms+4

如此来保证至少有max-filtered bandwidth的window至少覆盖两次up probe之间的周期间隔,以保证可以在up probe时以window内的max bandwidth来探测。

写了一版未经验证的代码,可以随取随测随改,有太多的参数需要调。代码路径:
https://github.com/marywangran/tcp-fair-bbr

再看原生BBR测量带宽 λ \lambda λ的表达式:

λ ( t ) = 1.25 T T + D λ ( t − 8 T ) \lambda(t)=\dfrac{1.25T}{T+D}\lambda(t-8T) λ(t)=T+D1.25Tλ(t8T)

可以看出,当BBR误判或者其它流量导致排队时延 D D D大于 0.25 T 0.25T 0.25T的时候,有效增益将会变成负向,测量速率不增反减,这也就是为什么BBR看起来是如此优秀,但实际和其它CC混合部署却往往达不到效果的原因。

这个问题也是RTT不公平问题导致,但这一次并不是BBR流之间的RTT不公平,而更可能是RTT流和使用其它Loss-based cc流之间的RTT不公平性导致,关于这个问题,请参考上周的文章:
https://zhuanlan.zhihu.com/p/397222931

我一向是把BBR当成大型民航客机看待的,相比之下,CUBIC可能只是滑翔机。BBR的复杂性在于看起来是如此高端,一旦飞上天,再豪华的波音747掉下来也是灰飞烟灭,然而这很少发生,因为民航客机的复杂系统先进到即便发动机熄火也能安全迫降。

参考:
https://13838019299791283621.googlegroups.com/attach/7a1ad8b39994e/improve_bbr-2.pdf?part=0.1&view=1
建议阅读原文


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

猜你喜欢

转载自blog.csdn.net/dog250/article/details/119652359