为什么 buffer 越大传输效率越低

2024-05-24 20:52

本文主要是介绍为什么 buffer 越大传输效率越低,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先看 从边际效益递减看 buffer 中挤占带宽 中的两个模型:

  • E1 = inflight_prop - inflight_buff: y = 2 t x − b x a − x y=2tx-\dfrac{bx}{a-x} y=2txaxbx
  • E2 = bw / delay: y = a x − x 2 b + t a − t x y=\dfrac{ax-x^2}{b+ta-tx} y=b+tatxaxx2

其中,E 为效益,编号 1,2 区分两个模型,公式中均以 y 表示,x 表示一条流的有效带宽,a 为瓶颈链路总带宽,b 为 buffer 已填充大小,c 为单向传播时延。

首先,固定 a 和 c,控制 b,动图如下:
在这里插入图片描述

一目了然:

  • buffer 填充越大,E1 和 E2 最大值绝对值均单调减小,取最大值时的 x 单调减小。

简单解释一下,E 的绝对值减小意味着效益度量值减小,即低效的意思,而最大值时的 x 减小意味着收益(注意和效益的区别)在减小。

结论是,buffer 越大,能效越低,收益越低。

现在固定 a,b,控制 c:
在这里插入图片描述

一目了然:

  • c 越大,E1,E2 取得最大值时的 x 单调递增;
  • c 越大,E1 最大值单调递增,E2 最大值单调递减。

简单解释一下,c 越大,rtt 越大,管道长短视为固有属性,E1 最大值同步增加意味着 c 越大,挤占 buffer 的收益带来的总效能越大,这件事值得做,反之,c 越小,小 rtt 链路挤占 buffer 就是相对出大力而不讨好了。

对 E2 而言,c 越大,E2 最大值反而越小,意味着越长的链路挤占 buffer 的收益越被淹没,属于出大力亦不讨好。

但无论 E1 还是 E2,c 越大,取得最大值时的 x 都单调递增,意味着如果链路过长,有 buffer 就去挤占吧。

综上:

  • buffer 越大,能效越低,收益越低;
  • 链路越长,挤占 buffer 收益明显,但总效益被淹没;
  • 链路越短,挤占 buffer 越困难;
  • 如果 buffer 已部署,不要谦让。

看看,是不是所有 reno,cubic,vegas,bbr 的配置部署建议都在里面了。但总的结论还不是这,总的结论是,不要寄希望于增加 buffer 以提高传输效率,buffer 越大越低效,违反直觉了吧,这就对了。特别针对数据中心,小 rtt 短肥管道,看上面的动图,孰轻孰重。

sender 收着点,姿势对了才舒服。

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

这篇关于为什么 buffer 越大传输效率越低的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Go 1.23中Timer无buffer的实现方式详解

《Go1.23中Timer无buffer的实现方式详解》在Go1.23中,Timer的实现通常是通过time包提供的time.Timer类型来实现的,本文主要介绍了Go1.23中Timer无buff... 目录Timer 的基本实现无缓冲区的实现自定义无缓冲 Timer 实现更复杂的 Timer 实现总结在

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

Hbase Filter+Scan 查询效率优化

Hbase Filter+Scan 查询效率问题 众所周知,Hbase利用filter过滤器查询时候会进行全表扫描,查询效率低下,如果没有二级索引,在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案,仅供参考,欢迎交流。 根据业务要求,作者需要根据时间范围搜索所需要的数据,所以作者设计的rowKey是以时间戳为起始字符串的。 正确尝试: 1.scan 设置 开始行和结

Java 文件读写最好是用buffer对于大文件可以加快速度

参考例子: FileReader fileReader = new FileReader(filename);BufferedReader bufferedReader = new BufferedReader(fileReader);List<String> lines = new ArrayList<String>();String line = null;while ((line =

如何提高开发的效率,让老板不知所措的给你发工资

设计模式 UML JSP 编程 数据结构 1.你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟)  ──别担心,这是每个程序员必须经历的事,这时候你就需要更大的耐心及细心,对每一行代码进行仔细人阅读并改正,这个很重要,这可以培养你的理解代码能力,所以要常读程序,不要等到程序运行以后才知道你的程序的结果。  ──如何避免:在写代码以前,要认真的学习计算机语

算法复杂度 —— 数据结构前言、算法效率、时间复杂度、空间复杂度、常见复杂度对比、复杂度算法题(旋转数组)

目录 一、数据结构前言 1、数据结构 2、算法 3、学习方法 二、 算法效率 引入概念:算法复杂度  三、时间复杂度 1、大O的渐进表示法 2、时间复杂度计算示例  四、空间复杂度 计算示例:空间复杂度 五、常见复杂度对比 六、复杂度算法题(旋转数组) 1、思路1 2、思路2 3、思路3 一、数据结构前言 1、数据结构         数据结构(D

msyql执行效率的问题以及常见基础面试题目

SQL被称为结构化查询语言(Structured Query Language )是操作和检索关系型数据库的标准语言 SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。 ※ 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    Data Definition Language ※ 数据