揭露 bbr 的真相

news2024/11/28 10:37:47

信 bbr 的伙计们,我又要泼冷水了,哈哈。

从先 bbr 的海报开始,相信大家也是被它唬住的:
在这里插入图片描述

注意横坐标标度是对数,这就凸显了优势。

把它展开到自然数坐标,再把其它对照画在一个坐标系里,在此之前,须知的前置知识是 aimd 算法的吞吐与丢包率的关系(正好是上图的红线):
T = α 1 R T T 1 p T=\alpha\dfrac{1}{RTT}\sqrt{\dfrac{1}{p}} T=αRTT1p1
重画上图如下图所示:
在这里插入图片描述

可见,bbr 只是 pixie 的变体,而 cycle_len = 2 也只是柔和版的 pixie:如果将 cycle_len 和 filter_win 缩小到 2,bbr 就是一个每次以 5/4 增益发包的 pixie 算法,如果 cycle_len 恢复为 8,它就是每 8 周期以 5/4 增益发包,期间保持 maxbw 的 pixie 算法,cycle_len 越大,对 rtt 变化越迟钝。

丝毫看不出 bbr 有 “拥塞控制” 含义。过了这么多年,那张抗 20% 丢包的海报不值得推荐。无论抗随机丢包,还是抗拥塞丢包,都是保带宽,只会加剧拥塞。详情参见:bbr 真的抗丢包吗。

拥塞多由突发导致,多数转瞬即逝,至少不恒久持续,拥塞发生时的高响应度很重要,但 bbr 对时延不敏感,做不到高响应度。

分析 pixie(记住 bbr 只是柔和版 pixie) 算法,pacing_rate = deliver_rate / (1 - p) 旨在用超量发送弥补丢包损耗,只为保带宽,但多发出的包依丢包率 p 是要丢掉的,此发送能耗为保带宽而浪费了,在丢包点上游,多余流量反而加剧拥塞,此举从头到尾接近无用功甚至净损耗。

现在来看 aimd(以 cubic 为例),给定丢包率 p,吞吐 T 一一对应,T 和 p 相互依赖,这才能构成稳定的拥塞控制基础,不像 bbr 和 pixie,T 由 发送行为决定,发得越多,吞吐越大,很容易跑飞。

注意到 cubic 的 T-p 曲线下凸,随 p 增加,T 降低变慢,注意到丢包率 p 由 buffer 大小决定,buffer 越大,p 越小,这又引出 cubic 和 bbr 对 buffer 依赖的不同风格。

从 n 条流完全同步和 n 条流完全异步作为两个极端分析。

对于 cubic/aimd,给定 p,n 条流总吞吐 T(n) 在完全异步(单流丢包率 p)时的 T ( n ) = n ∗ p − 0.5 T(n)=n*p^{-0.5} T(n)=np0.5和完全同步(单流丢包率 n*p)时的 T ( n ) = n ∗ ( n p ) − 0.5 = n ∗ p − 0.5 T(n)=n*(np)^{-0.5}=\sqrt{n}*p^{-0.5} T(n)=n(np)0.5=n p0.5之间,上凸意味着收敛,随 bw,n 增加,所需 buffer 虽可能(仅n增加,buffer 甚至可以减少)也增加,但增速相比 bw 和 n 而言更慢。详见 交换机平方反比律,主要是引用的这篇论文:Sizing Router Buffers。

再看 bbr/pixie,给定 p,n 条流总吞吐 T(n) 在完全异步时的 T ( n ) = 1 1 − p T(n)=\dfrac{1}{1-p} T(n)=1p1和完全同步时的 T ( n ) = 1 1 − n p T(n)=\dfrac{1}{1-np} T(n)=1np1之间,下凸意味着发散,随着 bw,n 增加,所需 buffer 越大,bbr 限制 cwnd 作为 secondary controller 基于此。

但随网络规模扩大,n 必然增加。

把上面的画成图看一下(原始推导采用高斯分布定量计算,不太直观,我这里采用凸凹性定性分析):
在这里插入图片描述

再重复,bbr 就是一个温和版的 pixie。

改进?还是要回到 aimd,正如 bbr2,bbr3 所做的。增加灵敏度也是必须的,哪个拥塞能持续配置参数那么久还不介入,所以还是我那个自适应 maxfilter win 沾边儿:提高 bbr 灵敏性,也不能光感知下降而不弥补上升,参见这篇:bbr2 cruise 阶段的 inflight 补偿。

说白了,bbr 就像是猜硬币正反时为了更精确而引入了地转偏向力,最后其实还不如猜 50%,于是 bbr 最终也还是回归了 aimd。

如果你想让吞吐表现得良好,又不想用 pixie,那么请用 bbr1,而不是 bbr2,bbr3,因为后面这两个是做拥塞控制的,bbr1 是做传输加速的。

最后说说如何测试。

如果你没有真实环境而非要用 Linux tc 工具模拟,千万不要再用 netem loss random 1%,netem loss 1%,这种随机丢包只能应付一下经理,一定要用 4-state markov,它的配置如下:

tc qdisc add dev eth0 root netem loss state $p13 $p31 $p32 $p23 $p14

其中状态 1,2,3,4 分别为:
在这里插入图片描述

这就能更逼真地模拟实际中的突发拥塞丢包和随机噪声丢包交错对 cc 的影响了,而 cc 的表现更加不同。

此外,用 iperf3 而不是 iperf,观察 Retr 就能估算重传率和丢包率了。

皮鞋没有蹬上,露着白袜子。

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

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

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

相关文章

qt使用AES加密、解密字符串

一、AES算法 AES (Advanced Encryption Standard) 是一种对称加密算法,是目前被广泛使用的数据加密标准之一。该算法旨在取代DES (Data Encryption Standard) 算法。AES最初由比利时密码学家 Joan Daemen 和 Vincent Rijmen 提出,经过多年的演化、改进和…

Sqlite安装配置及使用

一、下载SQLite Sqlite官网 我下载的是3370000版本:sqlite-dll-win64-x64-3370000.zip 和 sqlite-tools-win32-x86-3370000.zip 二、解压下载的两个压缩包 三、配置环境 四、检查是否安装配置成功 winR:输入cmd调出命令窗口,输入sqlite3后回车查看s…

2023年咸阳市《网络建设与运维》赛题解析------四、安全配置

安全配置 说明:IP地址按照题目给定的顺序用“ip/mask”表示,IPv4 any地址用0.0.0.0/0,IPv6 any地址用::/0,禁止用地址条目,否则按零分处理。 1.FW1配置IPv4 nat,实现集团产品1段IPv4访问Internet IPv4,转换ip/mask为200.200.200.16/28,保证每一个源IP产生的所有会话将…

Python 如何实现外观设计模式?什么是 Facade 外观设计模式?Python 设计模式示例代码

什么是(Facade)外观设计模式? 外观(Facade)设计模式是一种结构型设计模式,它提供了一个简化复杂系统接口的高级接口,使得系统更容易使用。外观模式通过定义一个高层接口,隐藏了系统…

花 200 元测试 1300 个实时数据同步任务

背景 对于将数据作为重要生产资料的公司来说,超大规模的数据迁移同步系统( 1k、5k、10k 条同步任务)是刚需。 本文以此为出发点,介绍近期 CloudCanal 所做的一个容量测试:在单个 CloudCanal 集群上创建 1300 实时任务,验证系统是…

2023年中国逆流式冷却塔性能特点、应用领域及市场规模分析[图]

按冷却塔热交换时气流和水流方向不同的配置,机力通风冷却塔又可分为横流式冷却塔、逆流式冷却塔,目前主流的冷却塔型式为逆流式冷却塔,逆流式冷却塔(counterflowcoolingtower)是指水流在塔内垂直落下,气流方…

思维导图软件 Xmind mac中文版特点介绍

XMind 2022 mac是一款思维导图软件,可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型:XMind提供了多种类型的导图,如鱼骨图、树形图、机构图等,可以满足不同用户的需求。 - 强大的功能和工具&…

扩散模型实战(十):Stable Diffusion文本条件生成图像大模型

推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四&#xff…

(免费领源码)基于Vue+Node.js的宠物领养网站的设计与开发83352-计算机毕业设计项目选题推荐

摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,宠物领养网站的…

User parameters自定义用户参数 (zabbix监控)

1、介绍和用法 ① 介绍 自定义用户参数,也就是自定义key 有时,你可能想要运行一个代理检查,而不是Zabbix的预定义 你可以编写一个命令来检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数中…

m1 rvm install 3.0.0 Error running ‘__rvm_make -j8‘

在使用M1 在安装cocopods 前时,安装 rvm install 3.0.0遇到 rvm install 3.0.0 Error running __rvm_make -j8 备注: 该图片是借用其他博客图片,因为我的环境解决完没有保留之前错误信息。 解决方法如下: 1. brew uninstall --ignore-depe…

物理驱动深度学习方法总结

一、物理驱动深度学习方法总结 现有博主更新物理驱动深度学方法总体介绍 二、 PINN介绍 PINN综述Blog介绍:内嵌物理知识神经网络 (Physics Informed Neural Network,简称PINN) 是一种科学机器在传统数值领域的应用方法&…

【C++学习手札】模拟实现string

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:缶ビール—みゆな 0:41━━━━━━️💟──────── 2:52 🔄 ◀️ ⏸ ▶️ ☰ &…

[模版总结] - 树的基本算法2 - BST

BST定义 BST - Binary Search Tree, 即二叉搜索树(有序二叉树) 特性 中序遍历有序查找/插入/删除某个数值可以通过 即树的高度,最优,最坏 . 有多种改进BST可以动态维持插入删除后树结构能尽可能保持平衡 BST基本操作 查询 - 二分查找 搜索数值 - 二分法 class…

JTS: 25 Index 索引

文章目录 版本代码 版本 org.locationtech.jts:jts-core:1.19.0 链接: github 代码 package pers.stu.index;import org.locationtech.jts.geom.*; import org.locationtech.jts.index.hprtree.HPRtree; import org.locationtech.jts.index.quadtree.Quadtree; import org.lo…

【MySQL8】1130 - Host ‘***‘ is not allowed to connect to this MySOL server

问题描述 使用 Navicat 连接 MySQL8 报错: 1130 - Host *** is not allowed to connect to this MySOL server解决方案 use mysql;select host ,user from user; -- 将 root 用户的主机(host)值修改为 %,即允许从任何主机连接 …

电脑集中管理软件有哪些?电脑集中管控怎么做

电脑集中管理软件有哪些?电脑集中管控怎么做 电脑集中管理软件是指通过一种软件或系统,对多台电脑进行集中管理和控制的工具。这种软件通常具备远程控制、软硬件监控、自动部署等功能。可以方便企业或组织统一管理电脑资源,提高工作效率。今…

新版软考高项试题分析精选(四)

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 1、一般而言,大型软件系统中实现数据压缩功能,工作在OSI参考模型的( )。 A.应用层 B.表示层 C.会话层 D.网络层…

Odoo 15开发手册第七章 记录集 - 使用模型数据

在前面的章节中,我们概览了模型创建以及如何向模型加载数据。现在我们已有数据模型和相关数据,是时候学习如何编程与其进行交互了。 业务应用需要业务逻辑来计算数据、执行验证或自动化操作。Odoo框架API为开发者提供了工具用于实现这种业务逻辑。大多数…

有Mac或无Mac电脑通用的获取安卓公钥的方案

从2023年9月开始,所有上架应用市场的app都需要进行APP备案。 其中后端服务器在阿里云的可以在阿里云备案,后端服务器在腾讯云的可以在腾讯云备案。但无论你是在什么云厂商里做备案,无一例外的是,无论是上架安卓应用还是上架IOS应…