BBR 与 queuing
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相关推荐
- TCP拥塞控制算法BBR源码分析
BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入.该算法一出,瞬间引起了极大的轰动.在CSDN上也有众多大佬对此进行分析讨论,褒贬不一. 本文首先对源 ...
- 让人们久等了的TCP BBR v2 0快要出炉了
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这是连续 ...
- tcp拥塞算法分析四(bbr)
本文分析linux-4.14.69代码的bbr拥塞算法 bbr算是一个完全独立的拥塞算法,具有自己的拥塞状态机.tcp_cong_control函数已经被bbr_main函数接管了.() /* The ...
- 漫谈BBR算法的收敛点和公平性
明天大年三十,去趟迪士尼,今天下班早,睡前写下这篇,结束这一农历年. 其实写这篇的初衷起因于我对那些看见4个窗口就想加到8个窗口的人鄙视,并且这些人几乎都是狂暴之人,我发现那些做业务逻辑的只要懂点TC ...
- The math behind dynamics of TCP BBR
引 BBR中有很多诸如1.25,0.75,0.89,0.77之类的魔数字,它们是调教出来的经验值呢,还是可以用数学推导发出来呢? 这些问题在结果导向的当今非常无聊,但也勉强仅图一乐吧.对我自己而言,除 ...
- 如何解决TCP BBR的RTT不公平性问题
首先看下BBR的RTT不公平是什么. 设λ(t)\lambda(t)λ(t)为时间ttt时刻一条BBR流的测量速率,根据范雅各布森管道Bottleneck通量原理,它的值等于BDPRTT\dfrac{ ...
- BBR 对 buffer 的侵占
BBR 声称 anti-bufferbloat 且内置状态机有主动 drain,所以题目中使用了 "侵占",也可以用 "吞占". BBR ProbeBW Pro ...
- Google BBR拥塞控制算法背后的数学解释 | 深度
参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 作者 | 赵亚 转载自CSDN网站 杭州待了一段时间,回到深圳过国庆假期,无奈温州皮鞋?厂老板过节要回温州和上海,不在深圳,也就没有见着,非常 ...
- CentOS7安装bbr的正确姿势:更新到7.3,安装elrepo官方4.9正式版
2019独角兽企业重金招聘Python工程师标准>>> 1:首先yum update -y更新到最新CentOS 7.3 1611 cat /etc/redhat-release C ...
最新文章
- 常考数据结构与算法:在转动过的有序数组中寻找目标值
- 创业第一天,有三AI扔出了深度学习的150多篇文章和10多个专栏
- 从no-code到low-code:企业级hpaPaaS的未来
- flink on yarn模式下释放flink占用yarn的资源
- C++ float的内存布局
- Android学习第三天--事件监听器
- python图片横向合并_[宜配屋]听图阁
- JQuery中button提交表单报TypeError: elem[type] is not a function jquery
- VMware、Ubuntu和apt
- Spring之ApplicationContextAware接口详解
- java hbase流量日志,Spark+Hbase 亿级流量分析实战(日志存储设计)
- 计算机省二c语言编程改错题,2013年计算机二级C语言上机试题六十九
- paip.eclipse忽然启动报错的解决
- UNIX网络编程卷一 学习笔记 第一章 简介
- HTML鼠标悬停图片置顶,鼠标悬浮图片放大
- 同时删除多个 Excel 文档空白行
- 球球大作战JAVA小游戏
- 见习后的感想之关于献血
- 密钥管理系统研究(一)
- css怎样清除隐藏溢出,Css溢出隐藏