欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-09 21:19:59
...

自从上周有个大半夜帮温州皮鞋厂老板计算了那个2ln2之后,就着这个问题又进行了一些思考,过程中非常感谢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?这篇文章给出另一个不同的推导过程,最终无论是2ln22.89还是4ln22.77都可以统一到同一个模型中来。

我们依然用下面的函数分别代表PacingRatecwnd

f1(x)=2x
f2(x)=2x

PacingRate的计算方法在下面的链接可以找到:
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阶段,我们可以用RTT来对draft里面的send_elapsed进行归一化处理。所以,假设RTT1去归一化,这样我们就可以直接用cwnd来表示PacingRate了。

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

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

这样我们可以导出:

G=2ln22.885

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

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

我们看一下推导过程:

last_cwnd=x2x12xdx=2x4ln2

next_cwnd=2x

根据图示上的关系G×last_cwnd=next_cwnd,我们有:

G×2x4ln2=2x

所以,最终可以导出:

G=4ln22.773

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

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

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


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


不多说。

相关标签: bbr startup gain