in-flight 要维持在 bdp 附近吗

试图在 bbr 和 aimd 之间保持公平是徒劳的,因为它们没有共识。bbr 认为 in-flight 超过 bdp 是拥塞,而 aimd 认为 buffer 溢出才拥塞,兼顾彼此,就是 bbr3,aimd 不会往左,bbr 就往右。

vegas 同理,vegas 流认为超过 bdp 的报文量大于 β 就拥塞,而 β 并没多大,这让 vegas 更难与 aimd 共存。

但 vegas 还有更有趣的事,每条 vegas 流都试图维持 buffer 中的报文量的下界 α,α 是个很小的数。但 N * α > buffer_size 可与 α > diff 同时成立,buffer 已溢出,vegas 却还试图 cwnd++。 bbr 也存在该问题,虽然 bbr 为单流设置了 in-flight 上界 2 * bdp,但 N * 2 * bdp > buffer_size 和 cwnd < 2 * bdp 亦可同时满足。

无论 bbr 还是 vegas 均采用 rack 丢包探测,值得一提的事,rack 早在 1994 年 vegas 论文中就被提出,只是 linux 没有实现,让人误认为 rack 是晚近才由 google 提出。

我一向抱怨 bbr 状态机太稀碎,但它也没大错,虽然 probe 会挤占 buffer,但 probertt 后 Σbw_i == C && queue_len == 0,却也兑现了承诺,但值得注意,probertt 是同步的,众流在同时进入 probebw 后仅维持自己的 bwi,却释放了所有 buffer,除非 N * 4 - bdp > buffer_size,请注意,如果 vegas 的 β 取 3,N 巨大且总 bdp 不太大时,bbr 更易爆 buffer。

说这个的目的是,虽然 bbr 和 vegas 均承诺把 in-flight 维持在 bdp or bdp 附近,但它们在 N 很大时却没有兑现能力,相反 aimd 就不同,即使 N 很大,md 行为却同步将 in-flight 降到远小于 bdp 处,而 bbr/vegas 没有这类自适应的 decrease 行为。

问题的核心在于,bbr/vegas 测得的 bdp 中的 b 更全局,它们依靠 “越小的流加速比越大” 来公平收敛,而加速比必须在 buffer 中获得(简单等式:buffer 占比 = 带宽占比),反之,aimd 的天然公平性意味着对每条流而言,bdp 中的 b 都是自己的,因为异步流从概率上讲,buffer_size 为 B,一条流在 in-flight 为 B 会丢包 md,N 条流就是 B / N 会丢包 md,自适应性在于除以 N,与 bbr/vegas 的 α * N 和 4 * N 相比如何。

这就是我那个 E_best 余量或 pid 逼近 E_best 试图解决的问题,为了始终在 buffer 中保存一定的报文(借鉴于 vegas)以自适应资源腾挪,又不至于 N * 余量 > buffer_size,那么该余量一定要携带负反馈缩放,N 虽对单流不可见,但可用 minrtt / rtt 间接感知:

  • 对所有流共同作用而言,minrtt / rtt 越小,buffer 被占越多,潜在流数增多,余量必须收缩;
  • 对共存流相互作用而言,bw 越大,侵占倾向越大,越需要为它流腾挪 buffer,余量必须收缩;

minrtt / rtt 实则就是 cwnd 缩放比例,这很容易理解。设瓶颈带宽为 C,当拥塞临界点到达时,Σcwndi/rtti = C,而拥塞控制的目标是将 in-flight 总量收缩到 bdp,即 C * minrtt,因此目标状态应该是 Σcwndi/minrtti = C,而共享 buffer 中 rtt 想等,从 Σcwndi/rtti = C 到 Σcwndi/minrtti = C,需要乘以一个系数 β = 1 / (minrtt/rtt) = rtt / minrtt。

既然 cwnd 如此缩放 in-flight 到 bdp,那任何比较系数都应该如此缩放,包括 vegas 系数,bbr probertt in-flight = 4,以及 E_best in-flight 余量。

如下可对 vegas 的 α,β 行为负反馈缩放。设 g(x) 为与 minrtt / rtt 正相关的参数增益函数,值域在 (0, 1),vegas 则变为 g * α < diff < g * β。同理,对 bbr probertt 状态的 in–flight = 4 亦可做 in–flight = g * 4 来缩放。然而在这种情况下,更细粒度的 cwnd 控量就是必须,当 N 很大,g 接近 0,cwnd 粒度需要切割到等同量级,cwnd += 1 显得过大,cwnd += 0.08 可能更合适。

最后,这篇短文不牵扯 dcn,不要在 dcn 部署基于时延的算法:

  • dcn 时延小,测量精度不足以过滤抖动(g 家 swift 缘由);
  • dcn buffer 小,N 太大更易爆 buffer;
  • dcn 短流多,负反馈难以生效。

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

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

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

相关文章

自定义@AnonymousAccess注解

一.目的&#xff1a; 自定义AnonymousAccess注解&#xff0c;可以直接在controller上添加该注解使请求绕过权限验证进行匿名访问&#xff0c;便于快速调用调试以及部分不需要进行安全验证的接口。而不是每次都需要去SecurityConfig文件中进行修改。 二.流程&#xff1a; 三.实…

通用后台管理(二)——项目搭建

目录 前言 一、安装vue-cli依赖 1、使用yarn下载vue-cli 2、使用npm下载 3、检查一下是否下载成功 二、创建项目 1、创建项目&#xff0c;my-app是项目名称 2、 这里选择vue 2&#xff0c;蓝色表示选中的。 3、启动项目 三、下载项目依赖 四、配置项目 1、修改esli…

VS2019_新建窗体应用文件SOP

文章目录 1. 打开VS2. 创建新项目3. 选择Windows窗体应用4. 起名&#xff0c;选位置&#xff0c;框架版本选择4.5及之后&#xff0c;这里选的4.85. 新建完成 1. 打开VS 2. 创建新项目 3. 选择Windows窗体应用 注意要选.NET的 4. 起名&#xff0c;选位置&#xff0c;框架版本…

ps aux命令详解

ps aux 是在 Unix 和 Linux 系统中常用的命令&#xff0c;用于显示当前系统上运行的所有进程的信息。它结合了多个选项来提供详细的进程列表。以下是这个命令的详细解释&#xff1a; 解释 ps aux 命令 ps&#xff1a;这是显示当前系统进程的基本命令。a&#xff1a;显示与终端…

原来Kimi不是不作为,而是在准备大招!

月之暗面Kimi 作为一款我每天都在使用的AI智能助手&#xff0c;是真正的帮助我解决了不少工作及日常创作的一些事情。 它的表现能力也是毋庸置疑&#xff0c;不论是业内还是普通人&#xff0c;10个人当中可能就有9个人在使用Kimi。 而昨天&#xff08;7月8日&#xff09;Kimi…

Civil3D 2025:工程设计的智慧之友

初识Civil3D 2025 当我第一次打开Civil3D 2025时&#xff0c;仿佛置身于湘西的山水之间&#xff0c;那种熟悉而又新奇的感觉扑面而来。Civil3D 2025不仅仅是一款软件&#xff0c;它更像是一位老友&#xff0c;带着温暖和智慧&#xff0c;陪伴我走过每一个设计的日夜。 功能丰…

侯捷C++面向对象高级编程(上)-9-扩展补充:类模板、函数模板及其他

1.static 2.把 ctors 放在 private 区 3.cout 4.class template、类模板 5.function template、函数模板 6.namespace

DDR3 SO-DIMM 内存条硬件总结(二)

上一节我们大概了解了下DDR3的大概使用情况&#xff0c;下来我们再顺藤摸瓜再深入学习下ddr3的使用&#xff0c;我们从下面这张内存条开始&#xff1a; 我们看到第二行2GB 1RX8 PC3-10600S-9-11-B2 具体含义上一节已经讲过了&#xff0c;我们深挖下1R*8&#xff0c;他的含义是…

资料分析笔记整理

提升技巧多做题、少动笔、多分析 资料分析认识 国考一般20题(24~28分钟) 统计材料的类型包括单纯的文字、表格、图形以及由这些元素组成的复合类型材料 文字性材料:(30~60秒) 多段落型文字材料(时间、关键词、结构) 孤立段落文字材料(时间、关键词、标点[。;]) 表…

Java语言程序设计——篇二(2)

Java语言基础 运算符与表达式运算符1、算术运算符2、关系运算符3、逻辑运算符&#xff08; &&、||、 !、&、| 、^&#xff09;4、位运算符&#xff08; >>、<<、>>>、&、|、^、~&#xff09;5、赋值运算符6、条件运算符7、字符串运算符8、…

数字化时代下,财务共享数据分析建设之路

随着人工智能、云计算、大数据、区块链等技术&#xff0c;以及衍生出的各种产品的大发展&#xff0c;使得数字化发展的速度再一次加快&#xff0c;也让数字经济和数字化转型得到了更多人的关注和认可。 在传统经济增长逐渐放缓&#xff0c;市场竞争愈发激烈的局面下&#xff0…

GOJS去除水印

GOJS gojs 去除水印 **查找go.js库搜索下面这段文本 String.fromCharCode(a.charCodeAt(g)^b[(b[c]b[d])%256]) 加入这段文本 if(f.indexOf(GoJS 2.1 evaluation)>-1|| f.indexOf(© 1998-2021 Northwoods Software)>-1|| f.indexOf(Not for distribution or produ…

splice方法的使用#Vue3

splice方法的使用 splice(index,len,item)是vue中对数组进行操作的方法之一&#xff0c;可以用来删除&#xff0c;更新&#xff0c;和增加数组内容 参数: index:数组下标 len&#xff1a;为1或0 item:更新或增加的内容 使用方法&#xff1a; 删除&#xff0c;当参数形式为spli…

Linux内核网络性能问题的追踪(工具篇)

在现代计算环境中&#xff0c;网络性能对于系统的整体性能至关重要。网络瓶颈不仅会影响数据传输速度&#xff0c;还会影响应用程序的响应时间&#xff0c;最终影响用户体验。为了有效地解决网络性能问题&#xff0c;了解和使用各种追踪工具至关重要。另外一方面&#xff0c;造…

MySQL批量插入数据的几种方式

最近在项目中遇到了批量插入数据的一些问题&#xff0c;一般图省事都是利用mybatis或mybatis-plus的saveBatch方法&#xff0c;但这次因为数据过多&#xff0c;出现了一系列的问题&#xff0c;只能手动处理&#xff0c;接下来分享下对于数据量比较大的批量插入&#xff0c;可能…

python的魔法方法

python类中的self是什么&#xff1f; 对象的方法都会有一个self参数&#xff0c;类比于c&#xff0c;self就相当于c的this指针。 由一个类可以生成无数个对象&#xff0c;当一个对象的方法被调用时&#xff0c;对象会讲自身的引用作为第一个参数传给该方法&#xff0c;那么pyt…

CTF-PWN-kernel-栈溢出(retuser rop pt_regs ret2dir)

文章目录 参考qwb2018 core检查逆向调试打包上传测试脚本retuserkernel ropinit_credcommit_creds( prepare_kernel_cred(0) )开启KPTI利用swapgs_restore_regs_and_return_to_usermode开启KPTI利用SIGSEGVrop设置CR3寄存器再按照没有KPTI返回 kernel rop ret2userpt_regs 构造…

2024年浙江省高考分数一分一段数据可视化

下图根据 2024 年浙江高考一分一段表绘制&#xff0c;可以看到&#xff0c;竞争最激烈的分数区间在620分到480分之间。 不过&#xff0c;浙江是考两次取最大&#xff0c;不是很有代表性。看看湖北的数据&#xff0c;580分到400分的区段都很卷。另外&#xff0c;从这个图也可以…

RTOS系统 -- FreeRTOS之任务调度

FreeRTOS中的任务调度 背景介绍 FreeRTOS是一种轻量级的实时操作系统&#xff0c;被广泛应用于嵌入式系统中。它提供了多任务管理功能&#xff0c;包括任务创建、任务调度和任务切换。FreeRTOS的调度器根据任务的优先级和状态自动调度任务&#xff0c;确保系统资源的有效利用…

独立站优势及吸引力分析

随着全球化贸易的不断深入&#xff0c;越来越多的厂商开始寻求更广阔的市场和更高效的销售渠道。独立站作为企业自有的电商网站&#xff0c;正逐渐成为海外贸易的新宠。本文将分析独立站的优势及其对厂商的吸引力&#xff0c;鼓励厂商以建立独立站的方式出海。 一、独立站的定义…