鉴赏 tcp vegas

优秀的 vegas 之后,再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas。

从下图可看出所有的(对,所有的) aimd 都毫无伸缩性(z:吞吐,x:rtt,y:丢包率,由 buffer_size 直接决定):
在这里插入图片描述

一下就可看出 rtt 和 buffer 主宰了效率,所有的 aimd 定制算法都在调节 alpha 拧巴这两者,比如照顾大 rtt 或浅 buffer,本质上就是在调整 ai 和 md 的系数,最终调整 alpha 展开成别的算法,cubic,scalable,htcp 等无不如此。

aimd 是个非常公平的控制算法,但它对于拥塞控制确实也只是公平收敛的意义,它甚至不控制拥塞,相反,对于大多数 aimd 实例,比如 reno,cubic,它控制拥塞的手段是制造拥塞。

vegas 直接控制拥塞,而不搞别的那些复杂玩意儿。vegas 监控两个变量:

  • expected = delivered / basertt,以全局最小 basertt 追踪,它表示无拥塞吞吐。
  • actual = delivered / lastrtt,实测吞吐。

expected - actual 自然就是实测吞吐和期望吞吐的差异,拥塞控制的目标就是追平这个差异,不同的追平方案就是不同的拥塞控制算法。vegas 的方法既有效又巧妙。

vegas 定义 diff = (expected - actual) * basertt,很显然,它的意思是实际和预期的报文数量。如果实际和预期有差异,多出来的报文一定在 buffer 中,巧妙之处在于:

  • diff < beta 避免了拥塞。
  • diff > alpha 兼备了探测。
  • alpha,beta 只和 basertt 和 lastrtt 比例有关,公平收敛。

观察 diff < beta,其中 diff 具有全局意义,vegas 巧妙地将全局的 queuing 时间转换成单独流 actual 的下降,而 actual 下降本就由全局拥塞导致。

actual 下降由两种原因导致,自己造成或它者造成,要么由于自己 cwnd 冲高导致 expected 过高而显得 actual 相对下降,这种情况下 cwnd 需要降低,要么由于有其它流量侵入导致带宽被分享,这种情况下 cwnd 降低体现收敛,无论哪种情况都避免了拥塞。

diff 计算出来的是全局的 buffer 占率,而不是单独一条流的,vegas 所有计算都在全局意义上进行:
在这里插入图片描述
所以,vegas 的公平收敛非常完美:
在这里插入图片描述

再看 diff > alpha,它确保 buffer 中始终有一些报文以及时感知带宽变化。bbr 操作点选在 rtt,带宽正交点实际上是个错误,完全清空 buffer,如果有流量退出,bbr 不得不采用定时 probe 的方式发现新带宽,而 vegas 则能自动发现。alpha 越大,其探测性越强,但代价是 queuing 时间,这正解释了 bbr 论文中 rtt 和带宽的正交性导致的测不准原理。

干嘛不松弛一下,索性利用这个测不准呢。

有趣的是,vegas 没被推广正是因为 “不公平”,vegas 面对 aimd 流排队会不断退让。然而除了实验室数据理论分析,没有任何成规模的现网数据佐证它。全局统计意义上,只要 aimd 流足够多(足够异步),虽然每一条流都经历锯齿起伏,但整体队列长度是稳定的,这意味着 vegas 调整好 alpha,beta 以适配这个队列,结果就 ok,因为不存在不断增加的队列。

最后谈一下实现。linux kernel 的 tcp vegas 其实是个瘸子,它没有实现精准测量,相反,它采用了 2.6 内核粗糙的计数方法。任何 delay-based 算法正确实现方式都该使用 net/ipv4/tcp_rate.c 里 rs->delivered 与 rs->interval_us 做除法才算数,而不是直接 cwnd / srtt。此外,linux tcp 也没有实现 vegas 独特的时间序重传算法以及慢启动算法,这种重传算法和 bbr 依赖的 rack,pacing control 几乎一致了,缺失的本质原因在于 linux 内置了 loss-based cc 状态机,非常难改。

为什么写这个文章重复讲一个不被看好的 vegas,毕竟以前写过好多次 vegas 了。因为我看到 windows 竟然支持 bbr 了,有个评论提到了 vegas 是好的:
在这里插入图片描述

我也是这么认为的,所以难免想单独再多说几句,就写了本文。

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

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

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

相关文章

(四)pytorch图像识别实战之用resnet18实现花朵分类(代码+详细注解)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、关于这个实战的一些知识点Q1&#xff1a;图像识别实战常用模块解读Q2:数据增强Q3:迁移学习Q4&#xff1a;平均全局池化Q5&#xff1a;设置哪些层需要训练时…

大一C语言查缺补漏1 12.2

学习方向非C语言方向&#xff0c;但是专业是。。 仅供参考&#xff0c;&#xff0c;祝大家期末考试顺利。 对于二维数组定义&#xff0c;要给出明确的定义 eg&#xff1a;double a [21][4] int a [ ][3] {1,2,3,4,5,6} 不可以是&#xff1a;int a [ ][3]&#xff1b; 在c…

Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

前言 在开发UI滚动列表的时候&#xff0c;经常会有每项的背景图不统一的情况&#xff0c;会间隔重复的情况居多。这种情况下&#xff0c;手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下&#xff0c;笔者尝试写个小工具&#xff0c;在搭建UI时配置一下循环背景的…

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode)&#xff1a;一名选手只要输掉一场球&#xff0c;就被淘汰。一对一对…

fill-in-the-middle(FIM) 实现与简单应用

1 背景 传统训练的 GPT 模型只能根据前文内容预测后文内容&#xff0c;但有些应用比如代码生成器&#xff0c;需要我们给出上文和下文&#xff0c;使模型可以预测中间的内容&#xff0c;传统训练的 GPT 就不能完成这类任务。 传统训练的 GPT 只能根据上文预测下文 使用 FIM…

vue-element安装富文本编辑器vue-quill-editor教程

在vue ui面板中安装vue-quill-editor依赖 命令安装 npm install vue-quill-editor --save # or yarn add vue-quill-editor 使用方法 在main.js导入富文本编辑器 import VueQuillEditor from vue-quill-editor import quill/dist/quill.core.css // import styles import…

技术博客:市面上加密混淆软件的比较和推荐

技术博客&#xff1a;市面上加密混淆软件的比较和推荐 引言 市面上有许多加密混淆软件可供开发者使用&#xff0c;但哪些软件是最好用的&#xff1f;哪些软件受到开发者的喜爱&#xff1f;本文将根据一次在CSDN上的投票结果&#xff0c;为大家介绍几款在程序员中普及度较高的…

CEC2013(python):五种算法(ABC、PSO、CSO、OOA、DBO)求解CEC2013(python代码)

一、五种算法简介 1、人工蜂群算法 &#xff08;Artificial Bee Colony Algorithm, ABC&#xff09; 2、粒子群优化算法PSO 3、鸡群优化算法CSO 4、鱼鹰优化算法OOA 5、蜣螂优化算法DBO 二、5种算法求解CEC2013 &#xff08;1&#xff09;CEC2013简介 参考文献&#xff…

WINDOWS(WIN11)通过IP添加网络打印机

点击添加设备 点击手动添加 使用IP地址或主机名添加打印机 选择TCP/IP设备&#xff0c;输入打印机地址 如果有正确驱动就安装&#xff0c;没有就取消。 通过手动设置添加本地打印机或网络打印机 使用现有的端口 根据打印机IP&#xff0c;选择标准端口。 成功&#xff01; 到…

机器学习笔记:支持向量机回归SVR

1 主要思想 主要思路类似于机器学习笔记&#xff1a;支持向量机SVM_支撑向量学习-CSDN博客 和SVM的区别主要有 解法和SVM区别不大&#xff0c;也是KKT 2 和线性回归的区别 对SVR&#xff0c;如果f(x)和y之间的差距小于阈值ε【也即落在两条间隔带之间】&#xff0c;则不计算…

模拟组建网络的过程

DNS是域名系统&#xff0c;作用是将域名解析成ip地址 要求 1.使用172.16.0.0网段组建网络 2.使用3台pc&#xff0c;可以配置DHCP服务自动分配ip 3.添加两个网站服务器 第一台是www.taobao.com 第二台www.jd.com 他们可以通过DNS服务器为客户解析域名 172开头的是B类ip地…

标准库中的string类(上)——“C++”

各位CSDN的uu们好呀&#xff0c;好久没有更新小雅兰的C专栏的知识啦&#xff0c;接下来一段时间&#xff0c;小雅兰就又会开始更新C这方面的知识点啦&#xff0c;以及期末复习的一些知识点&#xff0c;下面&#xff0c;让我们进入西嘎嘎string的世界吧&#xff01;&#xff01;…

【论文简述】High-frequency Stereo Matching Network(CVPR 2023)

一、论文简述 1. 第一作者&#xff1a;Haoliang Zhao 2. 发表年份&#xff1a;2023 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;立体匹配、MVS、深度学习、高频信息、LSTM 5. 探索动机&#xff1a;(1)当涉及到估计的视差图的更精细的特征时&#xff0c;大多数当前…

Java反序列化工具ysoserial使用

ysoserial是一款用于生成 利用不安全的Java对象反序列化 的有效负载的概念验证工具。 项目地址 https://github.com/frohoff/ysoserial主要有两种使用方式&#xff0c;一种是运行ysoserial.jar 中的主类函数&#xff0c;另一种是运行ysoserial中的exploit 类&#xff0c;二者…

未来十年,人工智能就业方向及前景如何?

人工智能&#xff08;AI&#xff09;是一个快速发展的领域&#xff0c;对于未来的就业方向和前景有着巨大的影响。以下是一些可能的发展趋势和就业前景&#xff1a; 1、增长趋势&#xff1a;人工智能正在全球范围内经历巨大的增长&#xff0c;预计在未来十年内将继续保持这一趋…

一个正则快速找到在ES中使用profile的时产生慢查询的分片

在es中使用profile分析慢查询的时候&#xff0c;往往因为分片过多&#xff0c;或者因为查询条件太复杂&#xff0c;分析的结果几十万行。在kibana上点半天&#xff0c;也找不到一个耗时长的分片。 kibana上可以通过正则来匹配。其实我们只需要匹配到耗时大于10秒的请求。 检索语…

0x42 树状数组

0x42 树状数组 若一个正整数 x x x的二进制表示为 a k − 1 a k − 2 . . . a 2 a 1 a 0 a_{k-1}a_{k-2}...a_2a_1a_0 ak−1​ak−2​...a2​a1​a0​&#xff0c;其中等于1的位是 { a i 1 , a i 2 , . . . , a i m } \{a_{i_1},a_{i_2},...,a_{i_{m}}\} {ai1​​,ai2​​,...…

鸿蒙原生应用再添新丁!喜马拉雅入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;喜马拉雅入局鸿蒙 来自 HarmonyOS 微博12月20日消息&#xff0c; #喜马拉雅正式完成鸿蒙原生应用版本适配#&#xff0c;作为音频业巨头的喜马拉雅 &#xff0c;将基于#HarmonyOS NEXT#创造更丰富、更智慧的全场景“声音宇宙”&#xff01;#鸿…

Python 正则表达式入门:轻松掌握字符串匹配的艺术

Python 正则表达式入门&#xff1a;轻松掌握字符串匹配的艺术 引言&#xff1a;什么是正则表达式&#xff1f;基础知识&#xff1a;正则表达式的语法和规则Python中的正则表达式&#xff1a;re模块的使用实战应用&#xff1a;常见的正则表达式案例最佳实践与常见错误结语&#…

格密码:LWE设计公钥密码系统

目录 一. LWE公私钥对 二. 怎么加密&#xff1f; 三. 怎么解密&#xff1f; 四. 正确性分析 五. 安全性 在格密码中&#xff0c;LWE(Learning With Errors)问题非常重要&#xff0c;本文章将介绍一些基于LWE设计的公钥密码方案&#xff0c;并详细讨论这些方案是如何运行的…