当前位置: 首页 > news >正文

BBR 为什么没有替代 CUBIC 成为 Linux 内核缺省算法

自 2017 年底 bbr 发布以来,随着媒体的宣讲,各大站点陆续部署 bbr,很多网友不禁问,bbr 这么好,为什么不替代 cubic 成为 linux 的缺省算法。仅仅因为它尚未标准化?这么好的算法又为什么没被标准化?

首先,如何定义 “好”。包括我自己在内的几乎所有人都用过一种错误方法度量 bbr 的 “好”:搭建一跳转发的模拟环境,用 tc 配置丢包,时延,用 iperf 对比 bbr 和 cubic,得到结论,bbr 的吞吐比 cubic 大好多倍,所以 bbr 好。幸运的是,我很快意识到错误并改正,但直到现在很多领域专家(自诩的专家,实际上只是经理)仍在用 tc + iperf 验证 bbr。

通过下面一篇文章可继续领略什么是 “好”:Evaluating BBRv2 on the Dropbox Edge Network

bbr 是个拥塞控制算法,它的部署环境是统计复用的去中心分布式网络,任何一种拥塞控制算法在部署之前都要至少自证两件事:

  • 不会引发拥塞崩溃;
  • 网络流量公平收敛。

正如你所见,这是最小约束。不必要求一个算法可以解决拥塞,但求不添乱。这很容易理解,如果一个算法没用,自然选择会淘汰它,但一个算法有副作用,便会带来灾难。很遗憾,bbr 一个也证明不了。

bbr 的正确性依赖高精度的准确的对 bandwidth 和 rtt 的测量,而高精度取决于实现,准确性则依赖网络本身。我频繁啰嗦的那句 “统计复用网络本身不可精确测量” 不管你信不信它就是无法精确测量,异构性只是最不重要的方面,不可测量的核心来自于统计律本身,正如你无法把握某个空气分子的动量但却能测量一坨空气的温度一样。

统计律只能按统计的方法来,而任何统计方法都有滞后性,对反馈响应之前的这段时间可能就是灾难酝酿的时间,而随后的响应并不覆盖灾难,系统可能滑向不稳定状态,这种不稳定状态包括拥塞崩溃。不管 bbr 官方的论述还是我个人所做的仿真,大前提都是网络可精确测量,这显然把最难的部分绕过去了。

反过来看看 cubic。cubic 无疑是最小依赖的,仅依赖丢包事件。如范雅各布森所说,任何主动的显式机制都可能被误用,但丢包不会。如果有一种显式拥塞通知机制,但它故障了,发生拥塞时并没发出通知,网络就可能崩溃,然而丢包就是丢包,任何行为都无法做到 buffer 溢出而不丢包,你能谎称丢包,但结果还是收敛。

cubic 的误判对拥塞属反向激励,对拥塞的反应 “宁可错杀,但绝不遗漏”,但 bbr 对带宽的过估或低估带来的结果将不可控。看一个 bbr 双流相图:
在这里插入图片描述

如图所示,请问 4 怎么画?4 的位置取决于你对系统的测量结果。为什么说误估导致的行为不可控?

bbr 本身是个非线性系统,不能用线性的思维去简单表达,换句话说,这件事本身就凌乱复杂,没有简单到能让人快速画线获得直感的方法。而衍自 reno 的 cubic 则是线性的,线性可叠加性让系统问题变得和单体问题一样可控,不管是同步流还是异步流。

大道至简,最小依赖,少即是多,这是 cubic 作为缺省算法的理由:

  • 缺省算法不一定甚至一定不是性能最高的,但一定是普适不挑环境的;
  • 缺省算法的公平性一定是可自证的,无论与自身还是与异构流量共存;
  • 缺省算法的收敛速度一定是可预期的,线性系统最符合这个期望;
  • 缺省算法一定是稳定的,没有任何正反馈可将系统带到崩溃状态;
  • 缺省算法一定经历了广泛使用和长期验证,具备设备兼容性;
  • 缺省算法一定是保守的。

bbr 属于特定网络场景的优化算法,如果在稳定的长肥管道,bbr 无疑是福音,但在抖动不受控的网络环境比如无线场景,bbr 就不如预期,甚至无法预期。

bbr 属于 1988 算法后的一个新路子,为应对 buffer 增长给出的负向反馈。bbr1 首先用激进的方式应对,它只是个 demo,能进 linux 内核但进不了 rfc,bbr2 开始考虑公平性和保守性,只要这样才会使 bbr 具备普遍性而被标准化,但迭代到 bbr3 的状态依然停留在 draft BBR Congestion Control。

虽然 bbr 在某些情况下表现优异,它没有取代 cubic 的原因主要是在于标准化,稳定性,成熟度,兼容性,以及网络环境的多样性等因素。随着 bbr 的发展和进一步的优化,可能有机会在更多系统中被采用。

而在 l4s 已被标准化的今天,bbr 可能真的只是一个引子。谁说 aimd 不能做高带宽低时延,配合 ecn 就行,aimd + ecn 是多么的简单,线性可控。

但 linux 内核早被各厂经理污染,妹忒内儿卷客大行其道,如果哪天来自某大厂的经理妹忒内儿力排众议非要把 bbr 设置为 linux 内核的缺省算法,也是说不准的事。

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

相关文章:

BBR 为什么没有替代 CUBIC 成为 Linux 内核缺省算法

自 2017 年底 bbr 发布以来,随着媒体的宣讲,各大站点陆续部署 bbr,很多网友不禁问,bbr 这么好,为什么不替代 cubic 成为 linux 的缺省算法。仅仅因为它尚未标准化?这么好的算法又为什么没被标准化&#xff…...

Git忽略规则原理和.gitignore文件不生效的原因和解决办法

在使用Git进行版本控制时,.gitignore文件扮演着至关重要的角色。它允许我们指定哪些文件或目录应该被Git忽略,从而避免将不必要的文件(如日志文件、编译产物等)纳入版本控制中。然而,在实际使用过程中,有时…...

MySQL-数据库设计

1.范式 数据库的范式是⼀组规则。在设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数 据库,这些不同的规范要求被称为不同的范式。 关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(…...

Unity开发绘画板——04.笔刷大小调节

笔刷大小调节 上面的代码中其实我们已经提供了笔刷大小的字段,即brushSize,现在只需要将该字段和界面中的Slider绑定即可,Slider值的范围我们设置为1~20 代码中只需要做如下改动: public Slider brushSizeSlider; //控制笔刷大…...

./mnt/container_run_medium.sh

#!/bin/bash# 清理旧的日志文件 rm -f *.log rm -f nohup.out rm -f cssd.dat# 启动 pwbox_simu 和 MediumBoxBase nohup /mnt/simutools/pwbox_simu /mnt/simutools/pw_box.conf > /dev/null 2>&1 & nohup /mnt/mediumSimu/MediumBoxBase /mnt/mediumSimu/hynn_…...

数学建模研赛总结

目录 前言进度问题四分析问题五分析数模论文经验分享总结 前言 本文为博主数学建模比赛第五天的内容记录,希望所写的一些内容能够对大家有所帮助,不足之处欢迎大家批评指正🤝🤝🤝 进度 今天已经是最后一天了&#xf…...

通信工程学习:什么是TCF技术控制设施

TCF(Technical Control Facility):技术控制设施 首先,需要明确的是,通信工程是一门涉及电子科学与技术、信息与通信工程和光学工程学科领域的基础理论、工程设计及系统实现技术的学科。它主要关注通信过程中的信息传输…...

stm32 bootloader跳转程序设计

文章目录 1、bootloader跳转程序设计&#xff08;1&#xff09;跳转程序&#xff08;2&#xff09;、app程序中需要注意<1>、在keil中ROM起始地址和分配的空间大小<2>、在system_stm32f4xx.c中设置VECT_TAB_OFFSET为需要偏移的地址<3>、main函数中使能中断 总…...

科技赋能环保:静电与光解技术在油烟净化中的卓越应用

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 随着环保政策的不断升级&#xff0c;餐饮行业的油烟治理成为重要课题。油烟净化器的技术革新不仅提升了净化效率&#xff0c;…...

FCA-FineBI试卷答案

1、【判断题】FineBI数据加工建模中只支持文本、数值、日期三种数据类型。 正确答案&#xff1a;A A. 正确 B. 错误 2、【判断题】Excel 支持批量导入&#xff0c;可以一次导入多个 sheet 或 Excel&#xff1f; 正确答案&#xff1a;A A.正确 B. 错误 3、【判断题】FineBI V6.…...

Spring - @Import注解

文章目录 基本用法源码分析ConfigurationClassPostProcessorConfigurationClass SourceClassgetImportsprocessImports处理 ImportSelectorImportSelector 接口DeferredImportSelector 处理 ImportBeanDefinitionRegistrarImportBeanDefinitionRegistrar 接口 处理Configuratio…...

新能源汽车储充机器人:能源高效与智能调度

新能源汽车储充机器人&#xff1a;开启能源高效利用与智能调度的未来之门 随着全球能源危机的日益加剧和环境污染问题的不断恶化&#xff0c;新能源汽车成为了未来交通领域的重要发展方向。然而&#xff0c;新能源汽车的普及不仅需要解决电池技术的瓶颈&#xff0c;还需要构建一…...

【Linux网络】详解TCP协议(2)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux网络 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 TCP协议的三次握手和四次挥手 的相关内容。 如果看到最后您觉得…...

STM32DMA学习日记

STM32 DMA学习日记 写于2024/9/28晚 文章目录 STM32 DMA学习日记1. DMA简介2. I/O方式2.1 程序查询方式2.2 程序中断方式2.3 DMA方式 3.DMA框图4. 相关寄存器4.1 DMA中断状态寄存器&#xff08;DMA_ISR&#xff09;4.2 DMA中断标志清除寄存器&#xff08;DMA_IFCR&#xff09;…...

【高性能内存池】page cache 5

page cache 1 page cache的框架2 central cache从page cache申请n页span的过程3 page cache 的结构3.1 page cache类框架3.2 central cache向page cache申请span3.3 获取k页的span page cache的结构和central cache是一样的&#xff0c;都是哈希桶的结构&#xff0c;并且挂载的…...

Vue 3 魔法揭秘:CSS 解析与 scoped 背后的奇幻之旅

文章目录 一、背景二、源码分析transformMain 返回值transformStyle 方法compileStyleAsync 方法scopedPlugin 方法template 添加 __scopeId 三、总结 一、背景 Vue 3 文件编译流程详解与 Babel 的使用 上文分析了 vue3 的编译过程&#xff0c;但是在对其中样式的解析遗留了一…...

如何获取钉钉webhook

第一步打开钉钉并登录 第二步创建团队 并且 添加自定义 机器人 即可获取webhook...

网页WebRTC电话和软电话哪个好用?

关于WebRTC电话与软件电话哪个更好用&#xff0c;这实际上取决于多个因素&#xff0c;并没有一个绝对的答案。不过&#xff0c;我可以根据WebRTC技术的一些特点&#xff0c;以及与传统软件电话相比的优劣势&#xff0c;为你提供一个清晰的对比。 首先&#xff0c;让我们了解一下…...

MySQL Mail服务器集成:如何配置发送邮件?

MySQL Mail插件使用指南&#xff1f;怎么优化 MySQL发邮件性能&#xff1f; MySQL Mail服务器的集成&#xff0c;使得数据库可以直接触发邮件发送&#xff0c;极大地简化了应用架构。AokSend将详细介绍如何配置MySQL Mail服务器&#xff0c;以实现邮件发送功能。 MySQL Mail&…...

【Rockchip系列】官方函数:imcopy

imcopy 函数原型 IM_STATUS imcopy(const rga_buffer_t src,rga_buffer_t dst,int sync 1,int *release_fence_fd NULL);功能说明 imcopy函数用于执行单次快速图像拷贝操作&#xff0c;将图像从源缓冲区拷贝到目标缓冲区。 参数说明 参数描述src[必填] 源图像缓冲区&…...

AceMenu:嵌入式轻量级菜单框架设计与实践

1. AceMenu 库概述&#xff1a;面向嵌入式人机交互的轻量级菜单框架AceMenu 是一个专为资源受限嵌入式系统设计的轻量级、可移植菜单管理库。其核心设计哲学是“以最少的硬件资源开销&#xff0c;实现最直观的用户导航体验”。不同于通用 GUI 框架&#xff08;如 LVGL 或 Touch…...

手把手教你用kafka-storage.sh重新格式化Kafka KRaft集群数据目录(解决No meta.properties报错)

深入解析Kafka KRaft模式下数据目录重构与集群恢复实战指南 当你在深夜收到Kafka集群告警&#xff0c;发现所有节点因No meta.properties报错而集体罢工时&#xff0c;那种头皮发麻的感觉我太熟悉了。去年双十一大促前夜&#xff0c;我们因为临时调整存储路径而遭遇类似问题&am…...

好用还专业!2026 降AIGC平台测评:工具对比+最好用AI推荐

2026年真正好用的AI论文降重与改写工具&#xff0c;核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

对抗训练新玩法:用AdverIN攻击自己反而提升医学分割模型20%泛化性

医学影像分割的对抗训练革命&#xff1a;AdverIN如何让模型在新设备上表现更优 医学影像分析领域正面临一个尴尬的现实&#xff1a;实验室里表现优异的深度学习模型&#xff0c;在真实临床环境中常常"水土不服"。不同医院使用的扫描设备、成像协议差异导致的域偏移&a…...

实测2-5分钟:CogVideoX-2b生成速度与画质平衡的真实体验报告

实测2-5分钟&#xff1a;CogVideoX-2b生成速度与画质平衡的真实体验报告 1. 从文字到视频&#xff1a;CogVideoX-2b能做什么&#xff1f; 想象一下&#xff0c;你只需要输入一段文字描述&#xff0c;就能在几分钟内获得一段6秒的高清视频。这不是科幻电影里的场景&#xff0c…...

魔兽世界游戏插件开发从入门到实战:工具详解与效率提升指南

魔兽世界游戏插件开发从入门到实战&#xff1a;工具详解与效率提升指南 【免费下载链接】wow_api Documents of wow API -- 魔兽世界API资料以及宏工具 项目地址: https://gitcode.com/gh_mirrors/wo/wow_api 作为魔兽世界玩家&#xff0c;你是否曾想过通过自定义插件提…...

【GNSS定位原理及算法杂记2】GNSS观测量:从捕获到解算,揭秘接收机内部信号处理链路

1. GNSS观测量&#xff1a;定位技术的三大支柱 当你打开手机地图查看自己的位置时&#xff0c;背后是GNSS接收机在默默工作。它通过处理来自太空卫星的信号&#xff0c;最终计算出你所在的位置。这个过程中最关键的就是三种观测量&#xff1a;伪距、载波相位和多普勒频移。这三…...

Element React:构建企业级UI的React组件解决方案

Element React&#xff1a;构建企业级UI的React组件解决方案 【免费下载链接】element-react Element UI 项目地址: https://gitcode.com/gh_mirrors/el/element-react 作为React开发者&#xff0c;你是否曾为UI组件的一致性和开发效率而困扰&#xff1f;Element React作…...

ChezScheme测试性能优化:从53分钟到8分钟的效率跃迁

ChezScheme测试性能优化&#xff1a;从53分钟到8分钟的效率跃迁 【免费下载链接】ChezScheme Chez Scheme 项目地址: https://gitcode.com/gh_mirrors/ch/ChezScheme 一、痛点分析&#xff1a;串行测试的性能瓶颈 识别测试效率问题 在软件开发迭代过程中&#xff0c;…...

RTX 4090D专属PyTorch 2.8镜像:支持torch.distributed多卡训练教程

RTX 4090D专属PyTorch 2.8镜像&#xff1a;支持torch.distributed多卡训练教程 1. 镜像环境介绍 1.1 硬件与软件配置 这个专为RTX 4090D优化的PyTorch 2.8镜像提供了完整的深度学习训练环境&#xff0c;主要配置包括&#xff1a; 显卡支持&#xff1a;专为RTX 4090D 24GB显…...