TCP BBR之Startup gain的另一种推导法以及最新进展

自从上周有个大半夜帮温州皮鞋厂老板计算了那个 2 ln 2 之后,就着这个问题又进行了一些思考,过程中非常感谢BBR的作者之一Neal Cardwell,帮忙解释了很多的细节并同时放出了关于BBR Startup gain的最新模型,看这里:
https://github.com/google/bbr/tree/master/Documentation/startup/gain/analysis

其中的bbr_startup_gain.pdf中给出了bbr_high_gain的另一个值2.77,该文档通篇通过一个简易的数学模型解释了这个2.77是怎么算出来的,推导过程和我的TCP BBR的startup bbr_high_gain为什么是2/ln2?这篇文章的推导过程非常类似,细节我这里最多无非也就翻译一遍,就不浪费篇幅了。

本文我来基于我的TCP BBR的startup bbr_high_gain为什么是2/ln2?这篇文章给出另一个不同的推导过程,最终无论是 2 ln 2 2.89 还是 4 ln 2 2.77 都可以统一到同一个模型中来。

我们依然用下面的函数分别代表 P a c i n g R a t e c w n d

f 1 ( x ) = 2 x
f 2 ( x ) = 2 x

P a c i n g R a t e 的计算方法在下面的链接可以找到:
Delivery Rate Estimation:https://tools.ietf.org/html/draft-cheng-iccrg-delivery-rate-estimation-00

send_elapsed = (P.sent_time - P.first_sent_time)
send_rate = data_acked / send_elapsed

在Startup阶段,我们可以用 R T T 来对draft里面的send_elapsed进行归一化处理。所以,假设 R T T 1 去归一化,这样我们就可以直接用 c w n d 来表示 P a c i n g R a t e 了。

有了上述的假设,我们再看一下 2 ln 2 2.89 是怎么推导出来的,请看下图:

这里写图片描述

这样我们可以导出:

G = 2 ln 2 2.885

其实,从图上看,显然还有另外一种拟合的方式,非常简单和对称:

这里写图片描述

我们看一下推导过程:

l a s t _ c w n d = x 2 x 1 2 x d x = 2 x 4 ln 2

n e x t _ c w n d = 2 x

根据图示上的关系 G × l a s t _ c w n d = n e x t _ c w n d ,我们有:

G × 2 x 4 ln 2 = 2 x

所以,最终可以导出:

G = 4 ln 2 2.773

这样在同一个模型里,我们发现两个 G 值都是正确的,最终全部拟合了 P a c i n g R a t e c w n d R T T 增倍的平滑曲线,两种方式的不同点主要体现在那个定积分代表的连续拟合到底是起点还是终点

  • 如果定积分作为终点,那么就是离散向连续拟合;
  • 如果定积分作为起点,那么就是连续向离散拟合。

最终到底选择哪个 G 值作为gain,正如作者Neal Cardwell所说,除了理想化的模型之外,还需要真实网络环境中的数据支撑,因此,并不确定gain的最终值。


事实上,最大的问题在于,如何确定初始 P a c i n g R a t e ,这个值目前显然更多的是拍脑袋的结果,而我们的模型之所以精确是因为计算所用的 P a c i n g R a t e 真的就是用下面的标准中的方法实测出来的:
Delivery Rate Estimation:https://tools.ietf.org/html/draft-cheng-iccrg-delivery-rate-estimation-00
显然,一开始的 P a c i n g R a t e 并没有实测条件,因此在初始的几个 R T T ,Startup的表现并非如模型预测的那般精确,这也是不得已的事情。实际上,随着Startup阶段的推进,实际数据和模型的预测将会越来越匹配。


不多说。

猜你喜欢

转载自blog.csdn.net/dog250/article/details/80754825
今日推荐