TCP 与 bufferbloat

news2024/11/16 4:34:23

说到既能降低成本,又能降低时延,总觉得这在 pr,兜售自己或卖东西。毕竟哪有这么好的事,鱼与熊掌兼得。可事实上是人们对 buffer 的理解错了才导致了这种天上掉馅饼的事发生。

人们总觉得 buffer 越大越好,buffer 越大设备越贵,真实情况是 buffer 越大越糟糕,如果按这个思路,应该是 buffer 越小设备越贵,所以你若想获得低时延,就要花更多的钱买小 buffer 的设备,这依然是一笔需要权衡轻重的买卖。

可无奈 buffer 是一样东西,它是实实在在的实物,是一种普通非稀有容器,哪有越小越贵的道理,但其实不能将 buffer 理解成容器,而要理解成调节剂,比如盐,味精等调味品,放一点刚刚好,越多越糟糕:
在这里插入图片描述
人们对好的东西支付,以上图为导向,携带 100GB buffer 的交换机肯定没有携带 100MB buffer 的交换机贵。

看个标准 TCP(std TCP) 的经典锯齿:
在这里插入图片描述
为 100% 利用有效带宽,std TCP 需要 “即使执行 MD(multiplicative-decrease) 将 cwnd 折半后依然恰好填满有效带宽”,即 Wmax = 2 * BDP,因此,buffer 的建议大小为 BDP。

如果 buffer 不足 BDP,就会出现带宽不能有效利用的情况:
在这里插入图片描述

但如果有 2 条流,第 2 条流的 cwnd 就可以补上图示中的阴影,隐约可见,流数量越多,阴影越容易弥补。另一方面,随着弥补阴影变得容易,阴影更能容忍继续扩大,而阴影的扩大意味着 buffer 减小。

进一步,设流数量为 N,N 不需无穷大,只需数值上等于 BDP 并随机异步散列,buffer 可趋向 0 仍保证带宽 100% 利用。研究表明,实际需要的 buffer 与根号 N 成反比:Bsize = 2 * BDP / N^0.5。我曾经写过一篇分析:buffer 的平方反比律。

N 越大,所需 buffer 越小,虽有悖于直觉,但也可以理解,背后的动力学是 “交互的代价”or 收益。N 越大,总带宽利用率越不受单流行为影响,整体上趋于互补。

下面是一个例子。

设 BDP = 6,单流场景,cwnd 序列为:6,7,8,9,10,11,12,buffer 大小为 12。现考虑 2 条流公平收敛后的场景,每一条流的 cwnd 序列均为:3,4,5,6。

  • 如果两条流同步,那么 cwnd1 + cwnd2 序列为:6,8,10,12,此时所需 buffer 仍然为 12。
  • 如果两条流相位差 1,cwnd 和序列为:7,9,11,9,所需 buffer 为 11,但有 1 单位 buffer 无法清空。
  • 如果两条流相位差 2,cwnd 和序列为:8,10,8,10,所需 buffer 为 10,有 2 单位 buffer 无法清空。

后面两种情况,均可既满足带宽被 100% 利用,又减少 buffer。若固定最大相差,在实数域上移动相位,就是一个抽样过程,按中心极限定理,N 越大,概率分布曲线会越高越瘦收敛于均值,瘦意味着方差小,无需照顾小概率事件,buffer 用量减少。

但填满带宽和单流吞吐是两回事。小 buffer 虽足以 N 条流一起填满总带宽,但 N 流交互的代价是单流丢包间隔缩短,丢包增加。

一般而言,交互即 capacity-seeking,所以代价来自 capacity-seeking,假设存在非 capacity-seeking 机制控制 sender 恰好分享 1 / N 带宽份额,便完美高效并完美公平,由于没有足够控制信息,这几乎不可能,因此 capacity-seeking 固有开销(这是普遍管理开销)必须接受。

当 N 很大时,要么选择高丢包高重传,要么选择大 buffer 但同时大排队时延。显然选择后者不高尚,如果频繁丢包,说明链路过载,AIMD 锯齿波只是以一种并不完美 capacity-seeking 方式保证收敛,但远非唯一方式,甚至 capacity-seeking 本身都不是唯一的带宽高效共享的方式。

L4S(Low Latency, Low Loss, and Scalable Throughput (L4S) Internet Service) 提供了一种新思路。在传统端到端视角,舍弃大 buffer 而开发更优的 cc 更智能地 capacity-seeking 相比部署大 buffer 更正确(buffer 就像盐,缺了不行,但稍微多一点就会出大问题),比如 CUBIC 和 BBR 相比 std TCP 就是很好的优化。

Internet 核心并没有选择大 buffer。如上所述,早期 Bsize = BDP 的结论被证明 在 N 很大时是不必要的,这大大降低了核心路由器对 buffer 的依赖,因为在 Internet 核心,N 一定很大。

以 100Gbps 带宽为例,早期核心路由器需覆盖 RTT 上界接近 200ms 的 BDP,需要部署大小为 2.5GB 的 buffer,但在新理论下,当 N = 10000(可能不止),只需要约 25MB 的 buffer 即可。

此外,在数据中心,另一番景象依然不允许部署大 buffer。

数据中心低时延是刚需,超高带宽是固有属性,超高带宽将灵敏响应的责任甩给了主机和交换机,100Gbps+ 带宽容不得半点抖动,留给 cc 以及 queue 的决策时间非常短,同时由于数据中心高频微突发,N 也不会小,综上,数据中心不能部署大 buffer(大概只有 3MB~10MB)。

Internet 核心和数据中心之外,还有网络边缘接入点这第三个场地,这也是最难搞的地方。经过这地方的流量没有足够大的 N,连选择的机会都没有,buffer 太小既高丢包又低带宽利用率,buffer 太大就会 bufferbloat。
要排除对 buffer 的侵占(有多少 buffer 会用多少),几乎所有的 AIMD capacity-seeking 这种对 buffer 强依赖的算法均不适合。
application-limited 流量无 capacity-seeking,但 application-limited 流量无法抗 burst:
在这里插入图片描述

所以知道 BBR 为什么要在 ProbeRTT 维持 4 个 inflight 以清空 queue 了吧,很多以百分比或盲目增加个常数(显然是嫌 4 太小了)来魔改 ProbeRTT inflight 的,歪曲了本意,基本算扯淡,但 BBR2 为流共存已经做了很大修改,它其实算混合算法,并不是真的 BBR。

但 inflight = 4 确实会带来应用抖动,增加应用 buffer 可缓解,但既然增加应用层 buffer 可容忍时延换不抖动,转发节点 bufferbloat 带来的时延为何就不可原谅呢,总之很难搞。或许 CUBIC 停留在 Wmax 更久一点,并用 pacing 缓解 burst 更好一些。

buffer 到底大了好还是小了好是一个与 “golang 和 rust 哪个更好” 截然不同的问题,即便 rust 再时兴,看不惯用不上的依然不会用,但 buffer 大了好还是小了好是一个很明确的问题,难点在于很难解释 “为什么 buffer 不能太大”,不管如何解释,都会被怀疑,“难道大 buffer 不丢包不好吗?”,很少人会去真心面对链路过载问题,很少人能接受 “慢点发送”,似乎每个人都希望将数据尽快发送出去,于是越大越好的 buffer 承载了所有希望。

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

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

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

相关文章

Maven安装教程以及修改下载镜像源等配置

第一步:下载maven(本教程安装的是3.8.4) 官方下载链接:Maven – Download Apache Maven Binary是可执行版本,已经编译好可以直接使用。 Source是源代码版本,需要自己编译成可执行软件才可使用。 我们选择…

【WSN定位】基于RSSI的加权质心定位算法【Matlab代码#14】

文章目录 1. 原始质心定位算法2. 基于RSSI的加权质心定位算法基本思想3. 基于RSSI的加权质心定位算法流程图4. 部分代码展示5. 运行结果展示6. 资源获取 1. 原始质心定位算法 可参考质心定位算法 2. 基于RSSI的加权质心定位算法基本思想 传统的质心算法在求解过程中只是将未…

Windows逆向安全(一)之基础知识(十六)

指针三 通过先前指针的学习,了解了指针和地址以及数据的关系,现在结合先前的知识继续学习巩固 指针遍历数组 有了先前的基础,再来看看如何用指针遍历数组 代码 #include "stdafx.h" void function(){short arr[5]{1,2,3,4,5};…

【ARM Coresight 4 - Rom Table 介紹】

文章目录 1.1 ROM Table1.1.1 Entry 寄存器 1.2 ROM Table 例子 1.1 ROM Table 在一个SoC中,有多个Coresight 组件,但是软件怎么去识别这些 Coresight 组件,去获取这些Coresight 组件的信息了?这个时候,就需要靠 Core…

COPU助力北大研究生开源公选课丨2023开源PostgreSQL内核开发通识课顺

COPU & Peking Univerisity 导读:2020年1月COPU(中国开源软件推进联盟)成员开会讨论面向高校的开源示范课程,由联盟副秘书长北京大学荆琦老师牵头筹备,并首先在北大软微学院试点。本次是中国PostgreSQL分会联合…

尚硅谷_宋红康_第14章_数据结构与集合源码

第14章_数据结构与集合源码 本章专题与脉络 1. 数据结构剖析 我们举一个形象的例子来理解数据结构的作用: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bgDcr8wF-1682075329317)(images/image-20220412011531879.png)] **战场&#x…

本地白嫖AI绘画 ,Stable Diffusion 初探!

本文介绍我在本地搭建 Stable Diffusion Web UI 的体验过程,予以记录分享。 Stable Diffusion 是 2022 年 8 发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像,官方项目其实并不适合新手直接使用,好在有使用 Stable …

把握数字中国建设重大契机,实在智能携手山东商业职业技术学院共建“现代金融数字化实训中心”

今年2月,中共中央、国务院印发《数字中国建设整体布局规划》(以下简称《规划》),明确了数字中国建设的整体框架,强调全面提升数字中国建设的整体性、系统性、协同性,促进数字经济和实体经济深度融合。其中&…

本地部署Stable Diffusion Webui AI 记录

Stable Diffusion Webui AI本地部署基本分为两种方式: 1、使用大佬的打包好的安装包一键部署 b站秋葉aaaki 2、手动部署(个人实践记录)参考文章 本地部署基本要求 1、 需要拥有NVIDIA显卡,GTX1060 (或者同等算力的…

CopyOnWriteArrayList简介

1. 简介 CopyOnWriteArrayList 是 ArrayList 的线程安全版本 就是在进行写操作的时候会 copy 原数组,然后写完将指针指向新的数组,是一种读写分离的思想,可以并发的读,不能并发的写 优点: 保证线程安全读取时不加锁…

基于PyQt5的图形化界面开发——自制MQTT客户端软件

基于 PyQt5 的图形化界面开发——自制MQTT客户端 0. 前言1. 第三方库的安装及注意事项2. Editor.py2.1 配置界面效果演示: 3. Publish.py3.1 消息发布界面演示 4. Subcribe.py4.1 订阅消息效果演示: 界面切换——main.py5. 写在最后 0. 前言 使用 PyQt5…

葛兰一季度规模再度跌破900亿

一季度末管理规模再度跌破900亿元,中欧基金葛兰交出了公募主动权益基金管理规模的头把交椅。 4月22日零点刚过,葛兰在管基金悉数披露2023年一季报,从管理规模来看,一季度葛兰在管5只公募基金合计规模降至844.40亿元,较…

keep-alive 和 router-view 的使用方法(Vue3)

系列文章目录 提示:主要是介绍keep-alive 和 router-view在Vue3中的使用方法,以及适用场景!!! 文章目录 系列文章目录前言:一、router-view:1. 常规使用方法2. 非常规使用方法(插槽&…

UE5语音识别和语音合成-阿里云智能语音-短视频-翻译-文章-AI角色等

UE5智能语音 哈喽,大家好,我叫人宅,很高兴和大家一起分享本套课程,阿里云智能语音UE5版本开发。阿里云智能语音一共分为 语音合成,语音识别,什么是语音合成,它可以将您的文字转化成您设定的任何…

大数据数仓维度建模

目录 维度建模分为三种: 1、星型模型: 2、雪花模型: 3、星座模型: 模型的选择: 维度表和事实表: 维度表: 维度表特性 : 事实表: 事实表特性: 事务型…

程序员能干多久?程序员能干到多大年龄?

程序员可以工作多少年?大多数程序员认为程序员是吃青春饭的工作。编程只能干到30岁,最长可达35岁。我经常听到这样的话,都让人倍感压力。今天,我们来谈谈这个老话题...... 程序员能干多久? 根据国外的经验来说,干到…

ChatGPT 基础使用方法

文章目录 1. ChatGPT 是下一代搜索引擎2. ChatGPT 是学习助手3. ChatGPT API 简介4. ChatGPT API 身份5. 开发痛点6. 机会与前景7. Images8. Audio 1. ChatGPT 是下一代搜索引擎 根据 3 月份对 ChatGPT 的使用,我对它的理解是下一代的搜索引擎,即能够根…

【社区图书馆】读《大话数据结构溢彩加强版》

目录 书中简介: 选读原因 本书内容有哪些: 学会了什么: 书中简介: 《大话数据结构【溢彩加强版】》以一个计算机教师的教学过程为场景,讲解数据结构和相关算法的知识。全书以趣味方式来叙述,大量引用各…

无公网IP,外网远程连接MySQL数据库

哈喽~大家好,这篇来看看无公网IP,外网远程连接MySQL数据库。 文章目录 前言1. 检查mysql安装状态2. 安装配置cpolar内网穿透3. 创建tcp隧道,映射3306端口4. 公网远程连接4.1 图形化界面4.2 使用命令行远程连接 5. 配置固定tcp端口地址5.1 保留…

「计算机控制系统」6. 直接设计法

特殊类型系统的最小拍无差设计 一般系统的最小拍无差设计 最小拍控制器的工程化改进 Dahlin算法 文章目录 特殊类型系统的最小拍无差设计理论分析典型输入函数的最小拍无差系统 一般系统的最小拍无差设计有波纹最小拍无差设计无波纹最小拍无差设计 最小拍控制器的工程化改进针对…