BBRv2,v3 吞吐为什么不如 BBRv1

为什么 BBRv2/3 测试下来吞吐远不如 2016 年底的 BBRv1,这个事曾经提到过很多次,今天分析一下原理。注意三个事实:

  • BBR 是一种拥塞控制算法;
  • BBR 已经迭代到了 v3 版本;
  • BBRv3 的 “性能” 远不如 BBRv1.

第二点有点不可思议,一般而言,不存在版本越新性能越差的,如果有,一定是 bug,但对于 BBR 却是不争的事实。到底发生了什么?

如果你不知道拥塞控制算法的性能意味着什么,建议先去了解,这里不赘述。从一篇有趣的论文开始本文:BBR vs. BBRv2: A Performance Evaluation.

摘要部分最后几句:

Our results suggest that BBRv2 trades performance for better fairness under losses. To bridge this gap, we investigate the workings of BBRv2 and find that BBRv2 employs a long-term upper bound on sending rate that is not robust to losses. This upper bound is continually decremented in the presence of persistent losses, thereby depressing goodput. We show that by aligning BBRv2’s upper bound with its maximum bandwidth estimation, BBRv2’s performance can be greatly improved while maintaining its fairness.

好家伙,还好只 aligning 了 upper bound,要是连 lower bound 也给 aligning 了,差一点就回退到 BBRv1 了。后面会分析到,upper bound 越大,吞吐越高,但必然以公平性为代价,若将 upper/lower bound 全取消,吞吐达到最优,公平性全无,因此这篇论文其实什么都没说,就是滑动了一下滑杆,展示了这个交易。

BBRv2/3 增加这两个 bound 的目标就是解决公平性问题,细节还得看 BBR Congestion Control(IETF-Draft):

BBR.inflight_hi(upper bound): The long-term maximum volume of in-flight data that the algorithm estimates will produce acceptable queue pressure, based on signals in the current or previous bandwidth probing cycle, as measured by loss. That is, if a flow is probing for bandwidth, and observes that sending a particular volume of in-flight data causes a loss rate higher than the loss rate objective, it sets inflight_hi to that volume of data. (Part of the long-term model.)
BBR.inflight_lo(lower bound): Analogous to BBR.bw_lo, the short-term maximum volume of in-flight data that the algorithm estimates is safe for matching the current network path delivery process, based on any loss signals in the current bandwidth probing cycle. This is generally lower than max_inflight or inflight_hi (thus the name). (Part of the short-term model.)

BBRv2/3 遵循下列逻辑来调整 upper bound 和 lower bound:

// upper bound 在 ProbeUP & Refill phase 调整
loss_too_high_in_ProbeUP & Refill:inflight_hi = max_t(in_flight, bdp * (1 - beta);// lower bound 在 ProbeUP & Refill phase 之外调整
any_loss_except_ProbeUP & Refill:inflight_lo = max_t(max_inflight_latest, inflight_lo * (1 - beta);

用 (1 - beta) 兜底是为了 “ ensure that BBR does not react more dramatically than CUBIC’s 0.7x multiplicative decrease factor.”

long-term upper bound 维持 AIMD 周期间与 reno/cubic 的公平性,short-term lower bound 维持 AIMD 周期内与 reno/cubic 的公平性,如下图所示:
在这里插入图片描述

就解释一句,红绿黄线下的面积是一个 cycle 内 BBRv2/3 的传输总量,它对应一个 AIMD 周期内虚线下面的面积,肉眼可见,大差不差,这就是所谓 “对 reno/cubic 的公平性”。

ProbeUP phase 是个受 loss_thresh 约束的指数增加 upper bound 的逻辑,期间,任何丢包率越过 loss_thresh 均将对 upper bound 进行 mutiplicatively decrease,整个 cycle 中只要发现比 upper bound 更大的实际 inflight,都会更新 inflight_hi,比如 ProbeUP 时的随机丢包导致 loss_thresh 越界而 upper bound 被削减,后续的 cwnd_gain 将可能填充更大的 inflight。

注意,loss_thresh 越界时,只在 refill,ProbeUP phase 才更新 upper bound,因为 cruise 默认已在 drain phase 后完成适配 maxbw,minrtt 这个操作点了。

可见,BBRv2/3 除却 BBR 状态机就是一个 cwnd-based reno/cubic,因此有两个结论:

  1. 在丢包率高于 loss_thresh 场景,BBRv2/3 维持与 reno/cubic 之公平性,吞吐跌落至与之持平;
  2. 在丢包率低于 loss_thresh 场景,BBRv2/3 获得比 reno/cubic 更大的吞吐,提高了带宽利用率。

虽说 BBRv2/3 采用了指数增加 upper bound 的方式,但为了和 reno/cubic 一致,BBR 确保在一个和 reno/cubic AIMD 周期一致的 cycle 内维持 upper bound 稳定(前面提到取实际 inflight 更新 inflight_hi 以对抗随机丢包的技巧不在此约束内)而不再 ProbeUP,和 AIMD 零存整取不同,BBRv2/3 相当于整存整取。

BBRv2/3 PROBE_BW 的一个 cycle 确定为一个典型的 reno/cubic 流的 AIMD 周期,约 2s,或者动态设置为 BDP 个 round,因为一个 AIMD 周期就是 cwnd_max 个 round。

看这篇论文中展示 BBRv2 在丢包率 2% 下吞吐陡降的图示:
在这里插入图片描述

2MB buffer,以 1KB mss 算,一共就是 2000 个段,按照 AIMD 理论,丢包率即 1/2000,相比 2% 的丢包率要低 40 倍,由 reno 吞吐公式可知其吞吐要高 根号 √40 倍,约等于 6.3,从图上可见,inflight 理论上跌落到 5500*0.85/6.3 = 742,从图上看,大差不差。

再看 BBRv1 论文中抗丢包的广告图(BBR 可容忍 20% 丢包,相比之下,cubic 连 1% 都容忍不了),若 long-term/short-term bound 均不受限(BBRv1 无 upper bound 约束),BBR 可支撑 20%+ 丢包率(解方程求出 gain = 1.25 时的最大丢包率),单独 short-time bound 限制在均匀丢包的 reno/cubic 共存场景亦碾压 reno/cubic,因此 BBRv2/3 的实际吞吐低的原因是其 long-term bound 即 upper bound 不断被丢包压制却鲜有上升导致。

因此,想提高吞吐的方案就摆在眼前了:

  • 要么升高 inflight_hi;
  • 要么升高 loss_thresh。

但如论文所示,如此做法肯定损害了对 reno/cubic 的公平性,它的结论很明显,如此修改对原生 BBRv2/3 而言提高了吞吐,而对 BBRv1 而言提高了公平性,好一个田忌赛马。这个结论意味着,BBRv2/3 基本锁死了吞吐和公平性的权衡,顾此失彼,不可兼得。

值得再次强调,当丢包率低于 loss_thresh = 2% 时,Probe_UP 不受阻碍,BBRv2/3 相对 reno/cubic 还是有很大吞吐优势。BBRv2/3 与 reno/cubic 共存的宗旨就是,有难同当,有福独享。
因此,BBRv2/3 吞吐不如 BBRv1 并非问题,而是特性,它并非论文指数的那样,long-term bound inflight_hi 无法涨回去,虽然 short-term bound 确实会传递给 long-term bound,但正如其名字所表达,影响也只是 short-term,一旦丢包消除,long-term bound 下一个 cycle ProbeUP 时有自己的增长逻辑,即使在当前 cycle,由于 short-term bound inflight_lo 在 ProbeUP 和 Refill phase 不起作用,这两个 phase 的 loss_thresh 越界虽 cut 了 inflight_hi,但若真的只是随机丢包越界,在 cruise phase 靠 cwnd_gain 造成 inflight 超过 upper bound,仍可递增 long-term bound。论文所下的结论,仅在其假设丢包率 2% 均匀分布(而不是随机突发丢包)的场景有效。

若真要用通用方法提高吞吐,更好的做法是在 Cruise phase 只要不丢包就 additive increase upper bound,这最终就类似 BBR 旁路 cugas(cubic + vegas) 或 vebic(vegas + cubic) 了(or hybla?)。

如果想在模拟仿真环境(特别是 tc netem,mininet 这些玩意儿模拟一个固定的均匀丢包率)忽悠经理,让经理看到吞吐碾压原生算法的效果而获得加薪晋升机会,我的方法就非常有用。因为绝大多数干这行的,证明给经理看或者写论文的环境都是这类仿真环境,模拟均匀丢包,连 4-state 都不会(参见 揭露 BBR 的真相 最后部分)。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程 前言:一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…

蓝桥杯 15.小数第n位

小数第n位 原题目链接 题目描述 我们知道,整数做除法时,有时会得到有限小数,有时会得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0,它们就具有了统一的形式。 本题的任务是:在上述约定下&#xff0c…

【Docker】在Ubuntu平台上的安装部署

写在前面 docker作为一种部署项目的辅助工具,真是太好用了需要魔法,不然无法正常运行笔者环境:ubuntu22.04 具体步骤 更新系统包索引 sudo apt update安装必要依赖包 sudo apt install -y apt-transport-https ca-certificates curl softwa…

Spring Boot默认缓存管理

Spring框架支持透明地向应用程序添加缓存,以及对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法,从而减少操作数据的执行次数,同时不会对程序本身造成任何干扰。Spring Boot继承了Spring框架的缓存管理功能&#xff…

数模学习:一,层次分析法

基本定位: 适用于解决评价,选择类问题(数值不确定,需要自己结合资料数据等自己填写)。 引入: 若要解决选择类的问题,打分的方式最为常用——即采用权重表: 指标权重选择1选择2..…

模板偏特化 (Partial Specialization)

C 模板偏特化 (Partial Specialization) 模板偏特化允许为模板的部分参数或特定类型模式提供定制实现,是 静态多态(Static Polymorphism) 的核心机制之一。以下通过代码示例和底层原理,全面解析模板偏特化的实现规则、匹配优先级…

sql 根据时间范围获取每日,每月,年月的模版数据

1:获取每日模版数据(参数也支持跨年) SELECT a.selected_date cdate FROM(SELECT adddate(1970-01-01,t4.i * 10000 t3.i * 1000 t2.i * 100 t1.i * 10 t0.i) selected_dateFROM( SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELEC…

windows上的RagFlow+ollama知识库本地部署

一、 docker的安装与部署 1. 下载Docker Desktop 访问Docker官网并下载适用于Windows的Docker Desktop安装程序。 RagFlow对docker的要求: Docker ≥ 24.0.0 & Docker Compose ≥ v2.26. docker 下载地址: https://www.docker.com/ Get Docker | Docker Docs 如下图所…

多模态大语言模型arxiv论文略读(三十四)

SHIELD : An Evaluation Benchmark for Face Spoofing and Forgery Detection with Multimodal Large Language Models ➡️ 论文标题:SHIELD : An Evaluation Benchmark for Face Spoofing and Forgery Detection with Multimodal Large Language Models ➡️ 论文…

Unity InputSystem触摸屏问题

最近把Unity打包后的windows软件放到windows触摸屏一体机上测试,发现部分屏幕触摸点击不了按钮,测试了其他应用程序都正常。 这个一体机是这样的,一个电脑机箱,外接一个可以触摸的显示屏,然后UGUI的按钮就间歇性点不了…

AI打开潘多拉魔盒?当深度伪造成为虚假信息的核动力引擎

引言:虚假信息——数字时代的“隐形武器” 在人工智能(AI)与社交媒体深度融合的今天,虚假信息(Disinformation)已成为全球社会面临的最严峻挑战之一。 source: Gartner.(2024). 2025 Top Strategic Techno…

MySQL的图形管理工具-MySQL Workbench的下载安装及使用【保姆级】

MySQL的图形管理工具-MySQL Workbench的下载安装及使用 下载安装使用Workbench 创建数据库Workbench 创建数据表数据表中的增删改增加数据 删除数据修改数据 下载 MySQL的图形管理工具有很多,常用的有MySQL Workbench、phpMyAdmin和Navicat等软件。我选择了MySQL W…

Spring Security认证流程

认证是Spring Security的核心功能之一,Spring Security所提供的认证可以更好地保护系统的隐私数据与资源,只有当用户的身份合法后方可访问该系统的资源。Spring Security提供了默认的认证相关配置,开发者也可以根据自己实际的环境进行自定义身…

程序员鱼皮最新项目-----AI超级智能体教程(一)

文章目录 1.前言1.什么是AI大模型2.什么是多模态3.阿里云百炼平台介绍3.1文本调试展示3.2阿里云和dashscope的关系3.3平台智能体应用3.4工作流的创建3.5智能体编排应用 1.前言 最近鱼皮大佬出了一套关于这个AI 的教程,关注鱼皮大佬很久了,鱼皮大佬确实在…

《Pinia 从入门到精通》Vue 3 官方状态管理 -- 进阶使用篇

《Pinia 从入门到精通》Vue 3 官方状态管理 – 基础入门篇 《Pinia 从入门到精通》Vue 3 官方状态管理 – 进阶使用篇 《Pinia 从入门到精通》Vue 3 官方状态管理 – 插件扩展篇 目录 Store 的模块化设计4.1 多模块结构设计✅ 推荐目录结构(中大型项目) …

西甲001:奥萨苏纳VS塞维利亚

西甲001:奥萨苏纳VS塞维利亚 奥萨苏纳主场强势力擒塞维利亚 奥萨苏纳中场核心蒙卡约纳上轮联赛早段伤退,本轮将由巴勃罗-伊瓦涅斯顶替首发。当家射手布迪米尔状态爆棚,近两轮斩获3球,本赛季联赛已轰入18球创生涯新高,将…

C语言编程--15.四数之和

题目: 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复)&…

2025.04.23【探索工具】| STEMNET:高效数据排序与可视化的新利器

文章目录 1. STEMNET工具简介2. STEMNET的安装方法3. STEMNET常用命令 1. STEMNET工具简介 在生物信息学领域,分析和处理大规模数据集是研究者们面临的日常挑战。STEMNET工具应运而生,旨在提供一个强大的平台,用于探索和分析单细胞RNA测序&a…

Day-3 应急响应实战

应急响应实战一:Web入侵与数据泄露分析 1. Web入侵核心原理 ​​漏洞利用路径​​ 未授权访问:弱口令(如空密码/默认口令)、目录遍历漏洞代码注入攻击:JSP/ASP木马、PHP一句话木马(利用eval($_POST[cmd])&…

两段文本比对,高亮出差异部分

用法一:computed <div class"card" v-if"showFlag"><div class"info">*红色背景为已删除内容&#xff0c;绿色背景为新增内容</div><el-form-item label"与上季度比对&#xff1a;"><div class"comp…