更合理的 BBR

news2024/9/29 13:21:41

BBR 倾向于排空队列,甚至用特殊的 ProbeRTT 状态来排空自己产生的队列以测量 RTT,但这并不现实。一言以蔽之,BBR 无法实时跟踪现状,只靠拢理想。

若因背景流量造成 buffer 抖动,BBR 完全无法应对,其运行状态甚至非常糟糕。本文提一个自己的想法。用一个值而不是两个值逼近最优的收益成本比,而不是逼近 bltBW 和 RTprop。

BBR 给出了最佳效能操作点,在上周的文章中我导出了 E/inflt 曲线:
在这里插入图片描述
深入 E/inflt 曲线,我发现它比 maxB 和 minD 的乘积 BDP 更适合作不动点,理由如下:

  • 队列虽并非自己所为,但始终存在。需求是收敛到 “最大的吞吐” 和 “最小的延时”,而不是排空排队。
  • 端到端难控制全链路的 pacing rate,用 inflight 作控制更合适,pacing rate 只需大致吻合或取定值。

统计复用系统中,统计度量比精确控制更具实际意义,我经常质疑 BBR 参数取值的精确数学推导,相反,我赞成取经验值更合适。

端到端拥塞控制像足球一样不确定,没有谁且没有什么技术能保证一场比赛可以百分百进几个球,不确定性是足球观赏性之根,但即使这样还是有公认的强队,赢的就是统计概率。

我有一个新方法应对实际而非理想场景,其它流量排队的场景,BBR 依然可收敛到最佳操作点,正所谓要顺势而为。

考虑以下左图多流场景下的 E/inflt 拉弗曲线,增加流数量维度,得到以下右图:
在这里插入图片描述
我用右下的两个小图解释了右上那个 “山脊” 的形状,山脊 “高度” 落差拟合双曲线,其投影在 “水平” 方向也拟合双曲线。

双曲线很容易理解,E = B/D,若 2 流共享带宽,全局最佳效能依然是不排队,E = 1/2B/D + 1/2B/D,若 3 流,每条流的 B 则为 1/3,以此类推,1/4,1/5,即 y = 1/N,为双曲线,同理,每条流达到最佳 E 的 inflt 亦为 1/N 的关系,为双曲线。

自然界很少见这形态的物件儿,我用拟合了一个曲面,随便看看:

z = − y ( x − 1 y ) 2 + 1 y z=−y(x−\dfrac{1}{y})2+\dfrac{1}{y} z=y(xy1)2+y1

在这里插入图片描述
换个角度:
在这里插入图片描述

BBR 的整个运行过程应是 “通过调整 x, 在 ‘等 y 线’ 上不断爬到山脊“:
在这里插入图片描述
于是,YaBBR 算法即:

  • 第 1 步,增加 cwnd,测量 E = B/D,直到由增到减的转变,找到 “顶点”。
  • E = B/D 减小,减小 cwnd,测量 E = B/D 直到开始增加,重复 1。
  • E = B/D 增大,重复 1。

至于公平性,与标准 BBR 无异,可通过类似 ProbeRTT 的主动排空过程收敛到公平,也可以 ProbeBW 中挤占吞吐与加速比的负相关关系收敛到公平。二者效果一致,一个排空,一个探测,方向不同而已。

BBR 直到 v2 仍是基于理想模型修补,很难适应现实场景。几乎不可能不产生队列,一旦产生队列,Startup 退出条件基本就是奢望,只要 buffer 不满,吞吐总是能挤兑出来,这非常不利于公平性,而一旦 buffer 溢出,一切又为时已晚。BBR 的最大带宽假设本就不成立,最小 RTT 也几乎很难算数。况且 10secs 的最小 RTT 保质期完全不能保证。总之,BBR 假设一个理想环境,且独享带宽,方可实现,其它的都是后来加进去的。因此,需要一个新的思路,寻找一个新的不动点作为 BBR 的操作点。本文简单描述一个思路,称为 YaBBR

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

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

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

相关文章

手撕B树 | 二三查找树,B+树B*树你都会了吗? | 超详细的数据结构保姆级别实现

说在前面 今天给大家带来B树系列数据结构的讲解! 博主为了这篇博客,做了很多准备,试了很多画图软件,就是为了让大家看得明白!希望大家不要吝啬一键三连啊!! 前言 那么这里博主先安利一下一些…

C语言百日刷题第十六天

前言 今天是刷题第16天,放弃不难,但坚持一定很酷~ 五套C语言验报告题 C语言百日刷题第十六天前言试验报告(一)试验报告(二)分析功能编写程序试验报告(三)分析功能编写程序试验报…

自定义图表--随意拖拽拉伸功能的实现

随意拖拽、拉伸元素的功能是现在大热的自定义图表的重要组成功能,本文以最简单的视角搞懂随意拖拽、拉伸元素功能,完成这个功能需要先了解原生 drag && vue-ruler-tool && @smallwei/avue demo在线体验地址:zhao-wenchao110.gitee.io/customdrag 一、了解H…

高并发内存池

"花,就在火海里摇曳开着。" 一、技术介绍 (1)什么是池化技术? 池 是在计算机技术中经常使用的一种设计模式,其内涵在于:将程序中需要经常使用的核心资源先申请出来,放到一个池内,由程序自己管理。这样可以提高资源的使…

【单调栈】接雨水

文章目录双指针动态规划单调栈双指针 每一列雨水的高度&#xff0c;取决于该列 min(左侧最高的柱子高度&#xff0c;右侧最高的柱子高度) - 当前柱子高度 class Solution { public:int trap(vector<int>& height) {int n height.size();int ans 0;for(int i 1; …

ZY_BMP280大气压模块的使用和程序

在搞设计时&#xff0c;用到了大气压模块BMP280&#xff0c;这玩意也不难&#xff0c;主要是淘宝店老板特别der一问三不知&#xff0c;真服了&#xff0c;而且资料里面没有给例程&#xff0c;只有51的例程&#xff0c;利用IIC通信&#xff0c;而且给的例程里面&#xff0c;乱七…

数据库实验五:数据库设计实验

实验五 数据库设计实验 1.实验目的 ​ 掌握数据库设计基本方法及数据库设计工具。 2.实验内容和要求 ​ 掌握数据库设计基本步骤&#xff0c;包括数据库概念结构设计、逻辑结构设计&#xff0c;物理结构设计&#xff0c;数据库模式SQL语句生成。能够使用数据库设计工具进行…

ctf笔记:编码

常见编码 博客链接&#xff1a;https://www.blog.23day.site/articles/76 计算机中的数据都是按字节存储。一个字节(Byte)由8个二进制位组成(bit)。&#xff08;组成范围是0~255(28))一个字节一共可以用来表示256种不同的状态&#xff0c;每一个状态对应一个符号&#xff0c;就…

推荐系统学习笔记-隐语义模型

由来 该算法最早在文本挖掘领域被提出&#xff0c;用于找到文本的隐含语义。 核心思想是通过隐含特征(latent factor) 联系用户兴趣和物品。 参数 f&#xff1a;隐向量维度&#xff0c;决定隐向量表达能力强弱 n&#xff1a;用户数 m&#xff1a;物品数 求解方法&#xff1a;…

ADI Blackfin DSP处理器-BF533的开发详解57:DSP控制ADV7180采集图像到LCD显示(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了采集一帧 720625 尺寸的 P 制 CVBS 信号源&#xff0c;以 YUYV422 的数据格式保存&#xff0c;通过 MDMA 将奇偶场数据交…

【轻松掌握C语言】文件操作

目录 一、为什么使用文件&#xff1f; 二、什么是文件&#xff1f; 1、程序文件 2、数据文件 3、文件名 三、文件操作 1、文件指针 2、文件打开与关闭 . 3、文件的顺序读写 4、文件的随机读写 5、文本文件和二进制文件 6、文件读取结束判定 四、文件缓冲区 一、…

C++ Reference: Standard C++ Library reference: Containers: map: map: rbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/rbegin/ 公有成员函数 <map> std::map::rbegin C98 reverse_iterator rbegin(); const_reverse_iterator rbegin() const; C11 reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin(…

这个大力神杯,梅西已足足等了16年,AI预测:阿根廷冠军

潘帕斯雄鹰和高卢雄鸡的决战&#xff0c;在三十多小时后即将上演。AI预测&#xff1a;胜率接近&#xff0c;阿根廷略高。 12月18日&#xff0c;卡塔尔世界杯总决赛将正式开战。 由卫冕军法国对上寻求队史第三冠的阿根廷&#xff0c;同时也是两位顶尖球星兼巴黎圣日耳曼队友梅…

LeetCode | 二叉树高频面试算法题汇总【速来】

小伙子&#xff0c;来给我✍棵树【LeetCode】144.二叉树的前序遍历C版本C语言版本&#xff08;递归算法展开图&#xff09;【LeetCode】94.二叉树的中序遍历C版本C语言版本【LeetCode】145.二叉树的后序遍历C版本C语言版本【LeetCode】102.二叉树的层序遍历DSF——深度优先搜索…

Linux 之centos7:一、Linux安装

Linux 之centos7 1.Linux简介 ​ Linux内核最初只是由芬兰人李纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 ​ Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多…

C#,基于视频的目标识别算法(Moving Object Detection)的原理、挑战及其应用

本文概述了基于监控视频之连续帧信息的各种目标识别算法及其存在的问题与挑战&#xff0c;结合实际应用开发的工作&#xff0c;文中给出了实验性基于帧差算法和改进型背景算法的非人工智能目标识别算法的实际效果。 目标识别算法一直并将持续成为人工智能研究与应用的重点&…

交换机设备上的G口、F口、E口、S口区别是什么?一台交换机有哪些接口呢?每个接口都有哪些作用?

交换机设备上的G口、F口、E口、S口区别是什么? 一台交换机有哪些接口呢?每个接口都有哪些作用? 交换机的主要功能包括:学习功能、转发过滤和消除回路。 学习功能:以太网交换机知道连接到每个端口的设备的MAC地址,将该地址与相应的端口进行映射,并存储在交换机缓存的MA…

jsp+ssm计算机毕业设计大学生互助系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

点云 3D 目标检测 - VoxelNet(CVPR 2018)

点云 3D 目标检测 - VoxelNet&#xff08;CVPR 2018&#xff09;摘要1. 引言1.1 相关工作1.2 贡献2. VoxelNet2.1 VoxelNet架构2.1.1 特征学习网络2.1.2 卷积中层2.1.3 区域提案网络2.2 损失函数2.3 高效实施3. 训练详情3.1 网络详细信息3.2 数据增强4. 实验4.1 KITTI验证集评估…

【算法】动态规划 ⑧ ( 动态规划特点 )

文章目录一、动态规划特点1、求解类型2、方向性3、动态规划状态选择4、动态规划方程设计一、动态规划特点 1、求解类型 求解类型 : 动态规划 必须是求 最值 , 可行性 , 方案数 , 三者之一 , 如果求其它内容 , 则不能使用动态规划算法 ; 求最值 : 最大值 , 最小值 等 ; 大规模问…