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

从 BBR 失速到带宽探测

看一下 pacing 流失速的成因:
在这里插入图片描述

一段时间收不到 ack,丢了 ack 自时钟,cwnd 将耗尽,bbr 虽有 cwnd_gain(上图没有表现),但在该 cwnd_gain 下不依赖 ack 持续坚持发送多久取决于 cwnd_gain 的数值。

bbr 失速的后果在于它是 pacing 流,即使收到了迟到但正常的 ack,sender 也无法 burst 发送失速期间挤压的数据,bbr 依然按照 pacing_gain * max-win-filtered bw 生成 pacing rate:
在这里插入图片描述

考虑到现网环境中 delayed ack,聚合 ack,ack 丢失,lro/gro 很常见,bbr 引入 extra_cwnd 作为 cwnd 的动态补偿缓解失速问题,bbr pacing 流理论上耗尽 cwnd 时,仍有 extra_cwnd 可作为继续发送的配额:
在这里插入图片描述

这种动态自适应解决了盲目静态增加 cwnd_gain 削弱限制 inflight 初衷带来 shallow buffer 下的高丢包问题。

问题是如何在理论上失速的那一刻知道未来的 extra_cwnd,这是在预测未来。常规的方法是 “用历史预测未来”,无论保持一个 round-win-filter 还是移动指数平均(EWMA)均可,用曾经的 extra_cwnd 经过运算得到当前 extra_cwnd,即 cwnd = cwnd + extra_cwnd。

这似乎是解决失速问题的唯一方式。

为什么收到迟到但正常的 ack 后立即执行 probe up 为什么不行呢?如图所示:
在这里插入图片描述

bbr 是精确调制的 pacing 流,除非有空闲带宽资源出让,probe up 的结果无论理论上还是实际中都不好。理论上,迟到但正常的 ack 是下行链路的独立问题,如果当前记忆中稳定的 bw 恰好合适,上行链路 probe up 行为会造成 queuing,接下来的 drain to target 将回滚掉 probe up 的结果,相当于 probe up 做无用功,在现实的多流共存场景,probe up 行为一定会挤占些 bw 出来,伤害公平性。

ack 是 TCP(and QUIC) 本身属性,它的行为不应作为 bbr 状态机转换的驱动因素,但路径属性的变化却可以,比如 minrtt 改变后就适合立即进行 probe up:
在这里插入图片描述
下面的内容为独立但相关的新内容。

无论 extra_cwnd or 是否检测到更小的 rtt 后立即 probe up,均涉及启发判断是否准确,无论过估的 extra_cwnd 还是在不该 probe up 时 probe up,误判代价均是丢包增加。而提高判断的准确性需要更多的 “微观知识”,这意味着算法需要捕捉更多的细节。

比如,算法是否能捕捉下面的细节呢:
在这里插入图片描述

聚合 ack 典型的模式(更陡峭些,但图示为了表达意思,缓和了),显然这种情况下要在一个更长的周期计算 extra_cwnd,rtt 变化快但不必频繁 probe up。问题是如何精确捕捉到这种 “模式”,TCP 自身并没有甄别出这种模式所需的 “知识”。

另一方面,确实只需要遵守一个大原则,而不是精确刻画微观。就像足球,每一场比赛从每一个细节上看是完全随机的,但结果很大程度上却是可预测的,这是既精确又模糊的艺术。但若仅考虑统计特征,显然这些微观细节必然会被湮没,这本身就是一对矛盾。

在 rtt 测量方法 中,我展示的方法或许能解决这个问题,这更像一种基于神经网络的机器学习方法,模型训练好了,链路画像自然就明确了,至于微观细节也就无需再关注,就像 chatgpt 的 “原理”,没人知道 why,但事实上它就是能写出像人写的文本,这本事是涌现出来的。

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

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

相关文章:

从 BBR 失速到带宽探测

看一下 pacing 流失速的成因: 一段时间收不到 ack,丢了 ack 自时钟,cwnd 将耗尽,bbr 虽有 cwnd_gain(上图没有表现),但在该 cwnd_gain 下不依赖 ack 持续坚持发送多久取决于 cwnd_gain 的数值。 bbr 失速的后果在于…...

MobaXterm使用sz/rz命令下载上传文件

MobaXterm使用sz/rz命令下载上传文件 1 参考文档2 下载3 上传 1 参考文档 MobaXterm使用sz/rz命令下载上传文件 2 下载 步骤1:sz filename 步骤2:ctrl 鼠标右键 步骤3:Receive file using Z-modem 3 上传 步骤1:rz 步骤2&am…...

vue el-popover hover延时触发,el-popover 鼠标放上三秒以后触发

背景&#xff1a;el-popover hover只要鼠标刮过就显示 多个el-popover出现加载卡顿 解决方案 给el-popover加一个延时显示 <template><div><el-popovertrigger"hover":open-delay"3000"content"这是一个Popover"><button…...

计算机竞赛 基于深度学习的人脸识别系统

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…...

Android扫码连接WIFI实现

0&#xff0c;目标 APP中实现扫WIFI分享码自动连接WIFI功能 1&#xff0c;前提条件 设备需要有个扫码器&#xff08;摄像头拍照识别也行&#xff09;&#xff0c;APP调用扫码器读取WIFI连接分享码。 2&#xff0c;增加权限 在AndroidManifest.xml中增加权限 <uses-permissi…...

TrOCR – 基于 Transformer 的 OCR 入门指南

多年来,光学字符识别 (OCR) 出现了多项创新。它对零售、医疗保健、银行和许多其他行业的影响是巨大的。尽管有着悠久的历史和多种最先进的模型,研究人员仍在不断创新。与深度学习的许多其他领域一样,OCR 也看到了变压器神经网络的重要性和影响。如今,我们拥有像TrOCR(Tran…...

MAC终端美化

先看看效果&#xff1a; 1.安装on-my-zsh 打开终端&#xff0c;输出&#xff1a; sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"安装过程中如果出现了链接超时的错误&#xff0c;不要慌&#xff0c;就再来一次&#x…...

Matlab常用字符串操作教程

Matlab是一种功能强大的编程语言&#xff0c;它提供了丰富的字符串操作函数。在本教程中&#xff0c;我们将介绍一些常用的Matlab字符串操作函数和用法。 字符串的创建和访问&#xff1a; 使用单引号或双引号创建字符串&#xff1a;str Hello World; 或 str "Hello Worl…...

基于SSM的汽车养护管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

Redis发布订阅机制学习

【IT老齐151】Redis发布订阅机制是如何实现的&#xff1f;_哔哩哔哩_bilibili go-redis的发布与订阅 - 知乎 (zhihu.com) 前置&#xff1a; 先输入 redis-server.exe 启动redis&#xff0c;否则对应接口不开放 再输入 redis-cli 命令启动客户端服务 1.机制示意图 当一…...

施展世界:GPT时代需要的教育,是学会如何提出好问题

来源&#xff1a;BV1co4y1W7h7 有很多脑力活&#xff0c;它实际上是伪装成脑力活的体力活&#xff0c;它在回答问题这个层面&#xff0c;那是非常的厉害&#xff0c;人现在肯定是比不过它了&#xff0c;注意了&#xff0c;这是回答问题的层面&#xff0c;但问题是谁来问问题呢&…...

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度&#xff1a;1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …...

MySQL的Json类型个人用法详解

前言 虽然MySQL很早就添加了Json类型&#xff0c;但是在业务开发过程中还是很少设计带这种类型的表。少不代表没有&#xff0c;当真正要对Json类型进行特定查询&#xff0c;修改&#xff0c;插入和优化等操作时&#xff0c;却感觉一下子想不起那些函数怎么使用。比如把json里的…...

VUE 程序的执行过程(非常非常重要)

在Vue.js应用程序中&#xff0c;index.html和main.js的执行顺序是&#xff1a; 1. 首先&#xff0c;浏览器加载index.html文件。 2. 在index.html文件中&#xff0c;通过<script>标签引入了main.js文件。 3. 当浏览器遇到<script>标签时&#xff0c;它会停止解析H…...

指定cv::cuda::GpuMat创建所在的GPU卡

目录 1. 背景2. 函数说明3. 代码 1. 背景 在多卡服务器运行多应用时&#xff0c;要将应用跑在不同的GPU上&#xff0c;就需要通过代码指定所运行的GPU&#xff0c;cv::cuda::GpuMat创建时&#xff0c;同样需要指定创建所对应的GPU。 2. 函数说明 cv::cuda::setDevice 是 Ope…...

Camunda 7.x 系列【43】事务子流程

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 和 ACID 的区别3. 取消和补偿事件3.1 取消结束事件3.2 取消边界事件3.3 补偿边界…...

vscode设置的json的配置(个人怕忘了做个记录,各位不用看)

{//导入文件时是否携带文件的扩展名"path-autocomplete.extensionOnImport": true,// 配置路径提示"path-autocomplete.pathMappings": {"": "${folder}/src"},"liveServer.settings.CustomBrowser": "microsoft-edge&…...

HJ17 坐标移动

Powered by:NEFU AB-IN Link 文章目录 HJ17 坐标移动题意思路代码 HJ17 坐标移动 题意 开发一个坐标计算工具&#xff0c; A表示向左移动&#xff0c;D表示向右移动&#xff0c;W表示向上移动&#xff0c;S表示向下移动。从&#xff08;0,0&#xff09;点开始移动&#xff0c;…...

【postgresql基础入门】 新建数据库服务集群目录,定制属于自己的独享数据区

初始化集群 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君…...

808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议

808协议是指中国国标GB/T 808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议&#xff0c;也被称为JT/T808协议。该协议规定了车辆与监管平台之间的通信规范&#xff0c;用于实现对道路车辆的远程监管和服务。 JT/T808协议主要包含以下几个方面的…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配&#xff0c;成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景&#xff0c;通过标准化 SQL 工作台与细粒度权限管控两大能力&#xff0c;助力企业安全高效…...