从微分方程组构建 bbr 模型

描述分析 bbr 的文字自 2016 年底起至今从空白到泛滥,我自己在期间贡献了不少,本文又是一篇,但不同的是,本文尝试用闭环的数学模型给出一个 bbr 的全貌,顺便和 aimd 做对比。

先看带宽特性 bw(t),设瓶颈带宽为 C,传播时延为 R,2 条流共享瓶颈,则流 1,流 2 的 bw 记为 x,y,它们的演化过程由于下列方程组描述:

d x d t = C ⋅ g ⋅ x ⋅ R g ⋅ x ⋅ R + y ⋅ R − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x\cdot R}{g\cdot x\cdot R+y\cdot R}-x dtdx=CgxR+yRgxRx
y d t = C ⋅ g ⋅ y ⋅ R g ⋅ y ⋅ R + x ⋅ R − y \dfrac{y}{dt}=C\cdot \dfrac{g\cdot y\cdot R}{g\cdot y\cdot R+x\cdot R}-y dty=CgyR+xRgyRy

分析其稳定性,令 f ( x ) d t = 0 \dfrac{f(x)}{dt}=0 dtf(x)=0 f ( y ) d t = 0 \dfrac{f(y)}{dt}=0 dtf(y)=0,可得稳定点在两条直线的交点:

y = − g ⋅ x + C ⋅ g y=-g\cdot x+C\cdot g y=gx+Cg
x = − g ⋅ y + C ⋅ g x=-g\cdot y+C\cdot g x=gy+Cg

由此可分析其稳定点的性质:
在这里插入图片描述

可见稳定收敛,由于相空间方程组对称,则收敛到公平。同理,3 条流的情况下,微分方程组如下:

d x d t = C ⋅ g ⋅ x ⋅ R g ⋅ x ⋅ R + y ⋅ R + z ⋅ R − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x\cdot R}{g\cdot x\cdot R+y\cdot R+z\cdot R}-x dtdx=CgxR+yR+zRgxRx
y d t = C ⋅ g ⋅ y ⋅ R g ⋅ y ⋅ R + x ⋅ R + z ⋅ R − y \dfrac{y}{dt}=C\cdot \dfrac{g\cdot y\cdot R}{g\cdot y\cdot R+x\cdot R+z\cdot R}-y dty=CgyR+xR+zRgyRy
z d t = C ⋅ g ⋅ z ⋅ R g ⋅ z ⋅ R + x ⋅ R + y ⋅ R − z \dfrac{z}{dt}=C\cdot \dfrac{g\cdot z\cdot R}{g\cdot z\cdot R+x\cdot R+y\cdot R}-z dtz=CgzR+xR+yRgzRz

n 条流的情况不再赘述。

看一下数值解的图像:
在这里插入图片描述

pacing gain 参数调整会影响 bbr 的动力学,这是在图像上可见的变化:
在这里插入图片描述

再看第二部分,in-flight 随时间 t 的演化特征 inflight(t)。设瓶颈带宽为 C,传播时延为 R,2 条流共享瓶颈,则流 1,流 2 的 inflight 记为 x,y,它们的演化过程由于下列方程组描述:

d x d t = C ⋅ g ⋅ x g ⋅ x + y ⋅ R − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x}{g\cdot x+y}\cdot R-x dtdx=Cgx+ygxRx
d y d t = C ⋅ g ⋅ y g ⋅ y + x ⋅ R − x \dfrac{dy}{dt}=C\cdot \dfrac{g\cdot y}{g\cdot y+x}\cdot R-x dtdy=Cgy+xgyRx

相图分析与 bw(t) 同理,从略。3 流,n 流扩展与 bw(t) 同理,从略,直接看数值解图像:
在这里插入图片描述

可见 inflight noqueuing 且公平收敛。noqueuing 意思是它们纵坐标大致相等,inflight 之和大致等于 C*R。和 bw(t) 公平收敛一同,修饰词 “大致“ 相等而不是绝对相等皆因最后那次的 probe。

众流最终在不停 probe 中在公平点附近震荡,震荡幅度和收敛速度由 gain 决定,gain 越大,收敛越快,但震荡越大,反之 gain 越小,收敛越慢,但震荡幅度也小,这就是调参要诀。

我此前对 bbr inflight 收敛的几何理解有一些错误,通过微分方程组建模则一目了然予以纠正,这是常规的主流论证逻辑。

关于 bbr probertt,值得说明的是理论上 bbr 并不需要这个状态,因为 probebw 的 probe/drain 周期足以保证 noqueuing,但值得注意的是,bbr 采用 10-round max-filter win 作为 probe 基准,因此必须保证在一个 max-filter win 中至少有一次 probe,而这个 max-filter bw 与真实的 bw 之间的差异便是 buffer 稍微堆积的根源,一切环环相扣,若有偏差则可能使系统偏离稳定点。

bbr 顾名思义需要测量两个不可能同时测得的量,若测 maxbw 需要 probe,若测 minrtt 需要 drain,在这个测量意义上,probertt 又是必须的。测 maxbw 需向右,测 minrtt 则要向左:

To learn the true RTProp, a flow moves to the left of BDP using ProbeRTT state: when the RTProp estimate has not been updated (i.e., by measuring a lower RTT) for many seconds, BBR enters ProbeRTT…

基于此,bbr 的动作可能就不再显得细碎了,和 aimd 也没什么不同。

为显示差异和不同,我给出 aimd 的 bw 以及 inflight 的微分方程组,先看 bw:

d x d t = C ⋅ ( x + 1 ) ⋅ R ( x + 1 ) ⋅ R + y ⋅ R − x \dfrac{dx}{dt}=C\cdot\dfrac{(x+1)\cdot R}{(x+1)\cdot R+y\cdot R}-x dtdx=C(x+1)R+yR(x+1)Rx
d y d t = C ⋅ ( y + 1 ) ⋅ R ( y + 1 ) ⋅ R + x ⋅ R − y \dfrac{dy}{dt}=C\cdot\dfrac{(y+1)\cdot R}{(y+1)\cdot R+x\cdot R}-y dtdy=C(y+1)R+xR(y+1)Ry

而 inflight 对应的微分方程组为:

d x d t = x + 1 − x = 1 \dfrac{dx}{dt}=x+1-x=1 dtdx=x+1x=1
d y d t = y + 1 − y = 1 \dfrac{dy}{dt}=y+1-y=1 dtdy=y+1y=1

不再分析相图了,直接看数值解图像:
在这里插入图片描述

和 bbr 不同,aimd 的 inflight 收敛靠的是 buffer 溢出 or aqm 丢包这种外在事件,这导致 aimd 系统对这种外部事件响应处的不连续性,相当于把一个连续函数突然截断,断处无可观测的变化率可言,从而无法直观体现在微分方程组中。

以上,这就是 bbr 的全部。

最后给出求数值解的代码,以 bbr inflight 微分方程组为例:

import numpy as np
import matplotlib.pyplot as pltx0, y0, z0 = 0.1, 5, 2
T, dt = 200, 0.1
C, R = 10, 2
a = 1.25
times = np.arange(0, T + dt, dt)plt.figure(figsize = (20, 10))x = np.zeros_like(times)
y = np.zeros_like(times)
z = np.zeros_like(times)x[0], y[0], z[0] = x0, y0, z0
for n in range(1, len(times)):x[n] = x[n-1] + dt * (C*R*a*x[n-1]/(a*x[n-1] + y[n-1] + z[n-1]) - x[n-1])y[n] = y[n-1] + dt * (C*R*a*y[n-1]/(a*y[n-1] + x[n-1] + z[n-1]) - y[n-1])z[n] = z[n-1] + dt * (C*R*a*z[n-1]/(a*z[n-1] + y[n-1] + x[n-1]) - z[n-1])plt.plot(times, x, label = 'x(t)')
plt.plot(times, y, label = 'y(t)', linestyle = 'dashed')    
plt.plot(times, z, label = 'z(t)', linestyle = 'dotted')    plt.title(f'g = 1.25, C=10, R=2')
plt.xlabel('time (t)')
plt.ylabel('inflight')
plt.grid(True)plt.show()

昨天顶着高温跑步,途中想到用微分方程组建模分析一下 bbr 的行为。

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

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

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

相关文章

Java中的消息中间件选择与比较

Java中的消息中间件选择与比较 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在分布式系统中,消息中间件是一种关键组件,它能帮助不同…

等保2.0丨5分钟速览:小白都能理解的等保2.0简介

等保2.0的概念 等保2.0全称网络安全等级保护2.0制度,是我国网络安全领域的基本国策、基本制度。以1.0的规范为基础,等级保护标准以积极的防御为重点,由被动的防御发展为安全可信、动态感知和全过程的事前、事中和事后的全过程的全方位的审核…

函数式接口、匿名内部类、lambda表达式

一、函数式接口 只有一个抽象方法的接口叫函数式接口,不能有两个,也不能有方法实现。 FunctionalInterface注解标记,在idea中可以用这个注解验证是不是函数式接口。实现函数式接口可以转成lambda表达式。 二、匿名内部类 匿名内部类的格式&a…

Vue实战【基于wangEditor富文本编辑器+拖拽实现一个自定义打印模版】

目录 🌟前言🌟需求🌟效果预览🌟安装wangEditor富文本编辑器🌟拖拽API🌟wangEditor富文本编辑器所用到的API🌟写在最后🌟JSON包里写函数,关注博主不迷路 🌟前言…

7.11 cf div3 C

Problem - C - Codeforces 操作 根据给定的索引数组ind和字符串c,按照一定的顺序修改字符串s中对应位置的字符。具体来说,第i次操作会修改s中索引为indi的位置的字符,将其设置为ci。 将c字符串按照从小到大排序,替换ind数组所表…

可观察性优势:掌握当代编程技术

反馈循环是我们开发人员工作的关键。它们为我们提供信息,并让我们从用户过去和现在的行为中学习。这意味着我们可以根据过去的反应进行主动开发。 TestComplete 是一款自动化UI测试工具,这款工具目前在全球范围内被广泛应用于进行桌面、移动和Web应用的…

vue项目实现路由按需加载(路由懒加载)的三种方式

使用异步组件 在使用vue-router配置路由时,可以使用异步组件来实现路由的按需加载。异步组件会在路由被访问时才进行加载,从而实现按需加载的效果。需要注意的是,使用异步组件需要借助webpack的动态import语法来实现。例如: cons…

【DRAM存储器三十三】LPDDR4介绍--寻址、pin定义、命令真值表

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《镁光LPDDR4数据手册》 、《JESD209-4B》 目录 LPDDR4的寻址 LPDDR4的pin脚定义 命令真值表 LPDDR4的寻址

【深度学习入门篇 ②】Pytorch完成线性回归!

🍊嗨,大家好,我是小森( ﹡ˆoˆ﹡ )! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 易编橙:一个帮助编程小…

邦芒攻略:8条建议让你在大学毕业五年内蜕变

大学毕业后很多人都有了翻天覆地的变化,有些人有了自己的事业,进了国企,考上了公务员。有的人呢,自己创业成了一个小老板。 有的人还在苦苦地读研,为了自己的理想而奋斗。但是,总有一些人会停滞不前&#x…

第三方支付平台如何完美契合游戏行业?

在数字经济的浪潮中,游戏行业以其独特的魅力和创新能力,成为全球文化和经济交流的重要桥梁。然而,海外游戏商在进军中国市场时,常面临一系列难题。本文将通过一个故事案例,揭示第三方支付平台PASSTO PAY如何帮助海外游…

vue3中antd上传图片组件及回显

实现效果&#xff1a; 调用后端接口后&#xff0c;后端返回的数据&#xff1a; 1.在项目components/base下新建UploadNew.vue文件&#xff08;上传图片公共组件&#xff09; <template><div class"clearfix"><a-uploadv-model:file-list"fileL…

发挥储能系统领域优势,海博思创坚定不移推动能源消费革命

随着新发展理念的深入贯彻&#xff0c;我国正全面落实“双碳”目标任务&#xff0c;通过积极转变能源消费方式&#xff0c;大幅提升能源利用效率&#xff0c;实现了以年均约3.3%的能源消费增长支撑了年均超过6%的国民经济增长。这一成就的背后&#xff0c;是我国能源结构的持续…

龙蜥Anolis OS基于开源项目制作openssh 9.8p1 rpm包 —— 筑梦之路

环境信息 制作过程和centos 7几乎没有区别&#xff0c;此处就不再赘述。 CentOS 7基于开源项目制作openssh9.8p1 rpm二进制包修复安全漏洞CVE-2024-6387 —— 筑梦之路_cve-2024-6387修复-CSDN博客 制作成果展示 tree RPMS/ RPMS/ └── x86_64├── openssh-9.8p1-1.an7.…

springboot3整合SpringSecurity实现登录校验与权限认证(万字超详细讲解)

目录 身份认证&#xff1a; 1、创建一个spring boot项目&#xff0c;并导入一些初始依赖&#xff1a; 2、由于我们加入了spring-boot-starter-security的依赖&#xff0c;所以security就会自动生效了。这时直接编写一个controller控制器&#xff0c;并编写一个接口进行测试&…

【面试题】防火墙的部署模式有哪些?

防火墙的部署模式多种多样&#xff0c;每种模式都有其特定的应用场景和优缺点。以下是防火墙的主要部署模式&#xff1a; 一、按工作模式分类 路由模式 定义&#xff1a;当防火墙位于内部网络和外部网络之间时&#xff0c;需要将防火墙与内部网络、外部网络以及DMZ&#xff0…

【Jenkins持续集成持续部署】

目录 docker下安装gitlab一、安装docker二、使用容器安装gitlab三、Jenkins安装 Maven安装3测试服务器安装docker安装jenkens安装mavenJenkins Git Maven自动化部署配置 docker下安装gitlab redhat&#xff1a;9 内存建议6个G&#xff1b; 系统内核至少在3.10以上uname -r命…

事半功倍大法!财务数据API让企业工作智能化

在快速变化的商业环境中&#xff0c;财务管理的自动化已成为企业提升效率、降低成本和增强决策质量的关键。财务API&#xff0c;作为现代企业架构中不可或缺的一部分&#xff0c;提供了一种强大的工具&#xff0c;使得企业能够无缝集成各种财务服务和应用&#xff0c;实现数据的…

数据分析理论

数据分析的概念 数据分析是指通过恰当的统计方法和分析手段&#xff0c;对数据进行收集汇总&#xff0c;并进行加工处理。对处理过后的有效数据进行分析&#xff0c;发现存在的问题&#xff0c;制定可行的方案、从而帮助人们采取更科学的行动 数据分析4个层次 著名咨询公司Gart…

HandlerThread的使用

private void initHandler() { HandlerThread thread new HandlerThread("MainCamHandler"); thread.start(); workHandler new Handler(thread.getLooper()); } 在Android开发中&#xff0c;HandlerThread是用来创建一个在独立线…