TCP BBR之Startup gain的另一种推导法以及最新进展
自从上周有个大半夜帮温州皮鞋厂老板计算了那个之后,就着这个问题又进行了一些思考,过程中非常感谢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?这篇文章给出另一个不同的推导过程,最终无论是还是都可以统一到同一个模型中来。
我们依然用下面的函数分别代表和:
的计算方法在下面的链接可以找到:
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阶段,我们可以用来对draft里面的send_elapsed进行归一化处理。所以,假设为去归一化,这样我们就可以直接用来表示了。
有了上述的假设,我们再看一下是怎么推导出来的,请看下图:
这样我们可以导出:
其实,从图上看,显然还有另外一种拟合的方式,非常简单和对称:
我们看一下推导过程:
根据图示上的关系,我们有:
所以,最终可以导出:
这样在同一个模型里,我们发现两个值都是正确的,最终全部拟合了和每增倍的平滑曲线,两种方式的不同点主要体现在那个定积分代表的连续拟合到底是起点还是终点:
- 如果定积分作为终点,那么就是离散向连续拟合;
- 如果定积分作为起点,那么就是连续向离散拟合。
最终到底选择哪个值作为gain,正如作者Neal Cardwell所说,除了理想化的模型之外,还需要真实网络环境中的数据支撑,因此,并不确定gain的最终值。
事实上,最大的问题在于,如何确定初始,这个值目前显然更多的是拍脑袋的结果,而我们的模型之所以精确是因为计算所用的真的就是用下面的标准中的方法实测出来的:
Delivery Rate Estimation:https://tools.ietf.org/html/draft-cheng-iccrg-delivery-rate-estimation-00
显然,一开始的并没有实测条件,因此在初始的几个,Startup的表现并非如模型预测的那般精确,这也是不得已的事情。实际上,随着Startup阶段的推进,实际数据和模型的预测将会越来越匹配。
不多说。