如何解决TCP BBR的RTT不公平性问题
Posted dog250
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决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×λ(t−8RTprop)
记 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λ(t−8T)
对于所有共享同一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+sRTT−Ti=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 以上是关于如何解决TCP BBR的RTT不公平性问题的主要内容,如果未能解决你的问题,请参考以下文章