从微分方程组构建 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 plt

x0, 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 的行为。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣 hot100 -- 动态规划(下)

目录 💻最长递增子序列 AC 动态规划 AC 动态规划(贪心) 二分 🏠乘积最大子数组 AC 动规 AC 用 0 分割 🐬分割等和子集 AC 二维DP AC 一维DP ⚾最长有效括号 AC 栈 哨兵 💻最长递增子序列 300. 最长递增子序列…

数据结构JAVA

1.数据结构之栈和队列 栈结构 先进后出 队列结构 先进先出 队列 2.数据结构之数组和链表 数组结构 查询快、增删慢 队列结构 查询慢、增删快 链表的每一个元素我们叫结点 每一个结点都是独立的对象

一个spring boot项目的启动过程分析

1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…

怎么在matlab中输出显示泵的流量-扬程和管路损失与流量均在一个表格里?讨论一下?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

挂载磁盘目录(挂载一个u01的磁盘目录)

这里我们没有u01磁盘目录&#xff0c;需要重新挂载一个u01磁盘目录 查看当前文件系统使用情况 [rootlocalhost ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev tmpfs …

BigMarket-基础层持久化数据库

需求 工程对接数据库 图例 结构说明 app-主要用于启动&#xff0c;没有业务逻辑 domain-业务逻辑&#xff0c;如积分的兑换&#xff0c;抽奖&#xff0c; infrastructure-基础层&#xff0c;技术支持&#xff0c;数据服务数据持久化&#xff1a;MySQL&#xff0c;redis&am…

threeJS 模型过大加载速度慢优化体验

前言 模型一般都比普通的前端项目要大&#xff0c;普通的模型要在1MB&#xff0c;大一点的就上不封顶了。模型越大&#xff0c;电脑加载的时间就越长。为了避免用户判断为bug&#xff0c;或者随便点击导致产生其他bug。我们需要增加进度条来提示用户。 解决方案 增加加载动画…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构③ | 4.6

前言 第4章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术相关的内容&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 4.6 网络架构 4.6.1 基本原则 4.6.2 局域网架构 4.6.3 广域网架构 4.6.4 移动通信网架构 4.6.5 软件定义网络 4.6…

全网最全,保姆级Stable Diffusion系列入门使用教程(图生图、LoRA、提示词权重),建议收藏!

大家好&#xff0c;我是画画的小强 今天将给大家讲解 Stable Diffusion 入门使用教程的 图生图、LoRA和提示词权重的教程&#xff0c;如果你还没有使用或者安装SD&#xff0c;那么可以看看我的往期入门教程AI绘画『Stable Diffusion』面向小白的免费AI绘画工具&#xff1a;解压…

spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3.1 系统架构设…

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

当前&#xff0c;业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake&#xff0c;和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试&#xff0c;那么本篇文章我们将回归到大数据最基础的场景&#xff0c;对海量数据的批处理查询。本文…

微软子公司Xandr遭隐私诉讼,或面临巨额罚款

近日&#xff0c;欧洲隐私权倡导组织noyb对微软子公司Xandr提起了诉讼&#xff0c;指控其透明度不足&#xff0c;侵犯了欧盟公民的数据访问权。据指控&#xff0c;Xandr的行为涉嫌违反《通用数据保护条例》&#xff08;GFPR&#xff09;&#xff0c;因其处理信息并创建用于微目…

自动编码器(Autoencoders)

在“深度学习”系列中&#xff0c;我们不会看到如何使用深度学习来解决端到端的复杂问题&#xff0c;就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术&#xff0c;以及一些示例和应用程序。 1、引言 ① 什么是自动编码器&#xff08;AutoEncoder&#xff…

本地部署,Colorizer: 让黑白图像重现色彩的奇迹

目录 引言 什么是 Colorizer ​编辑​编辑 Colorizer 的特点 工作原理 应用场景 本地部署 本地运行 实验与结果 结语 Tip&#xff1a; 引言 自摄影术发明以来&#xff0c;黑白图像一直是记录历史和艺术创作的重要手段。然而&#xff0c;黑白图像虽然具备其独特的美…

Git常见命令和用法

Git 文件状态 Git 文件 2 种状态: 未跟踪:新文件&#xff0c;从未被 Git 管理过已跟踪:Git 已经知道和管理的文件 常用命令 命令作用注意git -v查看 git 版本git init初始化 git 仓库初始化之后有工作区、暂存区(本地库)、版本库git add 文件标识暂存某个文件文件标识以终…

ts实现将相同类型的数据通过排序放在一起

看下效果&#xff0c;可以将相同表名称的字段放在一起 排序适用于中英文、数字 // 排序 function sortByType(items: any) {// 先按照类型进行排序items.sort((a: any, b: any) > {if (a.label < b.label) return -1;if (a.label > b.label) return 1;return 0;});r…

基于Python/MATLAB长时间序列遥感数据处理及在全球变化、植被物候提取、植被变绿与生态系统固碳分析、生物量估算与趋势分析应用

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…

el-tree 获取当前勾选节点的选中状态以及选中值对象 触发check-change多次事件问题原因

1.需求 现在需要一个树状结构的资产树 但是现在需求是 获取当前选中的值的状态是选中还是取消选中 然后再用当前选中 or 取消选中的值 进行 选中 or 取消选中的操作 一开始使用的是 check-change 方法 接收参数如图 但是我勾选父节点 或者 子节点后 他会打印一堆数据 是因…

华为HCIP Datacom H12-821 卷36

1.单选题 在PIM- SM中&#xff0c;以下关于RP 的描述&#xff0c;错误的是哪一选项? A、在PIM-SM中&#xff0c;组播数据流量不一定必须经过RP的转发。 B、对于一个组播组来说&#xff0c;可以同时有多个RP地址&#xff0c;提升网络可靠性。 C、组播网络中&#xff0c;可以…

Hutool发送Http请求

提示&#xff1a;今天主要学习了使用Hutool的方式来发送Http请求 文章目录 目录 文章目录 一、导库 二、使用 三、调用 四、结果 一、导库 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26&…