鉴赏 tcp vegas

2023-12-19

优秀的 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 是好的:
在这里插入图片描述

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

鉴赏 tcp vegas 的相关文章

  • 思幻二次元风格的工作室个人引导页源码

    思幻工作室个人引导页源码已经完成开发 该源码支持三端自适应 并且具备赞助功能 我们选择了当前点赞量最高的配色方案 打造了一个独特的二次元风格引导页 经过在美国服务器上进行的测试 效果令人满意 网页加载速度达到了全国深绿水平 在手机端 平板端
  • Velocity循环详解

    Velocity循环详解 大家好 我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3 0的小编 也是冬天不穿秋裤 天冷也要风度的程序猿 解锁Velocity循环 优雅处理数据展示 在Web开发中 数据展示是一个不可避免的话题 而Veloci

随机推荐

  • python 1200例——【2】求闰年

    在Python中 判断一个年份是否为闰年 Leap Year 的方法是 如果年份能被4整除但不能被100整除 那么它是一个闰年 如果年份能被400整除 那么它也是一个闰年 基于以上规则 我们可以编写一个Python函数来判断一个年份是否为闰
  • 精品Nodejs实现的“音乐盒”小程序的设计与实现-音乐播放器歌曲

    含文档 PPT 源码等 精品Nodejs实现的 音乐盒 小程序的设计与实现 包运行成功 该项目含有源码 文档 PPT 配套开发软件 软件安装教程 项目发布教程 包运行成功 软件开发环境及开发工具 操作系统 Windows 10 Window
  • 直排轮滑教程1

    准备活动及站立方法 1 轮滑起源于滑冰 2 开始运动之前最好做热身运动 刺激肌肉 使身体兴奋起来 3 戴护具 顺序是头盔 护肘 护膝 鞋 护掌 脱的顺序相反 4 起身 左腿立起 两手扶腿 两手撑 左腿蹬站立 5 原地站立方法三种 跟靠拢 两
  • 用Python编辑PDF文件:拆分合并、加密解密、页面编辑

    文章目录 安装和初步使用 合并与拆分 页面编辑 加密解密 安装和初步使用 PyPDF2 支持拆分 合并 页面旋转 添加水印 加密解密等操作 支持pip安装 过程很丝滑 pip install PyPDF2 PyPDF2提供了PdfFileR
  • Flutter完整开发实战详解(二、 快速开发实战篇)

    作为系列文章的第二篇 继 Flutter完整开发实战详解 一 Dart语言和Flutter基础 之后 本篇将为你着重展示 如何搭建一个通用的Flutter App 常用功能脚手架 快速开发一个完整的 Flutter 应用 我们的目标是 前言
  • oracle递归函数

    oracle递归函数 大家好 我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3 0的小编 也是冬天不穿秋裤 天冷也要风度的程序猿 探秘Oracle递归函数 解锁数据库世界的无限可能 在数据库领域 递归函数是一种强大的工具 特别是在Orac
  • 【具身智能评估10】ThreeDWorld: A Platform for Interactive Multi-Modal Physical Simulation

    论文标题 ThreeDWorld A Platform for Interactive Multi Modal Physical Simulation 论文作者 Chuang Gan Jeremy Schwartz Seth Alter D
  • AttributeError: ‘module‘ object has no attribute ‘RAW_OPT‘解决方案

    大家好 我是爱编程的喵喵 双985硕士毕业 现担任全栈工程师一职 热衷于将数据思维应用到工作与生活中 从事机器学习以及相关的前后端开发工作 曾在阿里云 科大讯飞 CCF等比赛获得多次Top名次 现为CSDN博客专家 人工智能领域优质创作者
  • P2P应用

    目录 一 P2P的简介 二 P2P的工作方式 1 具有集中目录服务器的P2P工作方式 2 具有全分布式结构的P2P文件共享程序 一 P2P的简介 P2P 对等连接 是指两台主机在通信时 并不区分哪一个是服务请求方和哪一个是服务提供方 只要两
  • 11.1 Linux 设备树

    一 什么是设备树 设备树 Device Tree 描述设备树的文件叫做 DTS DeviceTree Source 这个 DTS 文件采用树形结构描述板级设备 也就是开发板上的设备信息 树的主干就是系统总线 IIC 控制器 GPIO 控制器
  • matlab实现逻辑算法优化最小二乘支持向量机ILA-lssvm实现数据回归预测

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 代码获取 论文复现及科研仿真合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab完整代码及仿真定制内容点击 智能优化算法 神经网络预测 雷达通信
  • 其他配置相关安装

    consul安装和配置 docker run d p 8500 8500 p 8300 8300 p 8301 8301 p 8302 8302 p 8600 8600 udp consul consul agent dev client
  • Programming Abstractions in C阅读笔记:p235-p241

    Programming Abstractions in C 学习第66天 p235 p241总结 一 技术总结 1 backtracking algorithm 回溯算法 1 定义 p236 For many real world prob
  • I.MX RT1170双核学习(4):FreeRTOS之消息缓冲区(Message Buffer)双核通信详解

    对于RT1170来说 它有两个内核 那两个内核如何通信呢 我们可以通过 MU消息单元详解 来实现这些功能 但它一次只能传输32位的数据 我们知道CM7和CM4有一些公共的内存可以访问 那我们可不可以借助这些公共的内存来实现数据的交互呢 答案
  • Guitar Pro8.1最新2024中文免激活版下载(附教程)

    Guitar Pro 8 是一款功能强大的指法阅读器和编辑器 它允许您编辑吉他 贝斯和尤克里里的乐谱和指法谱 并为鼓或钢琴创建背景音轨 轻松创建 播放和共享您的标签 快速的进行乐谱播放并进行练习 也可以进行编辑操作 允许所有音乐家阅读 编写
  • PHP使用symfony/process来实现多进程请求url或执行多个php文件

    1 什么是symfony process Symfony Process是Symfony框架中的一个组件 用于处理和管理子进程 它提供了一个简单易用的API 可以执行外部命令 并与子进程进行交互 Symfony Process可以执行各种操
  • Docker与微服务:构建和部署微服务架构的完整指南

    微服务架构已经成为现代应用开发的主要范式之一 而Docker容器技术则为微服务的构建 部署和管理提供了理想的解决方案 本文将深入探讨如何使用Docker构建和部署微服务架构 提供更多示例代码和细致的指南 以帮助大家更全面地理解和运用这些关键
  • [杂谈] 乙方甲方交互的另一个例子

    之前有讨论 电信公司与设备供应商之间的一个甲乙关系 杂谈 甲方乙方的一个交互例子 https mzhan017 blog csdn net article details 135004416 其实作为供应商自己来说 其内部也有自己的乙方 比
  • 基于springboot+vue的露营地管理系统

    博主介绍 全网个人号和企业号 粉丝40W 每年辅导几千名大学生较好的完成毕业设计 专注计算机软件领域的项目研发 不断的进行新技术的项目实战 热门专栏 推荐订阅 订阅收藏起来 防止下次找不到 千套JAVA项目实战持续更新中 百套小程序APP项
  • 鉴赏 tcp vegas

    优秀的 vegas 之后 再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas 从下图可看出所有的 对 所有的 aimd 都毫无伸缩性 z 吞吐 x rtt y 丢包率 由 buffer size 直接决定 一下就可看出 rtt 和 bu