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

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 占有率达到一定量再批量发送,拦了一座大坝,那就谁也没办法。

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

相关文章:

tcp bbr pacing 的对与错

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

MySQL学习-非事务相关的六大日志、InnoDB的三大特性以及主从复制架构

一. 六大日志 慢查询日志:记录所有执行时间超过long_query_time的查询,方便定位并优化。 # 查询当前慢查询日志状态 SHOW VARIABLES LIKE slow_query_log; #启用慢查询日志 SET GLOBAL slow_query_log ON; #设置慢查询文件位置 SET GLOBAL slow_query_log_file …...

【软件测试】MIL/HIL/PIL/SIL测试

V字型开发流程 引用文章:汽车行业V模型开发详解 V模型开发(V-Model Development)是一种广泛应用于汽车行业的系统开发方法。它以字母“V”形状的图表形式展示了开发过程中不同阶段之间的关系,从需求分析到系统整合和验证&#x…...

WebKit结构深度解析:打造高效与安全的浏览器引擎

WebKit结构深度解析:打造高效与安全的浏览器引擎 在现代网络世界中,浏览器作为连接用户与互联网信息的桥梁,其背后的技术架构至关重要。WebKit,作为当今最流行的开源浏览器引擎之一,其结构设计和功能实现对于提升浏览…...

SQLSERVER对等发布问题处理

问题1: 无法对 数据库Sast_Business 执行 删除,因为它正用于复制。 (.Net SqlClient Data Provider) 处理: USE [master]; GO EXEC sp_replicationdboption dbname NSast_Business, optname Npublish, value Nfalse; EXEC sp_replica…...

CentOS 7 中时间快了 8 小时

1.查看系统时间 1.1 timeZone显示时区 [adminlocalhost ~]$ timedatectlLocal time: Mon 2024-04-15 18:09:19 PDTUniversal time: Tue 2024-04-16 01:09:19 UTCRTC time: Tue 2024-04-16 01:09:19Time zone: America/Los_Angeles (PDT, -0700)NTP enabled: yes NTP synchro…...

itext7 pdf转图片

https://github.com/thombrink/itext7.pdfimage 新建asp.net core8项目&#xff0c;安装itext7和system.drawing.common 引入itext.pdfimage核心代码 imageListener下有一段不安全的代码 unsafe{for (int y 0; y < image.Height; y){byte* ptrMask (byte*)bitsMask.Scan…...

搜维尔科技:Manus Xsens Metagloves新一代手指捕捉

Manus Xsens Metagloves新一代手指捕捉 搜维尔科技&#xff1a;Manus Xsens Metagloves新一代手指捕捉...

Python与Redis:提升性能,确保可靠性,掌握最佳实践

在 Python 中&#xff0c;有多个库可用于与 Redis 数据库进行交互&#xff0c;其中最受欢迎的是 redis-py。这是一个 Python 客户端库&#xff0c;提供了与 Redis 数据库进行通信的丰富功能。 Python操作Redis操作步骤 安装 redis-py 使用 pip 安装 redis-py&#xff1a; p…...

GPT国内能用吗

2022年11月&#xff0c;Open AI发布ChatGPT&#xff0c;ChatGPT展现了大型语模型在自然语言处理方面的惊人进步&#xff0c;其生成文本的流畅度和连贯性令人印象深刻&#xff0c;为AI应用打开了新的可能性。 ChatGPT的出现推动了AI技术在各个领域的应用&#xff0c;例如&#x…...

中科亿海微-CL1656功能验证开发板

I. 引言 A. 研究背景与意义 CL1656是一款精度高、功耗低、成本低的5V单片低功耗运放&#xff0c;由核心互联公司研发制造&#xff0c;CL1656 是一个 16-bit、快速、低功耗逐次逼近型 ADC&#xff0c;吞吐速率高达 250 kSPS&#xff0c;并且内置低噪声、宽 带宽采样保持放大器。…...

学习STM32第十五天

SPI外设 一、简介 STM32F4XX内部集成硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU负担&#xff0c;可配置8位/16位数据帧&#xff0c;高位&#xff08;最常用&#xff09;/低位先行&#xff0c;三组SPI接口&#xff0c;支持DMA…...

【面试题】MySQL 事务的四大特性说一下?

事务是一个或多个 SQL 语句组成的一个执行单元&#xff0c;这些 SQL 语句要么全部执行成功&#xff0c;要么全部不执行&#xff0c;不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。 事务的主要作用是保证数…...

案例实践 | InterMat:基于长安链的材料数据发现与共享系统

案例名称&#xff1a;InterMat-基于区块链的材料数据发现与共享系统 ■ 建设单位 北京钢研新材科技有限公司 ■ 用户群体 材料数据上下游单位 ■ 应用成效 已建设10共识节点、50轻节点&#xff0c;1万注册用户 案例背景 材料是构成各种装备和工程的物质载体&#xff0c…...

【数据挖掘】实验8:分类与预测建模

实验8&#xff1a;分类与预测建模 一&#xff1a;实验目的与要求 1&#xff1a;学习和掌握回归分析、决策树、人工神经网络、KNN算法、朴素贝叶斯分类等机器学习算法在R语言中的应用。 2&#xff1a;了解其他分类与预测算法函数。 3&#xff1a;学习和掌握分类与预测算法的评…...

go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费

环境的搭建 Kafka以及相关组件的下载 我们要实现今天的内容&#xff0c;不可避免的要进行对开发环境的配置&#xff0c;Kafka环境的配置比较繁琐&#xff0c;需要配置JDK,Scala,ZoopKeeper和Kafka&#xff0c;这里我们不做赘述&#xff0c;如果大家不知道如何配置环境&#x…...

Go 单元测试之Mysql数据库集成测试

文章目录 一、 sqlmock介绍二、安装三、基本用法四、一个小案例五、Gorm 初始化注意点 一、 sqlmock介绍 sqlmock 是一个用于测试数据库交互的 Go 模拟库。它可以模拟 SQL 查询、插入、更新等操作&#xff0c;并且可以验证 SQL 语句的执行情况&#xff0c;非常适合用于单元测试…...

Prometheus + Grafana 搭建监控仪表盘

目标要求 1、需要展现的仪表盘&#xff1a; SpringBoot或JVM仪表盘 Centos物理机服务器&#xff08;实际为物理分割的虚拟服务器&#xff09;仪表盘 2、展现要求: 探索Prometheus Grafana搭建起来的展示效果&#xff0c;尽可能展示能展示的部分。 一、下载软件包 监控系统核心…...

机器人管理系统的增删查改(Python)

#交互模式 robot ["机器人1","机器人2","机器人3","机器人4"] name input("请输入您的姓名&#xff1a;") print("%s您好欢迎使用机器人管理系统"%(name))while True:print("您可以进行 1.查找 2.修改 3.增…...

【.Net动态Web API】背景与实现原理

&#x1f680;前言 本文是《.Net Core进阶编程课程》教程专栏的导航站&#xff08;点击链接&#xff0c;跳转到专栏主页&#xff0c;欢迎订阅&#xff0c;持续更新…&#xff09; 专栏介绍&#xff1a;通过源码实例来讲解Asp.Net Core进阶知识点&#xff0c;让大家完全掌握每一…...

POTS与VoIP技术演进:从电路交换到分组交换的可靠性之争与实战指南

1. 项目概述&#xff1a;当技术演进遭遇“顽固”的用户体验作为一名在通信行业摸爬滚打了十几年的工程师&#xff0c;我最近读到一篇2015年的老文章&#xff0c;标题挺有意思&#xff0c;叫《给POTS&#xff08;普通老式电话服务&#xff09;的心脏钉上木桩&#xff1f;》。作者…...

Python调用Claude API实战:非官方库集成与自动化应用指南

1. 项目概述与核心价值 最近在尝试构建一些智能化的个人工作流时&#xff0c;我遇到了一个痛点&#xff1a;如何将 Anthropic 公司强大的 Claude 模型&#xff0c;像使用 OpenAI 的 GPT 模型那样&#xff0c;方便地集成到自己的脚本、应用或者自动化工具里。OpenAI 的 API 封装…...

AI编程助手集成DRPC技能包:无缝查询区块链数据的实践指南

1. 项目概述&#xff1a;为AI编程助手解锁区块链数据能力 如果你正在使用Claude Code、Cursor这类AI编程助手&#xff0c;并且需要频繁查询区块链上的数据——比如检查钱包余额、追踪交易状态、读取智能合约信息&#xff0c;那么你很可能已经厌倦了在代码编辑器和区块链浏览器之…...

自动化测试(十二) 分布式系统测试-缓存-注册中心与链路追踪验证

分布式系统测试&#xff1a;缓存、注册中心与链路追踪验证上篇咱们搞定了消息队列测试&#xff0c;今天继续深入分布式系统的其他组件——Redis缓存、服务注册中心、分布式链路追踪。这些"基础设施"的测试往往被忽略&#xff0c;但出了问题定位起来最头疼。一、Redis…...

ARM MPMC内存控制器架构与优化策略

1. ARM MPMC内存控制器架构解析在嵌入式系统设计中&#xff0c;内存控制器作为处理器与存储设备之间的桥梁&#xff0c;其性能直接影响整个系统的运行效率。ARM PrimeCell多端口内存控制器(MPMC)是一种高度可配置的IP核&#xff0c;支持与多种类型存储设备的连接&#xff0c;包…...

ngx_http_create_request

1 定义 ngx_http_create_request 函数 定义在 ./nginx-1.24.0/src/http/ngx_http_request.cngx_http_request_t * ngx_http_create_request(ngx_connection_t *c) {ngx_http_request_t *r;ngx_http_log_ctx_t *ctx;ngx_http_core_loc_conf_t *clcf;r ngx_http_…...

API淘宝关键词搜索:运用场所、使用方式及获客逻辑

在电商生态中&#xff0c;淘宝关键词搜索API是连接第三方系统与平台商品数据的核心桥梁。其核心价值在于通过标准化接口&#xff0c;精准、合规地获取关键词对应的商品、店铺及市场数据&#xff0c;为各类业务提供坚实的数据支撑。相较于传统爬虫&#xff0c;API调用具备合规性…...

《QGIS空间数据处理与高级制图》008:OGR2OGR命令行工具核心优势

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

Midjourney 2026将取消/imagine?不,它正悄悄部署「自然语言-图像-3D资产」三合一原生工作流(附实测对比数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney 2026战略转向&#xff1a;从文本生成图像到原生三维资产创作范式跃迁 Midjourney 在 2026 年正式终止对纯 2D 图像输出的默认支持&#xff0c;全面启用 v6.5 “Tesseract” 引擎&#xff0c…...

多品牌技高速存储卡术拆解分析实测:如何同时满足企业级监控与创作两不误?

一、开篇&#xff1a;当监控连续记录与影视创作相遇——存储卡的双重使命在企业级安防监控与专业影像创作的交汇点上&#xff0c;存储卡不再仅仅是数据的载体&#xff0c;而是工作流中不可绕过的风险控制节点。安防监控要求724小时不间断写入&#xff0c;对持续写入稳定性和数据…...