BBR 为何无法兑现 no queuing 的承诺?

首先明确一个事实:

  • 很多条不同算法的流混部在现代高带宽异构网络上,单流行为几乎改变不了多流复用带宽的统计特征。

BBR 突然采集到的小 bandwidth,它 10 rounds 的 max-filter 轮子足够大,很容易越过这个坑,BBR 针对凹面的减震效果很不错。但 BBR 有个问题,如果突然采集到大 bandwidth,它就记住了,即使是个噪点,也要维持 10 rounds,该时间段内 BBR 将持续 overestimate bandwidth,从而持续 queuing。

多算法混部,多流复用带宽的场景,突然采集到大 bandwidth 的概率非常大,至少和突然采集到小 bandwidth 的概率相同,比如突然有大象流退出,该流将出让很大带宽,但这些带宽又会瞬间被多条流淹没,跟突然间的短突发会瞬间消耗大量 buffer 一样。

无论凹面噪点,还是凸面噪点,都应被平滑。BBR 有平滑凹面噪点的能力,却没有平滑凸面噪点的能力。因此 BBR 在多算法多流统计复用场景下,会持续反直觉 queuing,和 BBR paper 上描述的并不一致。

在 BBR 单流或者 BBR 多流场景,paper 描述的 BBR 动力学完全可确保最终的收敛点 no queuing,但多算法多流场景, BBR 不但不能越过反而会记住凸面噪点,overestimate bandwidth 会叠加。

比如噪点 A 被 max-filter 记住,BBR 将以 overestimate 的 A 作为基准 pacing rate,如果又采集到了噪声 A + d,则 A + d 将会成为新的基准 pacing rate,至少在 10 rounds 内有效,以此类推,因此 BBR 的 overestimate 是可叠加的。这很无奈。

怎么办?比较了然的两点:

  • 用采集 bandwidth 的移指平均作为 max-filter 的输入,或用 max-filter 的输出与当前采集 bandwidth 做移指平均。移指平均可平滑噪点,probe 带宽虽慢,但稳一些。
  • ProbeBW 状态下,不是 probe 到的带宽,即使它更大,也不输入 max-filter,只有 up probe 获得的额外带宽才做 maxbw 更新。外部噪声输入很容易打乱内部状态机判定。

再次看到,BBR 也是一个 paper 算法,只是它恰好在大多数实际场景下吞吐表现比 CUBIC 好,它才好。所有针对 BBR 的二次优化,也都是 paper 算法,没有一个能够逃脱 Why We Don’t Know How To Simulate The Internet 的魔咒。

不要指望调整一条流的 cwnd 或者 pacing rate,就能对整条链路的拥塞状态产生影响,这并不是你调整的这条流在和另一条流竞争,而是千百条流在博弈,所有流的整体行为只能产生一个统计分布的效果。

当然,也不要对实施任何算法的任何流的任何行为做假设,无论该行为是合理的,还是不合理的,是意料中的,还是意料外的。所有的策略都要基于统计特征,而不是算法的假设。

现在的网络带宽比十几年前以及更早时候高几个量级,对于拥塞控制的理解需做如下改变:

  • 单流很难填满带宽,绝大多数流量都是 app-limited 或 rwnd-limited,不再 cwnd-limited。
  • 延时抖动几乎不是单流造成,单流拥塞控制策略调整对整体统计数据的平均分布影响微乎其微。
  • 通过激进发送挤兑带宽的收益越来越小。
  • 高带宽可能是 bufferbloat 挤兑出来的高延时不良带宽,好像通货膨胀都取不到钱,谁发动的人多,取到的钱就多,但代价也大。

浙江温州皮鞋湿,下雨进水不会胖。

BBR 与 queuing相关推荐

  1. TCP拥塞控制算法BBR源码分析

      BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入.该算法一出,瞬间引起了极大的轰动.在CSDN上也有众多大佬对此进行分析讨论,褒贬不一.   本文首先对源 ...

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

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

  3. tcp拥塞算法分析四(bbr)

    本文分析linux-4.14.69代码的bbr拥塞算法 bbr算是一个完全独立的拥塞算法,具有自己的拥塞状态机.tcp_cong_control函数已经被bbr_main函数接管了.() /* The ...

  4. 漫谈BBR算法的收敛点和公平性

    明天大年三十,去趟迪士尼,今天下班早,睡前写下这篇,结束这一农历年. 其实写这篇的初衷起因于我对那些看见4个窗口就想加到8个窗口的人鄙视,并且这些人几乎都是狂暴之人,我发现那些做业务逻辑的只要懂点TC ...

  5. The math behind dynamics of TCP BBR

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

  6. 如何解决TCP BBR的RTT不公平性问题

    首先看下BBR的RTT不公平是什么. 设λ(t)\lambda(t)λ(t)为时间ttt时刻一条BBR流的测量速率,根据范雅各布森管道Bottleneck通量原理,它的值等于BDPRTT\dfrac{ ...

  7. BBR 对 buffer 的侵占

    BBR 声称 anti-bufferbloat 且内置状态机有主动 drain,所以题目中使用了 "侵占",也可以用 "吞占". BBR ProbeBW Pro ...

  8. Google BBR拥塞控制算法背后的数学解释 | 深度

    参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 作者 | 赵亚 转载自CSDN网站 杭州待了一段时间,回到深圳过国庆假期,无奈温州皮鞋?厂老板过节要回温州和上海,不在深圳,也就没有见着,非常 ...

  9. CentOS7安装bbr的正确姿势:更新到7.3,安装elrepo官方4.9正式版

    2019独角兽企业重金招聘Python工程师标准>>> 1:首先yum update -y更新到最新CentOS 7.3 1611 cat /etc/redhat-release C ...

最新文章

  1. 常考数据结构与算法:在转动过的有序数组中寻找目标值
  2. 创业第一天,有三AI扔出了深度学习的150多篇文章和10多个专栏
  3. 从no-code到low-code:企业级hpaPaaS的未来
  4. flink on yarn模式下释放flink占用yarn的资源
  5. C++ float的内存布局
  6. Android学习第三天--事件监听器
  7. python图片横向合并_[宜配屋]听图阁
  8. JQuery中button提交表单报TypeError: elem[type] is not a function jquery
  9. VMware、Ubuntu和apt
  10. Spring之ApplicationContextAware接口详解
  11. java hbase流量日志,Spark+Hbase 亿级流量分析实战(日志存储设计)
  12. 计算机省二c语言编程改错题,2013年计算机二级C语言上机试题六十九
  13. paip.eclipse忽然启动报错的解决
  14. UNIX网络编程卷一 学习笔记 第一章 简介
  15. HTML鼠标悬停图片置顶,鼠标悬浮图片放大
  16. 同时删除多个 Excel 文档空白行
  17. 球球大作战JAVA小游戏
  18. 见习后的感想之关于献血
  19. 密钥管理系统研究(一)
  20. css怎样清除隐藏溢出,Css溢出隐藏

热门文章

  1. 受保护的视图,请注意-来自Internet的文件可能包含病毒。得手动启用编辑
  2. javac编译问题:使用了未经检查或不安全的操作
  3. Lucene 索引原理
  4. Mysql Error-1129
  5. 一张图看懂原生app和H5的区别
  6. 关闭linux udev检测,linux udev配置
  7. 服务器存储(基础概念及历史)
  8. 使用matlab在图片中插入文字并保存
  9. java lucene 开发介绍
  10. nextInt() 接收异常bug