tcp inflight 守恒算法的自动收敛

inflight 守恒算法看起来只描述理想情况,现实很难满足,是这样吗?

从 reno 到 bbr,无论哪个算法都在描述理想情况,以 reno 和 bbr 两个极端为例,它们分别描述两种理想管道,reno 将 buffer 从恰好的 0 塞到满而保持对带宽 100% 利用,而 bbr 则通过寻求维持在 buffer 恰好为 0 的状态保持对带宽 100% 的利用,它们分别是范雅各布森管道和 bbr 管道。

它们从一开始的注意力就没有集中在多流共享 buffer 的拉扯场景,都试图在算法中附加公平,或者在算法外补充公平性,从范雅各布森管道的原始论文以及 bbr 原始论文中都找不到最初的公平性约束。而 inflight 守恒算法的公平性是内置的,如果不存在一条以上的流,算法甚至可以缩短到两行代码以内,因为 E = bw / srtt,当然 buffer 为 0,E 最大,这个单流效果和复杂到爆的 bbr 竟然一致。

一旦涉及多流,bbr 单流不排队约束就无能为力,而 reno 的公平性表现却好得多,但还是主动公平,这显然是拉扯的结果,我们需要一种自动的公平,in-flight 守恒算法显然就做得到。

多流情况下,从收敛图上看,本质上需要两种力量,一种力量将收敛点拉向 fair–line,一种力量将收敛点拉向原点。

先分别看下在 reno 和 bbr 中这两种力量是什么。

  • reno 拉向 fair-line 的力量:随时间流逝,两条流在 buffer 中的报文总量趋向接近,bw 按 buffer 占比分配;
  • reno 拉向原点的力量:流属 sender 检测到丢包后主动 multiplicative decrease;
  • bbr 拉向 fair-line 的力量:一方面 bw 小的流 probebw 加速比更大,另一方面 bw 大的流 probertt 减速比更大;
  • bbr 拉向原点的力量:probe 阶段后立即主动 drain 掉无效 inflight。

可见,都需要算法主动去做点什么才能产生这两种力量驱动算法收敛,既然主动去做就要有触发点作为依据,reno 依靠丢包事件,bbr 则依赖内置状态机,无论哪一种触发点都存在客观干扰,这些干扰作为信息不准的反作用力驱动收敛点偏离 fair-line 靠近原点的位置,效果即 reno 总在 fair-line 上做长程震荡(tcp 锯齿),bbr 则在 fair-line 一侧的小范围做无规则震荡。

inflight 守恒算法法则 2,进时适可而止,天然考虑他者,退时什么也不做,意味着一旦越过 fair-line,算法将失去动力进入滑翔状态,此时两条流均 “记住” 了自己的最佳 E,以此维持 inflight 守恒,并用余量中的负反馈抵消波动,余量作为阻尼器起作用。

以下图总结上面的话:
在这里插入图片描述

避开 bbr,说说 aimd-reno 和 inflight 守恒算法之比较。

如果用排队论经典的 queuing_delay-load 坐标曲线解释,aimd 顶着 buffer 彻底用,曲线下凸,而 inflight 守恒算法收着用,曲线上凸而向下闭合。

理论上 buff 无限假设,aimd 时延无限,现实中固定 buff,一直丢就要一直重传一直丢,只是用无穷大重传时延替代了无穷大排队时延,因此这种顶着用的策略必须执行 decrease,而 aimd 已经被控制论证明公平的。

而 inflight 守恒算法则假定固定大小 buffer,比如 30MB,然后考虑如何集约化尽可能少地使用这 30MB buffer,所谓集约化就是收着力的意思,并形成以下共识,寻找 30BM buffer 内最佳收益的占比,而不是寻求最大带宽,因此剩下的 buffer 则留给别人达到同样的目标。

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

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

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

相关文章

goroutinue和channel

goroutinue和channel 需求传统方式实现goroutinue进程和线程说明并发和并行go协程和go主线程MPG设置Go运行的cpu数 channel(管道)-看个需求使用互斥锁、写锁channel 实现 使用select可以解决从管道取数据的阻塞问题(无需手动关闭channel了)goroutinue中使…

Vue 3的性能优化策略

Vue 3有一些性能优化策略可以帮助提升应用的性能: 静态提升(Static Template Hoisting):Vue 3使用了模板编译提升技术,将模板编译为更高效的渲染函数。这个过程中,静态模板部分会被提升到编译阶段&#xff…

Rust 字符串基本使用教程及代码演示

文章目录 一、基本使用教程1、字符串类型String&str 2、创建字符串创建String创建&str 3、字符串操作索引切片格式化字符串比较 4、字符串和集合5、字符串的错误处理6、参考链接 二、代码演示1、代码演示2、执行结果 一、基本使用教程 在Rust中,字符串是编…

61、回溯-分割回文串

思路: 还是全排列的思路,列出每一种组合,然后验证是否是回文,如果是子串放入path中,在验证其他元素是否也是回文。代码如下: class Solution {// 主方法,用于接收一个字符串s并返回所有可能的…

油烟净化器控制食堂油烟排放:高效净化设备的必要性与实施策略

我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 在食堂环境中,油烟排放是一个普遍存在且备受关注的问题。选择高效的油烟净化设备对于保障空气质量、改善生活环境…

智能变频三模正弦波控制器

智能变频三模正弦波控制器 前言一、图片介绍总结 前言 不敢动,完全不敢动。多做笔记,完全了解之后再说吧 一、图片介绍 轮毂电机 主角登场 淘宝关于这款控制器的介绍 当然不同的型号功能不同 学习线插上就会转,可以使用继电器控制通断。 电门…

mac资源库的东西可以删除吗?提升Mac运行速度秘籍 Mac实用软件

很多小伙伴在使用mac电脑处理工作的时候,就会很疑惑,电脑的运行速度怎么越来越慢,就想着通过删除mac资源库的东西,那么mac资源库的东西可以删除吗?删除了会不会造成电脑故障呢? 首先,mac资源库…

day03--react中setState的使用

一、setState state状态必须通过setState进行更新&#xff0c;且更新是一种合并&#xff0c;不是替换。 下面通过一个切换状态的例子说明 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewp…

解决ax = Axes3D(fig2)pycharm画3d图空白不显示问题

明明代码运行正确&#xff0c;却总是显示不出来 绘制出来的也是空白 改一下代码就好了 ax Axes3D(fig2) #原来代码 ax fig2.add_axes(Axes3D(fig2)) #改后代码 修改过后就可以显示了

深入了解MySQL:从基础到特性,全面解读关系数据库管理系统的历史与应用

文章目录 1. MySQL简介1.1 概述1.2 架构与兼容性1.3 开源与社区支持 2. MySQL的历史2.1 创始与初衷2.2 发展历程2.3 在Oracle的持续发展2.4 开源与商业结合 3. MySQL的核心特性4. MySQL在实际应用中的作用4.1 网站建设与内容管理4.2 商业智能与客户关系管理4.3 企业级应用与云集…

可视化软件开发

可视化软件开发纪要 当开发大型软件时&#xff0c;软件具有很多功能&#xff0c;很多模块揉到一起很难管理软件项目&#xff0c;所有重要的一点是如何解耦功能。比如在有限元软件中&#xff0c;网划分工具&#xff0c;求解器可以独立于界面软件&#xff0c;但是他们之间还是要…

线性代数 --- 计算斐波那契数列第n项的快速算法(矩阵的n次幂)

计算斐波那契数列第n项的快速算法(矩阵的n次幂) The n-th term of Fibonacci Numbers&#xff1a; 斐波那契数列的是一个古老而又经典的数学数列&#xff0c;距今已经有800多年了。关于斐波那契数列的计算方法不难&#xff0c;只是当我们希望快速求出其数列中的第100&#xff0…

mysql8.0免安装版windows

1.下载 MySQL下载链接 2.解压与新建my.ini文件 解压的路径最好不要有中文路径在\mysql-8.0.36-winx64文件夹下新建my.ini文件&#xff0c;不建data文件夹(会自动生成) [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录(尽量用双斜杠\\,单斜杠\可能会报错) basedirD:\…

uniapp获取当前位置及检测授权状态

uniapp获取当前位置及检测授权定位权限 文章目录 uniapp获取当前位置及检测授权定位权限效果图创建js文件permission.jslocation.js 使用 效果图 Android设备 点击 “设置”&#xff0c;跳转应用信息&#xff0c;打开“权限即可”&#xff1b; 创建js文件 permission.js 新建…

3d合并的模型为什么没有模型---模大狮模型网

在3D建模中&#xff0c;合并模型是常见的操作&#xff0c;它可以将多个模型合并成一个整体。然而&#xff0c;有时候在合并后却发现部分模型消失了&#xff0c;这可能会让人感到困惑和失望。本文将探讨为什么合并的3D模型中会出现没有模型的情况&#xff0c;并提供一些解决方法…

Web前端一套全部清晰 ③ day2 HTML 标签综合案例

别让平淡生活&#xff0c;耗尽所有向往 —— 24.4.26 综合案例 —— 一切都会好的 网页制作思路&#xff1a;从上到下&#xff0c;先整体到局部&#xff0c;逐步分析制作 分析内容 ——> 写代码 ——>保存——>刷新浏览器&#xff0c;看效果 <!DOCTYPE html> &l…

ubuntu22 部署fastDFS单节点和集群,整合Spring Boot(刚部署成功)

ubuntu22 部署fastDFS单节点和集群 一、先准备1、所需依赖安装2、下载安装包 二、安装FastDFS单节点1、libfastcommon安装1.1、创建软连接 2、安装fastDFS2.1、fastDFS目录简单介绍2.2、创建软连接 3、配置和启动Tracker服务3.1、修改Tracker配置文件3.2、启动Tracker 4、配置和…

【笔试强训】除2!

登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器&#xff0c;C、Java、前端、产品、运营技能学习/备考/求职题库&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/…

IDEA插件分享 - enum-quick-generate 实现枚举类自动生成

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

代码随想录算法训练营DAY38|C++动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

文章目录 动态规划理论基础什么是动态规划动态规划的解题步骤DP数组以及下标的含义递推公式DP数组初始化DP数组遍历顺序打印DP数组动态规划五部曲 动态规划应该如何debug 509.斐波那契数什么是斐波那契数列动态规划五部曲确定dp数组下标以及含义确定递推公式dp数组如何初始化确…