bbr 是真不行

2024-05-10 22:28
文章标签 不行 bbr

本文主要是介绍bbr 是真不行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

bbr 作为 mimd 实例如何收敛到公平请看 瓶颈带宽的公平收敛,但这只是公平收敛,并不是 buffer 收敛。

上午跟朋友讨论了一个有趣的问题,感觉有必要揭露一下 bbr 的 buffer 不收敛。若不是有 probertt,多流共享瓶颈链路场景下,无限 buffer 会被无限占领,说实话,仅靠 probebw 状态的 drain 阶段是无法 buffer 收敛的,本质原因说过好多次,只要挤 buffer,总能挤出 bandwidth,drain 掉的仅仅是 “1/4old_maxbwminrtt - 挤出的 bw” 之外的 inflight。

都在下图(这是经典的收敛图,建议掌握):
在这里插入图片描述
话说能不能缩短 probertt 间隔,先看看 bbr 标准 怎么说:

An ProbeRTTInterval of 5 secs is short enough to allow quick convergence if traffic levels or routes change, but long enough so that interactive applications (e.g., Web, remote procedure calls, video chunks) often have natural silences or low-rate periods within the window where the flow’s rate is low enough for long enough to drain its queue in the bottleneck.

根本就没提 buffer,可能根本就没有认识到 bbr 只能靠 probertt 来收缩 buffer。那么缩短 probertt interval 呢?

标准里说了 interactive applications 的事,但大文件或持续流呢?probertt 期间,链路 queue 被 drain 掉了,可 host write buffer 却堆积了。bbr 隐约知道 probertt 状态下 drain 太狠了,严重影响端到端 p99 latency,在 bbr2/3 中将其妥协成了 50% inflight,然而这就无法保证尽力 drain 掉 queue 了。

bbr 开合跳幅度过大但却不协调,maxbw 和 minrtt 两个量正交,根本无法同时测的,它们之间 gap 越大,queue 就倾向于越大。maxbw 取 10-round filter,minrtt 则长达秒级,cwnd = 2 maxbw*minrtt 覆盖的动态范围过大,多亏了 probertt,否则绝对跑飞。

总之,bbr 是真不行,它吸引人的点在于它的高吞吐,显然这是依靠大摆王八拳获得的。bbr 有个结界,想公平收敛又 buffer 收缩,则趋向和 cubic 一致,吞吐自然也就下来了,而追求大吞吐,则必然放弃公平性和 buffer 收缩,靠猛挤就完了。

很多人发现 bbr3,bbr2 的吞吐不如 bbr1,人们升级 bbr 到 bbr3 的动机便不大了。

bbr 还是没有找对操作点,maxbw 和 minrtt 无法同时测得,那就别测了,best_E = max(bw / delay) 才是正确的操作点,它只有一个值。我们发现,当只有一条流的单流独享链路时,它等同于 bbr,无任何代价,不占任何 buffer,但多流共享链路时,best_E 的代价就是 buffer,而既然是 best_E,则 delay 倾向于更小。bbr 试图不付出任何代价收敛到 maxbw/minrtt,只能说是奢望,但在单流场景,它确实可以,因此 bbr 只是个单流算法。

姿势掌握了吗?

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

这篇关于bbr 是真不行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977726

相关文章

BBR 与 AIMD 共存公平性探究

一个古已有之的结论: deep buffer 场景,bbr 相对 reno/cubic 等 aimd 有优势,侵占性强;shallow buffer 场景,aimd 有优势,bbr 带宽被挤占。 本文用实例分析 why 并给出 how。 先看 deep buffer 场景 bbr 单挑 aimd 双流的效果,下图是标准 bbr,被虐成经理: 下图是用 max(bw/delay) 替代 ma

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

BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入。该算法一出,瞬间引起了极大的轰动。在CSDN上也有众多大佬对此进行分析讨论,褒贬不一。   本文首先对源码进行了分析,并在此基础上对BBR算法进行总结。 1.源码分析 /* Bottleneck Bandwidth and RTT (BBR) congestion control** BBR co

用相图分析 bbr,inflight 守恒的收敛速度

以下的代码绘制了 bbr 的收敛相图: #!/opt/homebrew/bin/python3import numpy as npimport matplotlib.pyplot as pltfrom scipy.integrate import odeintdef model(vars, t, C, g):x, y = varsdxdt = C * (g * x) / (g * x + y

phpMailer在本地可以发送邮件,服务器上不行

如果你使用的邮箱端口是25的话,要看你自己的服务器是否禁用了25端口,比如阿里云的ECS就禁用了25端口;一开始我也被这个坑死了,因为我使用的是网易邮箱,网易邮箱使用的端口是25,一直找代码的原因,结果却是服务商的服务器问题。 解决办法:使用其他邮箱发送邮件,比如QQ邮箱,QQ邮箱使用的端口是465

nginx 各种配置不行,怎么办呢

问题1:nginx 配置好后台,但是报Whitelabel Error Page 错误  This application has no explicit mapping for /error 解决: nginx代理的网址要和代理名的配置一样,如果代理名后面加“/”,则代理的网址最后也要加“/” 具体配置: http {     include       mime.types;

Android 事件分发:为什么有时候会出现事件冲突?事件的顺序是如何的?出现事件冲突如何解决呢?比如为什么左右可以滑动,而上下却不行?

目录: 一、为什么要学习事件呢? 1.在开发复杂的应用时,经常需要处理复杂的用户交互逻辑。学习事件分发机制可以帮助你更好地控制事件的传递和处理流程,从而解决一些复杂的交互问题,如滑动冲突、点击穿透等。 2.面试需要:事件冲突的原因是什么?在开发过程中,可能会遇到一些与事件处理相关的问题,如事件没有被正确传递、事件被错误地拦截等。了解事件分发机制可以帮助你更快地定位问题所在,并找到

bbr 微观建模与 inflight 守恒

bbr 解决 bufferbloat 的核心在于一个负反馈方程,设 x 为预估带宽,x_i 为 inflt,则: d x i d t = x ⋅ R − x i \dfrac{dx_i}{dt}=x\cdot R-x_i dtdxi​​=x⋅R−xi​ 这个简单的负反馈能让数据流收住 buffer,显然,当其 inflt 大于 bdp 时,方程为负数,直到排空 buffer。如果没有这个方程

情怀不能当饭吃,但是,光吃饭而没有情怀是不行的 所以,继续→ ·星棋智网·多轨道壳卫星互联网中的太空路由器节点IPv6子网及地址规划(代码实现版的粗略算法)

IPv6地址共128位,形如 2xxx::/64的64位前缀的IPv6全球单播地址中,我们来考察这前面的一半,也就是64位的前缀部分: 前面我们假定星棋智网卫星互联网的全球公网为2426进行标识,所以,64位的网络前缀中,还剩下【3段 * 16位】地址,形如 2426:XXXX:XXXX:XXXX。 现在我们的考察场景是多轨道壳卫星互联网,我们把每颗卫星看成是IPv6的太空路由器网络节点,

以前嗤之以鼻,现在逐字学习!缠论量化代码大公开!|邢不行

这是邢不行第 113 期量化小讲堂的分享 作者 | 邢不行、密斯锌硒 一千个人眼中有一千个哈姆雷特,我们只是尽可能的去量化我们理解的部分缠论的思路。 我们过往在文章中多次聊过技术指标,如MACD、KDJ等等,也聊过一些K线形态,如跳空回补、锤子线等等。 近几年也一直有人问我能不能对缠论做量化,本文就来做相关尝试。 01 缠论的介绍 1、缠论介绍 先给不了解的小白介绍下缠论。

闲聊:为什么需要正确的了解BBR?

为什么需要正确的了解BBR,当人们了解了BBR才能明白如KCP、锐速等解决方案与BBR本身的不同性,而不是听信谗言,一顿乱输出。 BBR是一个关注尽可能吃满管道宽频上限的算法,所以BBR并不关心丢包的问题,而类似 cubic、kcp 等拥塞控制算法都需要考虑丢包的问题。 这也意味着BBR,在产生拥塞的时候会存在一定的滞后性,它通过G(增益因子)来保持扩大带宽及感知,但过程至少需要一个R