交换机需要多大 buffer

有点违背直觉,但是真事儿,交换机过境的流越多,所需 buffer 越小,这是为什么?

范氏(范雅各布森,van jacobson)管道的 aimd 流建议 buffer_size 为 bdp,这很容易理解,因为 aimd 流最小 cwnd 为最大 cwnd 的 1/2,为保持管道持续满载,1/2 * cwnd 填满管道即可,即 1/2 * cwnd = bdp,因此 buffer_size = cwnd_max = 2 * bdp。

但这是单流的推导,多流共享 buffer 场景下是否适用还要继续推导。若 buffer 配置尾丢(tail drop),多流全局同步,范氏 style 推导依然适用,但若 buffer 配置为 red(random early detection) or codel,就要更复杂些,我先给出一个极端些的直感,再稍微详细分析随机异步流共享 buffer 场景。
所谓的极端即所有流 “均匀摊布” 在时间轴:
在这里插入图片描述

如上图两条流均匀摊布场景,两条流 cwnd 之和在其中一流 md 后即 t + 1 时刻获得,此时它们的 cwnd 之和为 Smin = 1 / 2w + (1 / 2 + (1 / 2) * (1 / 2))w,为保持管道满载,只需要让 Smin = bdp,而 buffer 的大小保持为 Smax - Smin 即可。

按此推广到 n 条流均匀摊布,可得:

S m i n = 1 2 w + ( 1 2 + 1 2 ⋅ 1 n ) w + ( 1 2 + 1 2 ⋅ 2 n ) w + . . . + ( 1 2 + 1 2 ⋅ n − 1 n ) w S_{min}=\dfrac{1}{2}w+(\dfrac{1}{2}+\dfrac{1}{2}\cdot\dfrac{1}{n})w+(\dfrac{1}{2}+\dfrac{1}{2}\cdot\dfrac{2}{n})w+...+(\dfrac{1}{2}+\dfrac{1}{2}\cdot\dfrac{n-1}{n})w Smin=21w+(21+21n1)w+(21+21n2)w+...+(21+21nn1)w

化简可得:

S m i n = n 2 ⋅ w = b d p , w = b d p ⋅ 2 n S_{min}= \dfrac{n}{2}\cdot w = bdp,w = bdp\cdot\dfrac{2}{n} Smin=2nw=bdpw=bdpn2

而 Smax - Smin = (1 / 2)w,故 buffer_size = bdp / n。

这意味着 n 条流均匀摊布时,只需要保持 bdp / n 大小的 buffer 就能保持管道满载。

buffer 按流数量缩小难道这不会造成丢包加剧?持这种执念的人还是将 buffer 当带宽了,这是错误的。如果 n 条流共享带宽,目标是 n 条流均分带宽,不是分享 buffer,这意味着它们 md 后 cwnd 必降到 bdp 以下,保持管道满载意思是 cwnd 总和维持在 bdp 以上,一条流 cwnd 降到 bdp 以下,总有流填充它空出的部分。

好,现在开始步入正题。

实际的统计复用场景中,每条流独立,多条流不可能均匀摊布,其 cwnd 之和属正态分布。n 条流 cwnd 之和,每条流相当于从 (1 / 2)w 到 w 抽样 cwnd,cwnd 属均匀分布,根据中心极限定理,cwnd 的和属正态分布,设 cwnd 抽样标准差 σ c w n d \sigma_{cwnd} σcwnd ,cwnd 之和标准差为 σ S \sigma_{S} σS ,则 ,则 ,则 n ⋅ σ c w n d 2 = σ S 2 n\cdot\sigma_{cwnd}^2=\sigma_{S}^2 nσcwnd2=σS2

每条流的 cwnd 值属于从 (1 / 2)w 到 w 的均匀分布,其标准差为 σ c w n d = w 2 12 \sigma_{cwnd}=\dfrac{w}{2\sqrt{12}} σcwnd=212 w,在 n 条流共存场景, w = Σ n w i n w=\dfrac{\Sigma^n w_i}{n} w=nΣnwi,因此 σ c w n d = w 2 12 = Σ n w i 2 12 n \sigma_{cwnd}=\dfrac{w}{2\sqrt{12}}=\dfrac{\Sigma^n w_i}{2\sqrt{12}n} σcwnd=212 w=212 nΣnwi,方差叠加可得:

σ S = n σ c w n d = Σ n w i 4 3 n = b d p + b u f f e r 4 3 n \sigma_S=\sqrt{n}\sigma_{cwnd}=\dfrac{\Sigma^nw_i}{4\sqrt{3}\sqrt{n}}=\dfrac{bdp+buffer}{4\sqrt{3}\sqrt{n}} σS=n σcwnd=43 n Σnwi=43 n bdp+buffer

而我们看上述表达式意味着什么:
在这里插入图片描述

给定一个 buffer,n 越大,覆盖 99% 可能性的有用 buffer 越少,buffer 随着 sqrt{n} 缩小, 整体上 buffer 被 n 往左边向 bdp 收缩。n 增大, σ \sigma σ 减小,要让 σ \sigma σ 减小,buffer 减小。

中心极限定理说的就是抽样越多钟形越高越细,抽样越多的意思就是 n 越大,随着 n 的增加,Σw 倾向于收敛到非常细高的区域,极端情况,n 无穷大,σS = 0,buffer 则不再需要,无穷条流的锯齿被平滑到 bdp 边缘,刚刚恰好填满 bdp。

依本文论点,aimd 锯齿仅在端可观测到,在交换机 buffer 的统计复用环境,多流行为效果恰就是中心极限定理 cwnd 采样求和的体现,依据的是另一种动力学。bbr 等 cc 分析应依据这种统计动力学而不是端侧的 aimd 动力学。

是故,足够大的 buffer 给了共存流量足够的腾挪折腾空间,其 buffer 挤占动力学有利于公平收敛,但也不绝对。buffer 过大,真带不来收益,带来时延而已,若不必吸收统计波动,仅固定数目 aimd 流共存,如上分析,实在无需大 buffer,流越多,buffer 用量越少即可保持管道满载。但现网部署的交换机配置稍微大的 buffer 实属吸收统计波动,比如 incast 或特殊事件(比如直播在特定时间开始后的短突发),但即便是研发经理,恐怕也还是觉得任何场景下 buffer 越大越好吧。

约 12 年前,我说过一句话,“经理能扣篮,但不经常,也不绝对”,这实在就是量子力学的哥本哈根解释的解释,说经理不能扣篮是不准确的,因为经理扣篮的概率虽小,但不为 0。

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

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

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

相关文章

【mybatis】spring boot框架中使用mybatis-plus配置多数据源

1、简介 在Java开发中,当使用MyBatis-Plus进行数据库操作时,可能会遇到需要配置多数据源的场景,比如读写分离、操作多个数据库等。MyBatis-Plus本身是基于MyBatis的增强工具,它并没有直接提供多数据源的配置支持,但可…

k8s nfs配置mysql,redis

1.安装nfs # centos yum install nfs-utils -ysudo mkdir -p /nfs/mysql sudo chmod 777 /nfs/mysqlsudo mkdir -p /nfs/redis sudo chmod 777 /nfs/redisvim /etc/exports/nfs/mysql *(rw,sync,no_root_squash) /nfs/redis *(rw,sync,no_root_squash)sudo exportfs -asystemc…

币界网讯,预计以太坊现货 ETF 将于 7 月中旬推出

刚刚 ETF Store 总裁 Nate Geraci 在 X (前Twitter)平台上宣布,备受数字货币市场期待的SEC以太坊现货 ETF提案,将于7 月中旬通过美国证券交易委员会(SEC)批准。Nate Geraci透露修订后的 S-1 文件将于 7 月 …

cannot import name ‘LineString‘ from ‘shapely‘

cannot import name LineString from shapely pip install shapely -U 升级到2.0后好像好了

【VUE】 深入理解 Vue 动态路由:简介、实际开发场景与代码示例

深入理解 Vue 动态路由:简介、实际开发场景与代码示例 Vue.js 是一个用于构建用户界面的渐进式框架,它拥有丰富的生态系统,其中 Vue Router 是其官方的路由管理库。动态路由是 Vue Router 的一个强大特性,允许我们在应用运行时根…

pnpm的坑

请问pnpm的两个坑怎么解决: 第一个坑:没有节省磁盘空间 我已经配置了依赖的存储位置, 但我在项目里pnpm install以后,发现依赖包还是很大, 然后发现里面的链接并不是指向先前配置的依赖存储位置,而是指…

【数智化人物展】袋鼠云CEO宁海元:大模型时代,Data+AI将成为新的基础设施

宁海元 本文由袋鼠云CEO宁海元投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 身处这个瞬息万变的数字经济时代,传统的生产模式往往依赖于经验和固定的流程&…

上海市计算机学会竞赛平台2023年2月月赛丙组圆环三染色

题目描述 有一个圆环上有 𝑛n 个点,一个染色方案需要为每个点分配三种颜色中的一种,且圆环上相邻的点颜色不能相同。 请求出有多少种染色方案。答案可能很大,输出模 1,000,000,0071,000,000,007 的余数。 输入格式 单个整数表…

k8s-第六节-数据持久化

数据持久化 kubernetes 集群不会为你处理数据的存储,需要为数据库挂载一个磁盘来确保数据的安全。 可以选择云存储、本地磁盘、NFS。 本地磁盘:可以挂载某个节点上的目录,但是这需要限定 pod 在这个节点上运行 云存储:不限定节…

GEE计算遥感生态指数RESI

目录 RESI湿度绿度热度干度源代码归一化函数代码解释整体的代码功能解释:导出RSEI计算结果参考文献RESI RSEI = f (Greenness,Wetness,Heat,Dryness)其遥感定义为: RSEI = f (VI,Wet,LST,SI)式中:Greenness 为绿度;Wetness 为湿度;Thermal为热度;Dryness 为干度;VI 为植被指数…

文心一言指令:快速入门手册

文心一言(Wenxin Yiyan)是百度推出的一款人工智能语言模型,能够生成自然语言内容,回答问题,进行翻译等多种任务。以下是详细的文心一言指令使用指南,帮助您快速上手。 目录 简介注册与登录接口调用常用指…

手写starter核心思路流程-全网最详细版本

全网最详细手写starter组件教程 那么在写这篇博客之前,先问一下大家为什么要写starter组件,仅仅只是为了炫技吗?还是真正的在业务中需要.在现在的开发环境下,什么是竞争力? 举例分页查询来说,每个来公司的程序员都有一套自己写分页的流程,但是这套流程基本上都是重复的,那么…

Docker学习笔记(一)概念理解

一、什么是docker容器 Docker容器是一种轻量级、可移植的软件封装技术,它允许开发者将应用程序及其依赖、配置文件、运行环境等打包到一个独立的、自包含的执行单元中。容器与虚拟机相似,都提供了隔离的运行环境,但容器更加轻量级&#xff0c…

如何清理电脑内存?让电脑运行如飞!

电脑内存(RAM)的清理对于维持系统的流畅运行至关重要。随着使用时间的增加,系统内存会被各种应用程序和后台进程占用,导致系统响应变慢,甚至出现卡顿现象。通过有效地清理内存,可以提升电脑的性能&#xff…

深入理解如何撤销 Git 中不想提交的文件

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

初识 ANTLR4:构建强大解析器的利器

初识 ANTLR4:构建强大解析器的利器 在现代软件开发中,解析和处理各种形式的文本数据是一个常见而又复杂的任务。无论是编译器、数据格式转换工具,还是协议解析器,解析器的作用都至关重要。ANTLR4(ANother Tool for La…

MySQL内存使用率高且不释放问题排查与总结

背景 生产环境mysql 5.7内存占用超过90%以上,且一直下不来。截图如下: 原因分析 1、确定mysql具体的占用内存大小,通过命令:cat /proc/Mysql进程ID/status查看 命令执行后的结果比较多(其他参数的含义想了解可参考这…

静态路由的配置

5.3静态路由 静态路由由网络管理员手动配置,配置方便,对系统要求低,适用于拓扑结构简单并且稳定的小型网络。缺点是不能自动适应网络拓扑的变化,需要人工干预。 5.3.1静态路由实验 1、实验需求 ① 掌握路由表的概念&#xff1…

低代码开发的终局:数字化应用创新智能平台

随着数字化转型的加速,企业和开发者们面临着越来越多的压力来快速交付创新的数字化解决方案。在这样的背景下,低代码开发平台逐渐成为了一种强大的工具,帮助开发者们在不需要深入编码的情况下快速构建应用程序。 低代码开发的定义和优势 低代…

cpp随笔——如何实现一个简单的进程心跳功能

什么是进程的心跳 在我们日常后台服务程序运行中,一般是调度模块,进程心跳以及进程监控共同工作,进而实现实现服务的稳定运行,在前面我们介绍过如何去实现一个简单的调度模块,而今天我们所要介绍的就是如何实现进程的心跳,首先什么是进程的心…