inflight 守恒算法负反馈解析

news2024/12/28 18:31:01

终于说到这个话题了。

bbr 不好吗,我自己也做过很多关于 bbr 的仿真验证,现网数据分析以及数学建模,结论均指向 bbr 是一个公平高效且天然不会引发 bufferbloat 的算法,但细节值得商榷:

  • 非理想哑铃拓扑下测量误差的叠加效应:停车场拓扑中的 bbr;
  • 流数量增多时,同时 probe 流数增多且持续,小 buffer 占量的承诺不可扩展。

特别在汇聚或骨干网络,就算 phase 全部打散,至多有 6 个完全独立的 phase slot,而在叠加 phase,同时 probe 将导致 buffer 占量增加,这问题类似 vegas 分析中,如果每条流保持 α < diff < β,n 条流的 diff 下界就是 n * α,当 n 很大时,排队时间将不可避免增加。

算法的 buffer 占量可扩展的意思是,无论多少条流,占据 buffer 的量是一定的,因此在 inflight 守恒算法中,我需要 inflt_remain 是一个携带负反馈的向内收缩的量:

  • bw 越大,inflt_remain 越小,确保多流公平收敛而不是发散;
  • srtt 越大,inflt_remain 越小,确保 buffer 占量不因流而增加。

先解释第一点,如果 flow 1 的 bw1 大于 flow 2 的 bw2,且 flow 1 的 inflt_remain 大于 flow 2 的 inflt_remain,那么两条流将发散,最终 flow 1 将 flow 2 挤出,独占所有带宽资源,inflight 守恒算法算一个 additive increase additive decrease 算法,理论分析表明,只有 increase 线与公平线平行或趋向,才能确保公平收敛,这就要求一条流的 inflt_remain 与其 bandwidth 负相关,这就是第一个负反馈。

再看第二点,为了确保 buffer 占量不会因流的增加而增加,以 srtt 作为收缩依据是高尚的,因为 buffer 占量越大,srtt 越大,二者存在一个简单线性关系,这一点很容易被利用。

为构造这个 inflt_remain 的表达式,我从 inflight 的基础构成 bdp 开始。

设瓶颈带宽为 C,传播时延为 R,只有 1 条流时,inflight 为 C * R,若存在 n 条流,稳定状态下每条流的基础 inflt 为 k = (1 / n) * C * R = bw * R,为构造关于 bw 的负反馈,k 要么做多项式的一项被减去,要么做分母,而为了构造关于 srtt 的负反馈,注意到下面简单的事实:

∑ n 1 B W i ⋅ R = ∑ n 1 C ⋅ 1 n ⋅ R = n 2 C ⋅ R = n ⋅ 1 B W i ⋅ R \sum^n\dfrac{1}{BW_i\cdot R}=\sum^n\dfrac{1}{C\cdot \dfrac{1}{n}\cdot R}=\dfrac{n^2}{C\cdot R}=n\cdot\dfrac{1}{BW_i\cdot R} nBWiR1=nCn1R1=CRn2=nBWiR1

如果能消掉 n,就能构造 srtt 的负反馈了,这里利用 srtt - R 和 buffer 占量之间的线性关系:

T 单独一条流排队时间 T 所有 n 条流排队时间 = B 一条流 B n 条流 = 1 n \dfrac{T_{单独一条流排队时间}}{T_{所有n条流排队时间}}=\dfrac{B_{一条流}}{B_{n条流}}=\dfrac{1}{n} T所有n条流排队时间T单独一条流排队时间=Bn条流B一条流=n1

单独一条流的排队时间和所有共存流的排队时间可以用以下代码近似:

  if (rtt < RTPROP) rtt = RTPROP;
  f->srtt = 0.7 * f->srtt + 0.3 * rtt;
#define EPSILON 0.001
...
  if (fabs(rtt - f->min_rtt) < EPSILON || rtt < f->min_rtt) {
    f->min_rtt = rtt;
  } else {
    double d = rtt - f->min_rtt;
    if (fabs(d) > 100 * EPSILON && d < f->qmin)
      f->qmin = d;
    if (d > f->qmax)
      f->qmax = d;
  }

取 f->qmin / f->qmax 即可近似 1 / n,但既然都是近似,就没有必要精确,只要表达出负反馈的意思,然后调参数,获得一个最佳的解即可,因此我直接用 pow(f->min_rtt / f->srtt, γ) 来近似,剩下的调节 γ 参数。

于是就得到了 inflt_remain 的表达式:

I = α ⋅ ( R T T m i n R T T s m o o t h ) γ − β ⋅ B W i ⋅ R T T m i n I=\alpha\cdot (\dfrac{RTT_{min}}{RTT_{smooth}})^\gamma-\beta\cdot BW_i\cdot RTT_{min} I=α(RTTsmoothRTTmin)γβBWiRTTmin

代码表达如下:

double s = f->min_rtt / f->srtt;
double p = pow(s, 20);
f->I = 0.7 * f->I + 0.3 * (alpha * p - 0.01 * f->max_e.bw * f->min_rtt);

这个减法还有第三个负反馈作用:

  • 如果 srtt 过大,或者 bw 过大,f->I 更容易变为负数,从而 bdp 余量变成了 bdp 欠量,清除 queue。

实际效果如下:
在这里插入图片描述

理想效果如下:
在这里插入图片描述

相差不大。delivery rate 和 srtt 效果分别如下:
在这里插入图片描述
在这里插入图片描述
以上这个负反馈 inflt_remain 的问题在于需要仔细调整 α,β,γ 参数以避免 I 恒为负,为避免陷入数学,我倾向于设置比较大的 α 和比较小的 β,调整 γ。比如 α = 300 / 2000,β = 0.1 / 2000,分母分别展现相对大小,分子 2000 缩放总量到一个不大的范围。

除此之外,还有另一种负反馈 inflt_remain:

I = α ⋅ ( B W i β ⋅ R T T m i n + B W i ⋅ R T T m i n ) ⋅ ( R T T m i n R T T s m o o t h ) γ I=\alpha\cdot (\dfrac{BW_i}{\beta\cdot RTT_{min}+BW_i\cdot RTT_{min}})\cdot (\dfrac{RTT_{min}}{RTT_{smooth}})^\gamma I=α(βRTTmin+BWiRTTminBWi)(RTTsmoothRTTmin)γ

总结一下。

设某个时刻 t,flow 1 和 flow 2 的 bw 分别为 x,y,那么如果它们占据了 buffer(我是说 if,最理想情况下是不占任何 buffer,但这不可能),它们在 buffer 中的数据量之比为 p1 = xR : yR,在下一个 round trip 发送中,分别为它们加上一个余量 I,p2 = (x*R + I)R : (yR + I)*R,我们知道 p2 比 p1 更接近 1,以此类推,x,y 收敛到公平。

实际上如果把余量设置为常量 I = 2,系统依然可以收敛,但慢!

可见,除了保持 buffer 占量在多流场景下算法可扩展,我引入负反馈的另一个意义在于,让收敛更快,设 x > y,p1 = xR : yR,Ix < Iy,那么 p2 = (x*R + Ix)R : (yR + Iy)*R 将更快趋向 1。

评价一下。

我将 bbr 作为事件的 probebw 状态的 probe phase 均匀平摊在了所有时间,于是就取消了状态机(但 probertt 似乎还是需要),就可以用连续的微分方程组描述连续的行为,这意味着对网络状态的感受力更加灵敏了,反应也更及时。带宽利用率为 100 %,且始终保持很少且固定(取决于参数)的 buffer 占用,天然无拥塞。

此前那双鞋👟鞋底子掉了,扔掉了,鞋垫一个月前就折了扔了,今天穿着拖鞋跑步,还是很不错的,速度稳定,也不磨脚,也没滑跌。

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

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

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

相关文章

Dubbo3框架概述

1 什么是分布式系统? 《分布式系统原理与范型》定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed system)是建立在网络之上的软件系统。 简单来说:多个(不同职责)人共同来完成一件事! 任何一台服务器都无法…

Dockerfile+私有仓库

使用Dockerfile创建应用镜像 在Docker file中定义所需要执⾏的指令&#xff0c;使⽤ docker build创建镜 像&#xff0c;过程中会按照dockerfile所定义的内容进⾏打开临时性容器&#xff0c;把docker file中命令全部执⾏完成&#xff0c;就得到了⼀个容器应⽤镜像&#xff0c;每…

PHP-开发工具下载-配置-使用

.1.下载 使用各种人工智能工具推荐的php免费开发工具。 文心一言推荐的工具 讯飞星火的回答 kimi的回答 根据自己的了解&#xff0c;最终选择vscode这款开发工具。 .2.配置 文心一言的回答 讯飞星火的回答 kimi的回答 最终选择使用PHP Debug 插件来支持。 安装中文插件。 …

NASA数据集:MetOp-A ASCAT 第 2 级海洋表面风矢量,针对沿岸海洋进行了优化

MetOp-A ASCAT Level 2 Ocean Surface Wind Vectors Optimized for Coastal Ocean 简介 该数据集包含 MetOp-A 上的高级散射计&#xff08;ASCAT&#xff09;以 12.5 公里采样分辨率&#xff08;注&#xff1a;有效分辨率为 25 公里&#xff09;进行的近实时 2 级沿岸海面风矢…

实战OpenCV之图像的数学运算

基础入门 在OpenCV中&#xff0c;图像的数学运算是一种基本而强大的工具&#xff0c;可以用于多种图像处理任务&#xff0c;包括&#xff1a;图像增强、图像融合、特征提取等。这些运算包括加法、减法、乘法和除法等基本的数学操作。 加法运算&#xff1a;可以用来合并两个图像…

【JS】卢小姐排队问题(100) |思路参考+代码解析(C++)

题目 LYA 的班级要进行一次班级活动&#xff0c;全班同学按照学号从小到大排成一列。但是卢小姐来晚了&#xff0c;没有来得及排队。现在卢小姐想知道&#xff0c;她应该插入到队列的哪个位置&#xff0c;才能保证队列仍然是按照学号从小到大排列的。请你帮助卢小姐找到她应该…

微服务框架之Kitex

Kitex: 高性能的 Golang 微服务框架 Kitex 是由字节跳动&#xff08;ByteDance&#xff09;开发并开源的一款高性能微服务框架&#xff0c;专为构建分布式系统和微服务架构设计。Kitex 基于 Golang&#xff0c;旨在提供一个简单、高效、灵活的开发体验&#xff0c;帮助开发者快…

ST表(区间查询

解决的问题&#xff1a; 数组区间查询最大值和最小值对于解决数组的树状数组的区间修改 ------- 线段树倍增思想 核心代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N1e5; int num[N]; int f[N][N]; int main(){int n;cin>>n;//输入默…

无线通信频率分配

首先看看无线电信号的频谱如何划分&#xff1a; 一、5G NR 3GPP已指定5G NR 支持的频段列表&#xff0c;5G NR频谱范围可达100GHz&#xff0c;指定了两大频率范围&#xff1a; ① Frequency range 1 &#xff08;FR1&#xff09;&#xff1a;就是我们通常讲的6GHz以下频段 频率…

Lesson07---STL简介(了解)

1. 什么是STL 2. STL的版本 3. STL的六大组件 4. STL的重要性 5. 如何学习STL 6.STL的缺陷 1. 什么是STL STL(standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与…

【网络】P2P打洞原理

本文首发于 ❄️慕雪的寒舍 1. 引入 如果你折腾过NAS或者BT下载等等玩意&#xff0c;可能听说过“P2P打洞”这一技术名词。简单来说&#xff0c;P2P打洞可以让我们直接在外网访问内网的设备&#xff0c;从而让没有公网IP的家庭设备也能获得“公网直连”的速度。 比如绿联、极…

【JAVA]DAY 2在网页中输出日期和时间,实时还是静止?

一、如何输出日期文本 使用document.write(Date()); 会在网页中输出当前的日期和时间。在 2024 年 8 月 28 日星期三执行这段代码&#xff0c;可能会输出类似 “Wed Aug 28 2024 [具体时间]” 这样的内容。 Date()是 JavaScript 中的一个内置对象&#xff0c;用于处理日期和…

【机器学习】数据预处理-特征工程与特征选择

目录 一、特征工程 二、数据变换 1.变换 2.归一化 三、数据清洗 1.异常数据 2.数据清洗 四、特征选择 1.Filter过滤法 2.Wrapper包裹法 ... 3.Embedded嵌入法 ... 五、降维算法 1.SVD 2.PCA 一、特征工程 特征工程就是从原始数据提取特征的过程&#xff0c;这些…

免费可商用插画素材网站

1、https://undraw.co/illustrations 2、https://iradesign.io/ 3、https://storyset.com/ 4、https://delesign.com/free-designs/graphics/

【Linux篇】三分钟速通Linux基础命令

目录 1. Linux的目录结构 1.1 Linux的目录结构 1.2 /在Linux系统中的表示 2. linux命令基础 2.1 什么是命令和命令行 2.2 Linux命令的通用格式 2.3 ls命令 2.3.1 ls命令的参数的作用&#xff1a; 2.3.2 ls命令的选项 2.3.3 命令的选项组合使用 2.4 cd切换工作目录 2…

宋志平《有效的经营者》首发 高质量经营与企业高质量发展读书分享会圆满举办

走遍人生繁华&#xff0c;醉美江南水乡。8月25日&#xff0c;“美好生活&#xff0c;书香中国”城市行第七站——杭州站&#xff0c;在杭州市兴耀科创城•杭州双碳技术产业园圆满举办。本次活动以高质量经营与企业高质量发展读书分享会为主题&#xff0c;旨在深入推进全民阅读&…

Java基础(泛型)

文章目录 前言 一、泛型类的定义 1.1 泛型类的定义语法 1.2 代码使用示例 二、泛型类的使用语法 2.1 使用语法 2.2 泛型类注意事项 2.3 泛型类的使用小案例 三、从泛型类派生子类&#xff08;2种情况&#xff09; 3.1 子类和父类的泛型类型要保持一致 3.2 子类没有使用…

苹果秋季发布会前瞻:iPhone 16领衔新品盛宴

苹果定档9月9日&#xff0c;揭开新品神秘面纱 苹果公司近日正式宣布&#xff0c;将于9月9日在加州库比蒂诺的Apple Park&#xff0c;史蒂夫乔布斯剧院举办年度秋季新品发布会&#xff0c;主题为“It’s Glowtime”&#xff0c;预示着Siri界面将迎来一场华丽变身。此次发布会较原…

AUTOSAR_EXP_ARAComAPI.pdf的第4章笔记

为了理解AUTOSAR_EXP_ARAComAPI.pdf的第4章内容&#xff0c;生搬硬套的翻译了一把&#xff0c;准备先囫囵吞枣&#xff0c;再仔细理解。因为这些内容的理解也不是一时半会儿的。所以先放上来。 1.AUTOSAR_EXP_ARAComAPI.pdf的介绍 通常&#xff0c;阅读正式的规范并不是学习和…

【扩散模型(六)】IP-Adapter 是如何训练的?2 源码篇(IP-Adapter Plus)

系列文章目录 【扩散模型&#xff08;二&#xff09;】IP-Adapter 从条件分支的视角&#xff0c;快速理解相关的可控生成研究【扩散模型&#xff08;三&#xff09;】IP-Adapter 源码详解1-训练输入 介绍了训练代码中的 image prompt 的输入部分&#xff0c;即 img projection…