bbr 收敛动力学背后的数学原理

news2024/11/22 20:58:03

我进一步把 bbr 模型简化为更一般的形式。设 x 为 bbr 流的 estimated bw,wₓ 为 bbr 流的 inflight,C 为瓶颈带宽,R 为传播时延,R_s 为总时延,pacing_rate 增益为 g:

I ( t ) = t o t a l _ i n f l i g h t _ a t _ t I(t)=total\_inflight\_at\_t I(t)=total_inflight_at_t

bw 方程: d x d t = C ⋅ g ⋅ x ⋅ R s I ( t ) − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x\cdot R_s}{I(t)}-x dtdx=CI(t)gxRsx

inflt 方程: d w x d t = x ⋅ R − w x \dfrac{dw_x}{dt}=x\cdot R-w_x dtdwx=xRwx

其中 bw 方程体现了 probebw 状态 gain = 1.25 阶段,inflt 方程体现了 probebw 状态 gain = 0.75(or 0.9) 阶段,若 2 流共存,其 bw 分别为 x,y,则可化简为:

d x d t = C ⋅ g ⋅ x g ⋅ x + y − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x}{g\cdot x+y}-x dtdx=Cgx+ygxx

d w x d t = x ⋅ R − w x \dfrac{dw_x}{dt}=x\cdot R-w_x dtdwx=xRwx

有趣的是,公平性恰恰由 probe 行为在 buffer 中促成,若把 g 调整为 1,初始值将永久持续不会发生任何变化:
在这里插入图片描述

probe 不仅用于获得空闲带宽资源,正是 g > 1 的 probe 行为促进了公平收敛。通过调整 g,g 越大,收敛越快:
在这里插入图片描述

接下来设 g = 2.25,收敛更快:
在这里插入图片描述

代价是 buffer 占率更高。可见,如何在 buffer 占率和收敛速度之间 tradeoff,是 bbr 调参的一大关键。

在 buffer 中持续腾挪数据包是公平性的保证,buffer 作为操作空间,若一点 buffer 都不用,则无法保证公平收敛。buffer 给了流量努力的空间和机会,努力才会公平,其中的不变量就是瓶颈带宽 C。
这背后的 why 在直观上非常显见,以 aimd 为例,若 buffer 无限大,随着 additive increase,buffer 占用越来越多,increase 幅度相同,意味着初始值的影响越来越小,buffer 占率趋向等分,带宽分配趋向公平,背后的理论是 ,W₁,W₂ 为两条流的厨师窗口,则随 x 的增加, W 1 + x W 2 + x \dfrac{W_1+x}{W_2+x} W2+xW1+x 趋向于 1。

对于 bbr,稍有不同但大差不差。

与 aimd 不同,bbr 的 primary controller 是 rate,而注意到总瓶颈带宽 C 是不变量,虽 buffer 可无限,但 maxbw 有限,正是注意到这个不变量资源限制,bbr 才被提出用来在解决 bufferbloat 前提下提高带宽利用率。

若不限制 bbr 的 buffer 占用,就像 aimd 只 ai 不 md 一样,其模型将变成:

$I(t)=total_inflight_at_t $

d x d t = C ⋅ g ⋅ x ⋅ R s ( t ) I ( t ) − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x\cdot R_s(t)}{I(t)}-x dtdx=CI(t)gxRs(t)x

d w x d t = x ⋅ R s − w x \dfrac{dw_x}{dt}=x\cdot R_s-w_x dtdwx=xRswx

R s ( t ) = I ( t ) C R_s(t)=\dfrac{I(t)}{C} Rs(t)=CI(t)

给出最初时间段的趋势图:
在这里插入图片描述

可以看出虽然 inflt 由于 g = 1.25 强度的 probe 在快速发散,但 bw 仍然趋向收敛,这就是 buffer 动力学,与 aimd 殊途同归,buffer 占用越多,初始值的影响越微弱。

个中原因,不难计算一个 “bw 加速度” r:

r = p r o b e 后的 b w p r o b e 前的 b w = C ⋅ g ⋅ x g ⋅ x + y C ⋅ x x + y = C ⋅ g g ⋅ x + C − x = C ⋅ g ( g − 1 ) ⋅ x + C r=\dfrac{probe 后的bw}{probe 前的bw}=\dfrac{C\cdot\dfrac{g\cdot x}{g\cdot x+y}}{C\cdot\dfrac{x}{x+y}}=C\cdot\dfrac{g}{g\cdot x+C-x}=\dfrac{C\cdot g}{(g-1)\cdot x+C} r=probe前的bwprobe后的bw=Cx+yxCgx+ygx=Cgx+Cxg=(g1)x+CCg

这是一个关于 x 的减函数,带宽越小,r 越大,意味着 bw 加速度越大,这正是公平收敛的内在机理。

只需最后一步,像为 additive increase 增加一个 multiplicative decrease 一样,为 bbr 的增加 drain 机制,无论 probebw 状态的 g = 0.75 drain 还是 probertt 状态的 inflt = 4 drain,或 startup 后的 drain 状态,都起到往回收 buffer 的作用,但 buffer 动力学的结果却保留了下来,公平收敛持续进行。

从拥塞控制算法整体视角看,效率不是偶然,而是设计的结果,但公平却始自海阔凭鱼跃,天高任鸟飞,这也是科斯定律的机理。

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

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

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

相关文章

火绒使用详解 为什么选择火绒?使用了自定义规则及其高级功能的火绒,为什么能吊打卡巴斯基,360,瑞星,惠普联想戴尔的电脑管家等?

目录 前言 必看 为什么选择火绒? 使用了自定义规则及其高级功能的火绒,为什么能吊打卡巴斯基,360,瑞星,惠普联想戴尔的电脑管家等? 原因如下: 火绒的主要优势 1. 轻量化设计 2. 强大的自…

CocosCreator 3.8 IOS 热更新失败问题解决方案

CocosCreator 3.8 IOS 热更新失败问题解决方案 问题描述 Creator 版本: 3.8.0目标平台: ios 模拟器/真机重现方式:安卓构建版本生成的热更新包,上传到OSS,使用ios进行更新。 19:18:36 [ERROR]: [ERROR] file /Applica…

自动化测试—等待方式详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在自动化测试中,等待是一个重要的技术,用于处理页面加载、元素定位、元素状态改变等延迟问题。 等待能够确保在条件满足后再进行后续操作…

Web前端:CSS篇(三)盒子模型,弹性盒子

CSS 盒子模型 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子,封装周围的HTML元素。 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。 盒子模型的作用…

8.18 day bug

bug1 搞懂了用法和特性,bug自然而然就没了 Git branch -a 列出所以分支 git branch: 输入该命令后,会列出当前仓库中所有的分支。当前所在的分支会以星号(*)标记出来 gitpod /workspace/project (reset-orphan-branch|CHERRY-PICKING) $ g…

C# SolidWorks 二次开发-103.模拟库拖拽

最近躺平状态,所有没有更新。 为了搜索量再高一点,我决定让排名上升一个名次,今天来写一篇关于如何假装自己有个库。 如上图,进行一个拖拽示例,从自己的窗体中将文件带入solidworks中打开 或者 装配动作。与手动从文…

Jenkins汉化配置详解

Window安装构建神器Jenkins Window安装构建神器Jenkins详细教程-CSDN博客DevOps,CI,CD,自动化简单介绍选择其他需要和Jenkins一起安装的服务,点击Next。https://blog.csdn.net/qq_37237487/article/details/141299623 登录进入J…

从新手到专家必读书籍:官方推荐.NET技术体系架构指南

前言 Microsoft 官方推荐了一系列有关 .NET 体系结构的指南,旨在帮助开发人员掌握最新的技术和最佳实践。这些资源覆盖了从微服务架构到云原生应用开发等多个主题,是开发高质量 .NET 应用程序不可或缺的参考资料。 通过这些指南,可以深入了…

图纸操作权限守护者:彩虹图纸管理系统的权限功能详解

在产品研发设计过程中,图纸作为核心机密资料,其安全性与保密性至关重要。一旦图纸发生泄密或丢失,将给企业带来不可估量的损失。因此,图纸管理系统的权限功能成为保障数据安全的重要防线。彩虹图纸管理系统凭借其强大的权限管理功…

不同主机之间的网络通信学习

IPC 进程间通信方式 共享内存 //最高效的进程间通信方式 共享内存: 1.是一块,内核预留的空间 2.最高效的通信方式 //避免了用户空间 到 内核空间的数据拷贝 IPC通信方式 ---操作流程类似的 操作: system v : …

全面解析去中心化应用,深入了解 DApps 构建与发展,掌握区块链核心知识!

来源:https://cointelegraph.com/learn/what-are-dapps-everything-there-is-to-know-about-decentralized-applications 编译:TinTinLand 社区 关键要点 ➤ 去中心化应用程序(DApps)类似于人们每天使用的应用程序,但…

ArcGIS Pro基础:设置2个窗口同步联动界面

如上所示,通过1步骤,新建了2个地图窗口,得到2和3所表示的【地图1】、【地图2】,一个是影像图,另一个是地形图, 假如有个需求,是将2个窗口联动起来:在观察影像的同时,也同…

dockdaemon远程管理

1.启动和查看服务 2.查看版本 管理步骤 1.关闭docker守护进程 2.修改dock daemon的进程⽂件 发现docker 虽然关闭了,依然有sock⽂件 创建时间也⾮常早 进⼊配置⽂件 删除相关sock的⽂件 再次启动,发现有提示 3.加载配置⽂件、 4.重新开启docker守护进程、…

计算机毕业设计选题推荐-付费自习室管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【论文分享】Heterogeneous Isolated Execution for Commodity GPUs 2019‘ASPLOS

Heterogeneous Isolated Execution for Commodity GPUs 2019’ASPLOS 目录 AbstractIntroductionContributions BackgroundIntel Software Guard Extensions (SGX)PCI Express Architecture Threat ModelAttacker Model and AssumptionsOut of Scope HIX ArchitectureArchite…

初识C++以及安装C++学习工具

C的发展史 C是由Bjarne Stroustrup在20世纪80年代初期于贝尔实验室开发的一种编程语言。它的设计初衷是作为C语言的一个超集,通过添加面向对象编程的特性来增强C语言。C支持多种编程范式,包括过程化编程、面向对象编程和泛型编程。 C的历史可以追溯到1…

鹏哥C语言自定义笔记重点(29-)

29.函数指针数组 30.void指针是不能直接解引用,也不能-整数。 void*是无具体类型的指针,可以接受任何类型的地址。 31.qsort:使用快速排序的思想实现一个排序函数(升序) 32. 33.地址的字节是4/8 34.char arr[]{a,b} sizeof(arr[0]1)答案是4&#xff0…

万象公文常见问题的处理方法

在万象公文试用阶段,我们收集并汇总了用户反馈的一系列问题。现在我们针对这些问题进行一一解答,希望可以帮助大家提升万象公文的使用体验。 1、信创版插件在WPS中不显示或显示不全 安装前,如果WPS未彻底关闭,插件不会触发加载&a…

在家办公如何远程公司电脑

随着远程办公和居家办公的普及,如何高效、安全地远程控制办公室电脑成为许多职场人士的需求。Splashtop作为一款专业的远程控制软件,提供了强大的功能,使用户能够随时随地访问和操作办公室的电脑,实现高效的远程办公体验。 Splas…

【python】灰色预测 GM(1,1) 模型

文章目录 前言python代码 前言 用 python 复刻上一篇博客的 Matlab 代码。 【学习笔记】灰色预测 GM(1,1) 模型 —— Matlab python代码 # %% import numpy as np import statsmodels.api as sm import matplotlib.pyplot as plt from matplotlib.pylab import mplmpl.rcPa…