鉴赏 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.mfbz.cn/a/258574.html

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

相关文章

LeetCode day27

LeetCode day27 —今天做到树&#xff0c;&#xff0c;&#xff0c;对不起我的数据结构老师啊~~~ 7. 整数反转 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c…

springboot跨域问题,解决方法

前端访问出现CORS跨域问题 不多说&#xff0c;直接上代码~ import org.springframework.stereotype.Component;import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;Component…

OpenAI 偷偷在训练 GPT-4.5!?

最近看到有人已经套路出 ChatGPT 当前的版本&#xff0c;回答居然是 gpt-4.5-turbo&#xff1a; 实际试验下&#xff0c;用 starflow.tech&#xff0c;切换到小星 4 全能版&#xff08;同等官网最新 GPT-4&#xff09;&#xff0c;复制下面这段话问它&#xff1a; What is the…

winfrom大恒工业相机SDK二次开发、C#联合halcon开发

一、开发环境 1.在大恒图像官网下载SDK安装包&#xff0c;安装SDK后&#xff0c;打开安装目录找到Samples文件夹&#xff0c;然后找到Samples\CSharp SDK\x64\DoNET\.NET4.0文件夹下找到GxIAPINET.dll&#xff0c;如图&#xff1a; 2.打开VS2019软件&#xff0c;建立winfrom项…

JS中的异常处理:

throw: 抛出异常时我们哪个关键字&#xff1f;它会终止程序&#xff1f; throw关键字 会终止程序 抛出异常经常和谁配合使用&#xff1f; Error对象配合throw使用 代码演示&#xff1a; function fn(x,y){if(!x || !y){// console.log(11);// throw 用户没有参数传递进来;th…

【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022

前言 本文分享BEV感知方案中&#xff0c;具有代表性的方法&#xff1a;BEVFormer。 它基于Deformable Attention&#xff0c;实现了一种融合多视角相机空间特征和时序特征的端到端框架&#xff0c;适用于多种自动驾驶感知任务。 主要由3个关键模块组成&#xff1a; BEV Que…

EasyExcel合并相同内容单元格及动态标题功能的实现

一、最初版本 导出的结果&#xff1a; 对应实体类代码&#xff1a; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentLoopMerge; import com.al…

markdown文档主题颜色修改

目录 1、选择任意想选择的markdown文档主题css文件&#xff1a; 2、修改背景颜色 1、选择任意想选择的markdown文档主题css文件&#xff1a; 使用工具Typora文件主题路径&#xff1a; C:\Users\AppData\Roaming\Typora\themes&#xff0c;此处我这边就是copy了xydark的css文…

Java 自定义注解

Java 自定义注解&#xff0c; 以及interface Target Retention Around Before After ProceedingJoinPoint JoinPoint 等用法 注解应用非常广泛&#xff0c;我们自定义注解能简化开发各种各种业务 一、关键字解释 (1) 定义注解时&#xff0c;关键字 interface 来表示注解类的类…

高级算法设计与分析(二) -- 递归与分治策略

系列文章目录 高级算法设计与分析&#xff08;一&#xff09; -- 算法引论 高级算法设计与分析&#xff08;二&#xff09; -- 递归与分治策略 高级算法设计与分析&#xff08;三&#xff09; -- 动态规划 未完待续【 高级算法设计与分析&#xff08;四&#xff09; -- 贪…

谷歌新款 Pixel 8 更小、更智能!

一、谷歌 Pixel 8 更小、更智能——比去年的 Pixel 7 贵了 100 美元——不是一点点——贵 与 Pixel 7 一样&#xff0c;Pixel同样在今天 8 比正式发布的更大的 Pixel 8 Pro 兄弟产品更小、更便宜。但今年价格有所上涨&#xff0c;128GB 存储型号的 Pixel 8 起售价为 699.99 美…

腾讯云消息队列11月产品月报 | RocketMQ 5.x 国际站上线

2023年 11月动态 消息队列 RocketMQ 版 1、5.x 形态国际站上线 国际站上线 5.x 集群全系列&#xff0c;第一批先开放新加坡和硅谷地域。 控制台链接&#xff1a;https://console.tencentcloud.com/trocketmq 2、 无感迁移能力 支持用户白屏化操作&#xff0c;将自建的 Roc…

夜莺项目发布 v6.5.0 版本,暗黑菜单来了

大家好&#xff0c;夜莺项目发布 v6.5.0 版本&#xff0c;启用新 logo&#xff0c;菜单支持换肤&#xff0c;支持了暗黑版本的菜单&#xff0c;下一步会支持全站暗黑主题&#xff0c;敬请期待&#xff0c;下面是新 logo。 暗黑菜单 页面右上角点击用户名&#xff0c;在下拉框里…

盘点ASO优化过去到现在的进步

ASO优化行业十年老兵报道&#xff01;从以下几个方面总结了ASO优化的一些变化和进步&#xff0c;给大家分享。 一、优化手段&#xff1a; 过去&#xff0c;ASO优化主要依赖于机刷&#xff0c;通过破解苹果的算法&#xff0c;对苹果账号进行一系列的定向操作行为&#xff08;搜…

React Jsx转换成真实DOM过程?

面试官&#xff1a;说说React Jsx转换成真实DOM过程&#xff1f; 一、是什么 react通过将组件编写的JSX映射到屏幕&#xff0c;以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中&#xff0c;JSX通过babel最终转化成React.createElement这…

双碳背景下能耗在线监测系统硬件选型详述

Acrel-5000web建筑能耗分析系统是用户端能源管理分析系统&#xff0c;在电能管理系统的基础上增加了对水、气、煤、油、热(冷)量等集中采集与分析&#xff0c;通过对用户端所有能耗进行细分和统计&#xff0c;以直观的数据和图表向管理人员或决策层展示各类能源的使用消耗情况&…

SpringBoot访问外部接口的常见方式

文章目录 SpringBoot访问外部接口模拟服务接口RestTemplatepom.xmlRestTemplateConfigClientTestRestTemplateController.java结果 WebClientpom.xmlClientTestWebClientController.java结果 HttpClientpom.xmlClientTestHttpClientController.java结果 OkHttppom.xmlClientTes…

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

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

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后&#xff0c;我们可以将寄存器信息保存到设备树&#xff0c;即便是更换了一个设备&#xff0c;我们也无需修改驱动文件&#xff0c;只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式&#xff0c;这两种方式的主要是设备树中 re…

自营商城与多商户入驻商城功能与开发流程_OctShop

如今互联网以及电子商务的大趋势下&#xff0c;很多企业或商家都意识到自营商城的重要性。当然&#xff0c;要搭建一个属于自己的自营商城并非简单。需要综合考虑众多的因素&#xff0c;如&#xff1a;用户体验、商品管理、在线支付、功能需求、市场分析等等多个方面。如果是自…
最新文章