从微分方程组构建 bbr 模型

news2024/9/19 10:52:38

描述分析 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 的行为。

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

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

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

相关文章

28V飞机库维修电源在飞机库中的作用

飞机库作为飞机停放和维护的重要场所,其设施的完善和电源系统的稳定运行是保证飞机正常运行的前提。随着我国航空事业的飞速发展,飞机维修行业面临着越来越大的挑战。在飞机维修过程中,电源系统作为关键组成部分,其稳定性和可靠性…

let/const/var的区别及理解

在JavaScript中,let、const 和 var 是用来声明变量的关键字,但它们之间在作用域、变量提升、重复声明等方面存在区别,详细情况如下: 1. let、const、var 的区别 (1) 块级作用域 let 和 const:具有块级作用域,由 {} 包…

系统服务综合项目

要求: 现有主机 node01 和 node02,完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 no…

前端JS特效第29波:jQuery鼠标经过星星显示特效

jQuery鼠标经过星星显示特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!doctype html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content&q…

TomCat服务器安装和配置教程

1.TomCat下载路径 TomCat官方网站&#xff1a;http://tomcat.apache.org 前往该网站下载安装tomcat&#xff0c;tar.gz文件是Linux操作系统的安装版本&#xff0c;zip文件是 windows操纵系统的压缩版本 打开后是如下网站&#xff0c;请下载匹配的操作系统的文件并且选择合适的…

Selenium原理深度解析

在自动化测试领域&#xff0c;Selenium无疑是最受欢迎和广泛使用的工具之一。它支持多种浏览器和操作系统&#xff0c;为开发人员和测试人员提供了强大的自动化测试解决方案。本文将深入探讨Selenium的工作原理&#xff0c;包括其架构、核心组件、执行流程以及它在自动化测试中…

IGBT功率半导体的主要用途及全球知名厂商

功率半导体作为现代电子电力系统的核心组件&#xff0c;其技术的不断发展和创新对于提高能源利用效率、推动新能源产业发展以及实现工业自动化和智能化具有重要意义。 IGBT功率模块市场预测 近年来&#xff0c;IGBT功率半导体的热度持续攀升。据QYResearch调研团队最新报告“全…

探索Facebook在人工智能领域的最新进展

在当今快速发展的科技领域中&#xff0c;人工智能&#xff08;AI&#xff09;作为一项关键技术&#xff0c;正在逐步改变着社交媒体的面貌。作为全球最大的社交平台之一&#xff0c;Facebook积极探索和应用人工智能&#xff0c;以提升用户体验、增强平台安全性并推动技术创新。…

SPE连接器技术革新汽车制造业

概述 新的SPE标准在汽车制造业中的应用正日益受到重视&#xff0c;它不仅推动了汽车通信技术的革新&#xff0c;还对汽车性能测试方法产生了深远影响。本文将详细探讨SPE标准在汽车制造业中的应用案例分析&#xff0c;以及它对供应链的挑战与机遇。 SPE标准在汽车制造业中的应…

pico+unity3d搭建环境

分别注册pico开发者平台和unity的账号密码 下载pico的sdk和unity开发软件 创建unity3d核心项目 在项目中找到窗口&#xff0c;包管理器&#xff0c;添加磁盘的包&#xff0c;选中sdk 安装后就可以使用pico的操作和演示&#xff1b; 剩下的看文档

GaussDB关键技术原理:高性能(四)

GaussDB关键技术原理&#xff1a;高性能&#xff08;三&#xff09;从查询重写RBO、物理优化CBO、分布式优化器、布式执行框架、轻量全局事务管理GTM-lite等五方面对高性能关键技术进行了解读&#xff0c;本篇将从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存…

透视数据治理:企业如何衡量数据治理的效果?

在企业运营中&#xff0c;各个业务部门的成功与否都是直观且易于量化的&#xff0c;像销售部门卖了多少产品又为企业带来多少盈利&#xff0c;这些都能用具体的数字来说话。但当谈到数据治理的成效时&#xff0c;许多企业与决策者却感到迷茫。 数据治理的重要性不言而喻&#…

画了一个简陋的曼德勃罗集

原文画了一个简陋的曼德勃罗集 - 知乎 (zhihu.com) 前两天看妈咪叔科普曼德勃罗集的视频&#xff1a; 【分形与混沌2】最有魅力的几何图形——曼德勃罗集与朱利亚集 天使与魔鬼共存_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com/video/av79113074​编辑 虽然看过…

springboot3 集成GraalVM

目录 安装GraalVM 配置环境变量 Pom.xml 配置 build包 测试 安装GraalVM Download GraalVM 版本和JDK需要自己选择 配置环境变量 Jave_home 和 path 设置setting.xml <profile><id>graalvm-ce-dev</id><repositories><repository><id&…

linux 0.11 中的重要的全局变量

通过对全局变量的了解&#xff0c;也有助于了解整个代码的逻辑。就跟学习类一样&#xff0c;了解类有哪些成员变量&#xff0c;也有助于了解类的成员函数的功能。 &#xff08;1&#xff09;内存初始化相关 static u_char mem_map [ PAGING_PAGES ] { 0 , } .本数组对 1M 以外…

C++模板总结

文章目录 写在前面1. 函数模板1.1 函数模板的概念1.2 函数模板的原理1.3 函数模板的实例化1.4 函数模板的实例化模板参数的匹配原则 2. 类模板3. 非类型模板参数4. 模板的特化4.1 概念4.2 函数模板特化4.3 类模板特化 5. 模板分离编译6. 总结 写在前面 进入C以后&#xff0c;C…

Unity自定义场景背景图片

Unity自定义场景背景图片 1.更改图片材质 2.新建空对象并进行组件的添加、图层的设置 3.隐藏图层 4.对原有摄像机进行设置 5.新建摄像机&#xff0c;并进行设置 6.对步骤2新建的空物体大小进行设置&#xff0c;直至铺满整个屏幕

自学鸿蒙HarmonyOS的ArkTS语言<六>警告弹窗AlertDialog和列表选择弹窗ActionSheet

一、警告弹窗 ... Button(点击我可以获取一个警告弹窗).onClick(() > {AlertDialog.show({title: 我是弹窗标题,subtitle: 我是副标题,message: 我是弹窗内容,autoCancel: true, // 点击遮罩层是否关闭alignment: DialogAlignment.Center, // 弹窗位置offset: { dx: 0, dy:…

sed -i会破坏软连接

一、【写在前面】 开门见山&#xff0c;通过 sed - i 修改软连接指向的文件会破坏软连接 最近在管理本人的ansible项目的时候&#xff0c;发现了这个问题 二、【问题说明】 这是一个原本的软连接&#xff0c;码有点多&#xff0c;但是可以看出来指向了一个ini文件 然后我们…