cubic 的 tcp friendliness 与拐点控制

news2025/1/15 6:42:52

TCP CUBIC 应该是迄今为止综合表现最优秀的算法,其中有两个亮点,一个是 RTT 无关性,另一个是可扩展性。RTT 无关性表现在 CUBIC 的 cwnd 表达式中没有 RTT 因子,而可扩展性则来自于曲线本身:

  • 随着 BDP 增加,CUBIC 三次曲线拐点(从上凸到下凸)逐渐右上移,cwnd 初始增量更大,初始 AI 效率更高。
  • 无论 BDP 多大,CUBIC 三次曲线都保证在接近饱和时 cwnd 缓慢逼近 Wmax,降低丢包损失。
  • 无论 BDP 多大,越过 Wmax 后(已经够本了),CUBIC 加速 probe,高效率获取 extra 容量。

而所有这一切,CUBIC 仅需要绝对时间轴上的 ACK 驱动。

TCP CUBIC 曲线只有一条:

W c u b i c ( t ) = C ∗ [ t − ( K = β ∗ W m a x C 3 ) ] 3 + W m a x W_{cubic}(t) = C*[t-(K=\sqrt[3]{\dfrac{\beta *W_{max}}{C}})]^3 + W_{max} Wcubic(t)=C[t(K=3CβWmax )]3+Wmax

其中 C = 0.4,beta = 0.2(2 个参数可调),C 决定曲线形状,Wmax 和 K 只影响曲线的位置。显而易见,BDP 越大,Wmax 越大,同一坐标系中,曲线拐点越靠右上:
在这里插入图片描述

若以每个 AIMD 周期做参照,只取曲线 x >= 0 的部分,即可看出周期开始时,BDP 越大,Wmax 越大,曲线的增长越快,反之在小 BDP 场景,曲线离原点太近,增长过于缓慢。

这就是 CUBIC 之 TCP Friendly region 要解决的问题。

在 CUBIC 曲线旁边同时画出 Reno(or TCP Tahoe,or Standard TCP) 曲线:
在这里插入图片描述

可见 Wmax 越大,CUBIC 初始优势越大,这就是 CUBIC 可扩展性,但另一方面,当 BDP 小到一定程度,总会存在一个点,Reno 曲线即使在开始时也位于 CUBIC 曲线上方,此时 Reno 效率高于 CUBIC,在这种情况下,CUBIC 选择使用 Reno 的结果。

这就是 CUBIC RFC8312 Principle 2:

CUBIC promotes per-flow fairness to Standard TCP. Note that Standard TCP performs well under short RTT and small bandwidth (or small BDP) networks. There is only a scalability problem in networks with long RTTs and large bandwidth (or large BDP). An alternative congestion control algorithm to Standard TCP designed to be friendly to Standard TCP on a per-flow basis must operate to increase its congestion window less aggressively in small BDP networks than in large BDP networks. The aggressiveness of CUBIC mainly depends on the maximum window size before a window reduction, which is smaller in small BDP networks than in large BDP networks. Thus, CUBIC increases its congestion window less aggressively in small BDP networks than in large BDP networks. Furthermore, in cases when the cubic function of CUBIC increases its congestion window less aggressively than Standard TCP, CUBIC simply follows the window size of Standard TCP to ensure that CUBIC achieves at least the same throughput as Standard TCP in small BDP networks. We call this region where CUBIC behaves like Standard TCP, the “TCP-friendly region”.

注意,这里的 friendly 不是 CUBIC 对 Reno 的退让,恰恰相反,CUBIC 的可扩展性在小 BDP 场景损害了效率,而这种场景下 Reno 的效率更高。

这不能说是 CUBIC 的代价,而是事实证明 Reno 的 AIMD 已足够收敛,这是拥塞控制的根本目标,而 CUBIC 的 cwnd 如果不如 Reno 的大,同样满足收敛性的前提下,选择效率更高的。

算法很简单:CUBIC 算出来的 cwnd 如果比 Reno 还要小,就选择 Reno 的结果。

接下来看 CUBIC 的拐点控制。

CUBIC 可以作为一种 “基于拐点” 的算法来理解,这个拐点就是其高效的原因。无论如何,先快后慢地逼近网络饱和容量是正确的,反之如果开始慢,网络利用率低,如果后面快,则更容易丢包。这就是 CUBIC 的上凸区域,下图的面积 1 越小越好。

再看 probe 区域,面积 2 如果太大,虽长期不丢包,但探测不够快,长 RTT 时带宽利用率下降,如果足够小,可在更短时间内 probe 到新 Wmax,降低下一个周期的面积 1,显然下凸曲线可以满足让面积 2 足够小但又不至于过分小,这就是 CUBIC 拐点自适应:
在这里插入图片描述

CUBIC 的问题在于它无法在长肥管道场景保持稳定。

首先,网络流量并非持续稳定,由于 RTT 过长,夜长梦多,就像导航经常误判那样,从上海出发去温州显示畅通,等到达台州时可能就会拥堵,因此 Wmax 不一定可保持,而 CUBIC 本身必须对 loss 进行 MD 反应以保证收敛,而 Wmax 的不稳定性将导致对丢包的频繁反应。

其次是一个实现问题,它来自于上述大 RTT 导致的波动影响力(本质还是夜长梦多),CUBIC 以 minRTT 作为一个计算周期:

if dMin then dMin ← min(dMin, RTT)
else dMin ← RTT

t ← tcp_time_stamp + dMin − epoch start
target ← origin_point + C(t − K)^3

如果 RTT 太长,将导致估算误差过大,曲线呈现阶梯状不再平滑,很容易 “越过” 拐点误入 probe 区域,这将导致拐点估算误差。虽然 CUBIC 用绝对时间采样打点描绘曲线,消除了 RTT 依赖,解决了 RTT 不公平问题,但 RTT 却依然影响着曲线平滑程度,RTT 越小曲线越光滑,越 “CUBIC"(形容词),然而问题是 RTT 越小,越倾向于受 TCP Friendliness 控制而采用 Reno。

这是个有趣的矛盾,RTT 越大,CUBIC 优势越大,但计算周期也越久,结果越不精确,反之 RTT 越小,CUBIC 效率越低,越倾向于 Reno。有个思路是压缩计算周期,但这本质上还是 ACK 时钟的问题。

BBR 为应对 Delayed ACK,聚合 ACK 也采取了一些 “优化”,并打入一些 patch,同样没从根本上解决问题,对 CUBIC 也一样,虽然压缩计算周期很容易,比如将 RTT/4 作为输入,但如果 RTT/4 后没有 ACK 到达,就会进入空窗期,在 ACK 聚合场景,ACK 本就稀疏到达,问题更加明显,最终的方案似乎只有抛弃 ACK 时钟而采用本地时钟,但这很容易违背数据包守恒原则而引发拥塞。

CUBIC 算法非常优秀,仅输入极少的信息便获得可扩展性和自适应性(另一些算法,比如 tcp scalable 就没有这等效果),但实现和部署场景可能会严重影响 CUBIC 实际效果,比如对丢包的过度反应,比如长 RTT 计算精度问题,但不可否认这些问题都是可以解决的,其大部分的错存在的 Linux kernel 对拥塞状态机的实现本身,是 Linux kernel 绕不开的拥塞状态机限制了 CUBIC(Linux 4.9 引入 BBR 后已经解放了这个状态机依赖,但 CUBIC 大概率不会重新实现)。

回到 CUBIC 本身,它虽被列为 Loss-based cc,但不意味着它依赖深 buffer 而故意引入大时延,BDP 本就很大的场景,小 buffer 非常适合 CUBIC,且只需要有一跳小 buffer 即可。

和 BBR 不同的只是 CUBIC 不会主动腾挪对 buffer 的占用,但如果给 CUBIC 配置一个小 buffer 路径,它依然可以高效填充有效带宽本身而不是 buffer。

影响时延的不是算法,而是 buffer 本身。然而,这种论点有悖于设备商做宣传的动机而容易被误认为缺斤短两,再说了,存储成本越来越低,反过来导致延时成本越来越低。这又是时间和空间的本质矛盾体现,但却不给人选择权,buffer 就摆在那里,用不用不由你,关键看你怎么用。

CUBIC 绝对是一个非常优秀的 cc,它作为 Linux 以及很多其它系统缺省 cc 不是没有理由,CUBIC 在各方面的表现都很优秀,但受制于 Linux kernel 的 cc 框架,在实现上并非那么完备。若不是 BBR 出现,人们普遍都基于 CUBIC 做优化,为其添加 pacing 支持,缓和过度的丢包反应,为其增加时延测量…况且 BBR 由于太新被无限放大了优势而忽略了缺点, 造成了过度吹捧,三天两头有 BBR-based 优化版 BBR 的 paper 放出却还是老套而无突破,卷风不亚于 Linux kernel 社区。有必要科普一下 CUBIC beyond BBR,作此文。

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

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

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

相关文章

音视频技术开发周刊 | 292

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 谷歌将 AI 芯片团队并入云计算部门 追赶微软和亚马逊 OpenAI推出的ChatGPT获得一定成功,微软是OpenAI的重要投资者,它将ChatGPT植入必应搜索&#…

【16】SCI易中期刊推荐——计算机 | 人工智能领域(中科院2区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

【IO】零拷贝、mmap、sendfile

文章目录 前言一、普通IO二、mmap三、sendfile1. Linux2.1的sendfile2. Linux2.4的sendfile 四、总结与扩展1. 结论2. 解释、扩展 参考 前言 概念&#xff1a; 没有发生CPU拷贝数据&#xff0c;都是DMA&#xff08;直接内存访问&#xff09;拷贝 优势&#xff1a; 减少内核态…

《算经》中的百钱买百鸡问题,你会做吗?试下看看(39)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 你知道我国历史上有个王朝叫北魏吗&#xff1f; 北魏&#xff08;386年—534年&#xff09;&#xff0c;南北朝时期北…

HashMap 简述

文章目录 前言一、HashMap的数据结构二、HashMap存储数据的大致过程1 哈希值2 什么是哈希冲突?3 为何有两种数据结构? 三、HashMap常用知识总结 前言 HashMap 是开发中常用的一种数据结构,通常用做返回值,计算比对等,会经常用到; 一、HashMap的数据结构 jdk8之后,数据结构是…

时至今日,Pascal系列Turbo Pascal 5.0依旧是我心中永远的神

从DOS时代到Windows时代&#xff0c;从桌面应用到Web应用&#xff0c;每一个时代都有它特定的编程工具 在我看来&#xff0c;DOS时代的编程语言&#xff0c;Pascal必占一席之地。 尤其是Turbo Pascal系列的最后一个版本——Turbo Pascal 5.0&#xff0c;更是我心目中永不褪色的…

nginx企业级高性能配置优化

一、基础配置优化 1、CPU亲和性优化 1.1、推荐直接将配置项设置成auto (worker_cpu_affinity)&#xff0c;即采用了Nginx推荐的CPU绑核策略方式。 1.2、手动绑定&#xff0c;将worker线程数量与CPU核心数一一绑定方式设置&#xff0c;设置成auto Nginx会自动识别并按照推荐策略…

New Bing 全面开放?我看未必

前段时间大家应该都被ChatGPT刷屏了&#xff0c;其实就回答来说New Bing 才是最厉害的&#xff0c;因为它底层使用了ChatGPT 并且可以支持联网查询数据&#xff0c;回答中还能支持看到出处&#xff0c;方便确认其真实性。 New Bing 是微软基于 OpenAI ChatGPT 技术开发的新一代…

vue3项目搭建

一、安装 vue3.0 脚手架 &#xff08;1&#xff09;node安装&#xff08;前端开发环境&#xff09; 打开node官网:https://nodejs.org/zh-cn/ 下载node并安装&#xff08;安装vue3建议node在10.0版本以上&#xff09;。 输入node -v可显示node版本 &#xff08;2&#xff09;…

使用思维链(Chain-of-thoughts)提示在大型语言模型中引出推理

语言模型(LM)在NLP领域的发展速度非常快&#xff0c;特别是在大型语言模型(LLM)方面&#xff1a;当语言模型具有大量参数或权重/系数时&#xff0c;它们被称为“大型”。这些“大型”语言模型拥有处理和理解大量自然语言数据的能力。 LLM被用于一系列自然语言任务&#xff0c;…

【Java EE】-Servlet(三) MessageWall

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享: 寂寞会发慌&#xff0c;孤独是饱满的。——史铁生《命若琴弦》 主要内容&#xff1a;前后端交互接口协商&#xff0c;约定好&#xff0c;使用什么数据格式传输&…

变现 起航篇! 手把手交你用chatgpt快速生成视频!

Chatgpt 很多同学都用的非常熟练了&#xff0c;但是都停留在文字阶段&#xff0c;有没有更好玩的用法&#xff0c;可以深度的利用chatgpt做一些事情呢&#xff1f; 今天菜哥就找一个方法可以快速利用chatgpt制作视频&#xff0c;整个过程大概3分钟&#xff0c;非常有趣&#xf…

浪涌保护器的工作类型及其应用

所有电路系统中的电气设备都需要浪涌保护器的保护支持。这主要取决于器件的内部电路如何能够处理电压波动。如果器件出现输入电压波动&#xff0c;则会导致器件损坏&#xff0c;因为电源电压的波动可能对器件有害。在本文中&#xff0c;我们将了解什么是浪涌保护器&#xff0c;…

【源码+个人总结】Spring 的 三级缓存 解决 循环依赖

Spring可以通过以下方法来避免循环依赖&#xff1a; 构造函数注入&#xff1a;使用构造函数注入来注入依赖项&#xff0c;这是一种比较安全的方式&#xff0c;因为在对象创建时就会注入依赖项&#xff0c;可以避免循环依赖。 Setter方法注入&#xff1a;使用Setter方法注入依赖…

云开发谁是卧底线下小游戏发牌助手微信小程序源码

源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/87614365 云开发谁是卧底线下小游戏源码&#xff0c;发牌助手微信小程序源码。 “谁是卧底OL”是一个非常有趣&#xff0c;风靡全国的比拼语言表述能力、知识面与想象力的游戏。 谁是卧底OL是一款由开发…

Notepad++下载安装NppFTP插件

文章目录 一、Notepad内下载安装NppFTP插件1.打开Notepad——插件——插件管理2.找到NppFTP插件——点击安装3.安装完成 二、直接下载安装NppFTP插件1.网盘下载2.将下载好的NppFTP插件放入到Notepad\plugins的插件目录下3.重启Notepad 三、Notepad下载总结 一、Notepad内下载安…

【刷题】142. 环形链表 II

142. 环形链表 II 一、题目描述二、示例三、实现3.1 方法13.2 方法2 142. 环形链表 II 一、题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 nex…

前端学习 - 淼哥学Vue

如何判断数据是否受Vue管理&#xff0c;数据&#xff08;对象&#xff0c;数组&#xff0c;字符串等&#xff09;能否响应式更新&#xff1f; 即查看数据是否有对应get/set方法&#xff0c;数组没有对应get/set方法&#xff0c;故操作数组要通过其封装好的变更方法 变更方法 …

js高级知识汇总一

目录 1.怎么理解闭包&#xff1f; 2.闭包的作用&#xff1f; 3.闭包可能引起的问题&#xff1f; 4.变量提升 5.函数动态参数 6.剩余参数 ...&#xff08;实际开发中提倡使用&#xff09; 7.展开运算符 8.箭头函数 9.解构赋值&#xff08;数组、对象&#xff09; 10 创…

一文总结动态规划

动态规划 一、背包问题1 问题定义2 问题分类3 解题模板01背包最值问题剩余背包问题 4 例题分析LeetCode1049.最后一块石头的重量II 二、区间动态规划1 解题模板2 例题分析牛客.石子合并 总结与分析 一、背包问题 1 问题定义 如何确定一个题目是否可以用背包问题解决 背包问题…