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

我们依然用下面的函数分别代表PacingRatePacingRatePacingRate和cwndcwndcwnd:

f1(x)=2xf1(x)=2xf_1(x)=2^x
f2(x)=2xf2(x)=2xf_2(x)=2^x

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

有了上述的假设,我们再看一下2ln2≈2.892ln⁡2≈2.89\displaystyle\frac{2}{\ln2}\approx2.89是怎么推导出来的,请看下图:

这样我们可以导出:

G=2ln2≈2.885G=2ln⁡2≈2.885G=\dfrac{2}{\ln2}\approx2.885

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

我们看一下推导过程:

last_cwnd=∫x−1x−22xdx=2x4ln2last_cwnd=∫x−2x−12xdx=2x4ln⁡2last\_cwnd=\displaystyle\int_{x-2}^{x-1}2^xdx=\dfrac{2^x}{4\ln2}

next_cwnd=2xnext_cwnd=2xnext\_cwnd=2^x

根据图示上的关系G×last_cwnd=next_cwndG×last_cwnd=next_cwndG\times last\_cwnd=next\_cwnd,我们有:

G×2x4ln2=2xG×2x4ln⁡2=2xG\times \dfrac{2^x}{4\ln2}=2^x

所以,最终可以导出:

G=4ln2≈2.773G=4ln⁡2≈2.773G=4\ln2\approx2.773

这样在同一个模型里,我们发现两个GGG值都是正确的,最终全部拟合了PacingRate" role="presentation">PacingRatePacingRatePacingRate和cwndcwndcwnd每RTTRTTRTT增倍的平滑曲线,两种方式的不同点主要体现在那个定积分代表的连续拟合到底是起点还是终点

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

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


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


不多说。

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

  1. TCP BBR的startup bbr_high_gain为什么是2/ln2?

    温州皮鞋厂老板上周就一直在问这个.正好昨天和今天早上有空,加上又在雨夜,就写一波. 温州皮鞋厂老板的问题如下: 慢启动: init_cwnd×2n=cwndinit_cwnd×2n=cwndinit\ ...

  2. 来自Google持续更新中的TCP BBR v2.0最新进展

    昨晚,Google Groups "BBR Development" group发出了一个topic,我早上醒来才看到,大致扫了一眼,这又是BBR进化史上的一个里程碑. 先给出sl ...

  3. 再聊TCP BBR的2/ln2 bbr_high_gain问题

    嗯,确实还真有人看了我在雨夜写的上一篇文章: BBR的startup gain为什么是2/ln2?:https://blog.csdn.net/dog250/article/details/80660 ...

  4. TCP BBR Startup gain计算总结和Startup失速问题

    浙江温州皮鞋湿! 在前面几篇文章中,我采用纯数学的方式推导了TCP BBR Startup gain的由来,本文将通过一个BBR动力学模型对Startup gain的值做出直观地解释. BBR动力学模 ...

  5. 让人们久等了的TCP BBR v2 0快要出炉了

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这是连续 ...

  6. The math behind dynamics of TCP BBR

    引 BBR中有很多诸如1.25,0.75,0.89,0.77之类的魔数字,它们是调教出来的经验值呢,还是可以用数学推导发出来呢? 这些问题在结果导向的当今非常无聊,但也勉强仅图一乐吧.对我自己而言,除 ...

  7. implement tcp bbr on ns3 (在ns3上实现TCP BBR)

     After several days of work and debug, I implement TCP BBR algorithms on ns3.33.  One thing is to ge ...

  8. TCP BBR失速控制的一个小trick一个小patch

    昨晚凌晨抵达深圳,今早时间有限,于是就长话短说,但无论如何还是会有一些输出的,这次关于BBR.我曾经说过,我是不需要太多睡眠的,凌晨3点睡,照样早上6点起,应该可以把华为的人熬到cusi吧-不得而知了 ...

  9. 来自Google的TCP BBR拥塞控制算法解析

    写本文的初衷一部分来自于工作,更多的来自于发现国内几乎还没有中文版的关于TCP bbr算法的文章,我想抢个沙发.本文写于2016/10/15!         本文的写作方式可能稍有不同,之前很多关于 ...

最新文章

  1. 2022-2028年中国半导体用环氧塑封料(EMC)行业市场全景调查及投资前景分析报告
  2. Vue Vuex todo举例
  3. js抽奖概率随机取出数据(简单示例)
  4. 数据优化:求求你别再用offset和limit分页了
  5. 等级考试(一):三级网络---似曾相识
  6. 11gR2conceptes Memory Architecture中文翻译
  7. 习题:交换一组数据的位置
  8. xcode中遇到的英文名词(更新)
  9. resultset需要关闭吗_你给家里的采暖壁挂炉做保养了吗?
  10. gcms基峰有什么用_金鉴实验室 | 气相质谱(GCMS)
  11. 天锐绿盾屏幕监控,违规操作全记录
  12. axure html图标 图片大小,Axure 图标解决方案_html/css_WEB-ITnose
  13. 修复easyMule for Mac 2.0崩溃造成的任务丢失
  14. 一文读懂电子罗盘的原理、校准和应用
  15. 谷歌金山词霸合作版升级后出现CBSText.dll故障
  16. 时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
  17. HCIE-Cloud Computing v2.0 lab机考全讲解
  18. video.js 视频直播前端展示
  19. Linux mtd与ubi关系详解,ubi使用命令总结
  20. sql要学mysql还是php,MySQL_与MSSQL对比学习MYSQL的心得(一)--基本语法,这一期主要是学习MYSQL的基本 - phpStudy...

热门文章

  1. 亲身经历告诉你,学好英语的正确姿势(文末附自建英语学习网站)
  2. wamp打开php,wamp本地php环境开启GD库教程
  3. oracle wallet java_使用Oracle客户端wallet实现匿名登录
  4. 如何关闭Mybatis的DEBUG log打印
  5. 水清冷冷:PSCC2019/PSCC2020安装教程和学习技巧(附工具)
  6. STM32L431之SPI从模式使用DMA时数据偏移3个字节
  7. 使用ffmpeg、nvdia解码rtsp视频流,cuda做NV12-RGBA转换
  8. 支持向量机的理解,目前看到的最通透的
  9. 用Python向MongoDB中插入大csv文件
  10. Effective C++ 总结