tcp bbr pacing 的对与错

前面提到 pacing 替代 burst 是大势所趋,核心原因就是摩尔定律逐渐失效,主机带宽追平交换带宽,交换机不再能轻易吸收掉主机突发,且随着视频类流量激增,又不能以大 buffer 做带宽后备。因此,主机必须 pacing。

再看一下到底什么是 bufferbloat。bufferbloat 不是一个瞬时行为,而是持续行为。举个例子就能明白。为什么中国大河流域大湖少,因为中国地形东西落差太大,百川东到海,势能足够,吞吐就够大,足以抹平任何堰塞:
在这里插入图片描述

对任何流体,特别是大突发流体,buffer 一旦填充,除非上游主动排空,buffer 很难排空,只要有填充态 buffer 就必然增加时延。一般倾向是,buffer 无论多大,若不加干涉,总会被填满。不加干涉的流体本质就是 capacity-seeking,不信你自己挖一个水平的渠道,中间某些地方加宽一点,然后从一端灌水观察一下。

aimd 只能事后解决 bufferbloat 后的可用性收敛问题,解决不了 bufferbloat 本身,即使在大流量下,统计意义上,所需 buffer 数量也和流数量的 1/2 次方成正比,而且还要配合复杂的 red aqm 等技术。

所以,解决 bufferbloat 要么下游加大带宽,要么上游减少突发。端到端标准建议是后者,即从主机开始就 pacing,而 bbr 是一个 “如何计算主机 pacing rate” 的一个实例。至于加大带宽,端到端无力干涉,未来可能会是链路并行化,而这必然导向多路径,但这是后话,本文不谈。

说到底,主机似乎必须 pacing。但这引入另一个关于 bbr 的问题:

  • 端到端的全链路是 n 跳而非 1 跳链路,而主机 pacing 只能影响第一跳 buffer 状态,但 bbr pacing 计算则基于全链路 bottleneck 带宽。

很简单的一个 use case:如果共享第一跳 a 的流 1 的 bottleneck bw 大于 流 2 的 bottleneck bw,它们都在 a 获得 bottleneck bw,而流 2 和流 3 共享最后一跳 b:
在这里插入图片描述

除非所有 bbr 一起 probe,否则 bbr 的状态机非常脆弱,它不是稳定的。bbr probe 效果并非如论文所说为探测空闲资源,现实中,在多流共享全链路场景不得已的行为,系统本身不稳定,bbr 需要不停 probe 扶正,而计算的代价非常大,这也不是算不算的准的问题,而是不得不计算,胡乱写一个 probe gain 系数都 ok,但必须做。

主机 pacing 的问题在于,一旦堆积 buffer,pacing rate 越小 buffer 占比越低,结果是获得带宽越小。交换机要考虑多流带宽复用,让交换机根据 buffer 状态和排队规则分配带宽才是正解,因为主机计算的 pacing rate 到了交换机并不算数,交换机根本无视这个 pacing rate,它是无效的。

为什么我说每条流跟踪 max(bw / rtt)->b 和 minrtt 并基于此控制自己的 inflight 是对的:

  • b * minrtt 意味着不主动堆 buffer,b 不一定最大,但 b / rtt 一定最优;
  • inflight += (minrtt / rtt) * beta 增加固定余量动态发现带宽变化,这 buffer 堆积算是动态自适应的代价;
  • (minrtt / rtt) 修正 minrtt 本身的 buffer 堆积,因为 minrtt 本身也是统计最小值,不意味着不排队。

理论上,所有流的 (minrtt / rtt) * beta 就是整个网络中所有 buffer 的和,至于每条流的 bdp 余量到底堆积在哪,由整个网络的当前状态决定,这个状态是个统计状态,本质上是概率问题,上述三点保证全网收敛,但千万别精确计算。

去掉 bbr 不合理的假设就都合理了,也变简单了。bbr 的问题在于试图在统计环境中通过计算描述一个确定状态,相当于控制风力和风向时计算每个空气分子动量,显然,只需要控制单位面积的空气分子总量和外力方向就可以了。

那主机可以不 pacing 吗,显然不可以,为了降低第一跳突发减少第一跳 bufferbloat,所有主机固定 pacing 也不是不行,比如 500mbps pacing,而不是以主机能力突发。至于后面的跳,主机控制不了,只能交换机做。如果交换机为提高出口能效,塞住出口 10ms,buffer 占有率达到一定量再批量发送,拦了一座大坝,那就谁也没办法。

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

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

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

相关文章

CentOS的简单介绍及常用命令

1、CentOS 的简单介绍: CentOS是Community Enterprise Operating System的缩写,也叫做社区企业操作系统。是企业Linux发行版领头羊Red Hat Enterprise Linux(以下称之为RHEL)的再编译版本(是一个再发行版本&#xff09…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第五套

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第五套 (共9套,有答案和解析,答案非官方,仅供参考)(共九套,每套四十个选择题) 部分题目分享,完整版获取(WX:didadida…

gazebo中vins-fusion在仿真小车上的部署

软件要求:Ubuntu 20.04 ros的noetic版本,我是在虚拟机vitrualbox上运行的 这几天在学ROS,跟着赵虚左老师过了一遍之后,感觉还是有很多不懂的地方,xtdrone上仿真跟着文档走了一遍,好像没学到什么东西&#…

【华为笔试题汇总】2024-04-17-华为春招笔试题-三语言题解(Python/Java/Cpp)

🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢&#x1f…

【计算机考研】考408,还是不考408,性价比高❓

最近刷了很多帖子都偏向408太难了不要报考 但我的看法是408是计算机的考研趋势,并且择校的选择更多,408只是科目更广泛,与自命题相比其实各有各的难度 如果觉得自己数学基础不太好,时间不太够的同学可以了解一下自命题&#xff…

nodejs模块机制

模块机制 CommonJs规范 模块引用 上下文提供require()方法来引人外部模块var math require(math) 模块定义 exports 对象用于到处当前模块中的方法和变量module代表模块自身 exports.add function() {...}在另一个模块中使用require()方法进行导入。就可以使用 区别和联系 …

电力系统卫星授时信号安全隔离装置防护方案

电力系统是国家关键基础设施, 电力安全关系国计民生, 是国家安全的重要保障, 与政治安全、经济安全、 网络安全、社会安全等诸多领域密切关联。电网运行情况瞬息万变,为了在其发生事故时能够及时得到处理,需要统一的时…

Redis中的事务(二)

事务 一个完整的WATCH事务执行过程 假设当前服务端为c10086,而数据库watched_keys字典的当前状态如图所示,那么当c10086执行以下WATCH命令之后 c10086> WATCH "name" OKwatched_keys字典将更新如图所示的状态。接下来客户端c10086继续向…

[2021最新]Java时间戳和日期时间互转换

代码: import java.text.ParseException; import java.text.SimpleDateFormat;public class MainProcess {public static void main(String[] args) throws ParseException {// 1.set formatSimpleDateFormat timeSmat new SimpleDateFormat("yyyy-MM-dd HH:…

Kubernetes中安装部署ActiveMQ集群(手把手式记录)

目录 1、创建命名空间 nacos-cluster 2、配置文件准备 2.1 activemq0.xml 2.2 activemq1.xml 2.3 activemq2.xml 3、创建configMap cm-activemq 4、创建activemq-cluster.yaml 5、执行命令部署 6、部署成功,查看结果 这里以3个borker的集群为例&#xff0…

Facade 外观

意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一字系统更加容易使用。 结构 其中: Facade知道哪些子系统负责处理请求;将客户的请求代理给适当的子系统对象。 Subsystem classes…

QGIS插件Geo-SAM使用(基于SAM半自动标注遥感图像)

0.Geo-SAM介绍 Geo-SAM是一个QGIS插件,旨在帮助人们在使用大尺寸地理空间栅格图像时有效地分割、描绘或标记地貌。Segment Anything Model (SAM) 是一个具有超能力的基础 AI 模型,但模型大小巨大,即使使用现代 GPU&am…

C++学习进阶版(一):用C++写简单的状态机实现

目录 一、基础知识 1、状态机 2、四大要素 3、描述方式 4、设计步骤 5、实现过程中需注意 (1) 状态定义 (2) 状态转换规则 (3) 输入处理 (4) 状态机的封装 (5…

Nginx第2篇-HTTPS配置教程

背景 我最近做个项目要上线,接口部署到服务器,总不能给别人个ip地址加端口吧,而且小程序上线要有接口不能是ip和http协议,必须是https协议。这里记录下使用Nginx配置HTTPS的过程,主要包含以下三部分。 申请域名SSL证…

远程预付费集抄管理系统

远程预付费集抄管理系统是一种用于能源(如水、电等)预付费管理的智能化系统,其核心在于提供远程集中抄表和费用管理服务。这种系统通过集成先进的远程监控技术和预付费管理功能,为用户提供了便捷的能源管理解决方案。下文将从核心功能、工作流程、优势特…

离世界模型更近一步!Meta开源OpenEQA,评估AI Agent情景理解能力

Yann LeCun 朝着 “世界模型” 又近了一步。 Meta最新的开源工作OpenEQA:从文字模型到世界模型,可以像人一样记忆、推理的新基准,AI理解物理空间又近了一步。 场景1: 假设你正准备离开家,但找不到你的工牌。 现在,…

5.2 iHRM人力资源 - 员工管理 - 使用文件导入导出员工

iHRM人力资源 - 员工管理 - 导入导出员工 文章目录 iHRM人力资源 - 员工管理 - 导入导出员工一、员工导出Excel二、员工导入Excel2.1 Excel导入组件封装2.2 下载导入模板2.3 Excel 导入功能 三、删除员工 一、员工导出Excel 这个地方涉及一个接口二进制流blob 就是下面这一大片…

使用嘉立创EDA打开JSON格式的PCB及原理图

一、将PCB和原理图放同一文件夹 并打包成.zip文件 二、打开嘉立创EDA并导入.zip文件 文件 -> 导入 -> 嘉立创EDA标准版/专业版 三、选择.zip文件并选择 “导入文件并提取库” 四、自定义工程路径 完成导入并转换为.eprj文件 五、视频教学 bilibili_使用立创EDA打开JSO…

香港科技大学广州|数据科学与分析学域硕博招生宣讲会—华东师范大学专场

时间:2024年4月25日(星期四)13:30 地点:华东师范大学普陀校区文附楼507 报名链接:https://www.wjx.top/vm/Q0cKTUI.aspx# 跨学科研究领域 *数据驱动的人工智能和机器学习 *统计学习和建模 工业和商业分析 *特定行业…

float实现文字环绕效果

实现效果如下: 一、问题分析 接到需求就是右侧显示图片,左侧显示一个标题和内容。第一时间没有想到其他的布局的好的实现方式,就想到了float布局。于是乎去查了下有关float的文档,float 是相当的好用。 float定义如下&#xf…