网络拥塞控制的经济学原理

news2024/11/17 19:44:56

作为一个流通和兑换系统(与被发送速率兑换出的带宽不同,公路交通不是兑换系统,车辆只是单体),网络传输与货币流通和兑换是一回事,借一些经济学术语能更深刻理解拥塞的成因和缓解以及制定拥塞控制策略,这是一个新视角。

再看 AIMD 收敛图:
在这里插入图片描述

读图可得下列结论:

  • buffer 越大,收敛越慢。
  • 收敛时间与 buffer 大小等比例变化。
  • 所有流总带宽等于链路瓶颈带宽。
  • 流有效带宽与流 bdp 等比例变化。

这些结论带来一些推论。

无论 buffer 多大,总带宽不发生任何变化。buffer 丰富,但带宽稀缺,sender 不得不进入竞拍模式,随 buffer 增加用更大发送速率挤兑相同带宽。换句话说,发送速率必须与 buffer 等比增长,才能兑换相同的带宽,这很类似物价上涨,买同样东西要花更多的钱。

投资高速网卡卖出去会有收益,但买家的端到端吞吐却没提升,sender 不得不用力挤占 buffer 以获得特定占比而兑换所需带宽,大部分努力被 buffer 吞噬,而这部分损失的能量(从生产高速网卡到卖网卡的一切劳动付出的能量)永远浪费了。

另一方面,若 buffer 无穷,AIMD 收敛图的 AI 无限延伸,没 MD 照样公平收敛,但限于物理天花板,buffer 有限,就需要 MD,MD 的物理意义是 “在等比例缩放的更小范围重新 AI,等比缩小,收敛也更快”,这是从几何上反推的收敛动力学。

以上结论和推论对硬件供需的影响更大。

由于网络转发节点的串联关系,瓶颈带宽符合木桶原则,单个设备提高带宽很难让客户看到端到端吞吐收益,但增加 buffer 确实降低了端到端丢包率,明显提升突发耐受性,但当节点 buffer 不断增加时,如前所述,sender 便不得不更换更快的网卡,这是不得不做的,做了不会提升吞吐,但不做就会降低吞吐,竞拍效应和内卷一致,等量的稀缺价值不得不支付更多努力。

问题出在哪?

问题就在 buffer 变大了,而 buffer 占比又是衡量兑换带宽占比的指标,填满越来越大的 buffer 需要越来越快的网卡。将 buffer 理解为储备金,buffer 越来越大就是通货膨胀。同样,burst 看作借贷,贷入的是时间,表现为时间的倒数,即速率。

buffer = 1 的正常情况(只有流通中货币)下,发送 D 字节数据的时间等于 t = n*D / T,连续两个字节的间隔为 n / T,其中 T 为共享链路瓶颈带宽,n 为流数。当 buffer 增加 x 倍,发送速率必须增加 x 倍才能保证兑换 T / n 的带宽,否则自己的带宽就会被其它流轻易挤占,毕竟保持自己的带宽很容易,只要加倍努力即可,但也很难,凭什么要加倍努力只为维持。

通货膨胀往往和低利率(包括存款和贷款)互为因果。要解决它,要么通货紧缩,要么提高利率(包括存款和贷款)。和问题成因对应,紧缩和提高利率也相辅相成。

减少 buffer 意味着紧缩,借贷以时间来衡量,则高利率意味着要偿付更多时间。shallow buffer 下越快发送意味着越多的时间借贷,引发越频繁的 buffer overflow 意味着要偿付更多 retransmission 时间,这恰体现了借贷高利率。另一方面,从储蓄存款利率的角度看,越慢发送意味着越多的时间储蓄,shallow buffer 场景下可获得越高的有效发送率,因为报文之间间隔越长,避开 buffer overflow 的概率越大,这恰体现了存款高利率。

不改变 buffer 大小,仅调整 RED 丢包阈值和丢包程度也能等效 “利率调整”,只要让 sender 被动偿付更多时间的调控方向都指向高利率,出来混早晚要还,借入了时间,需偿还更多时间作利息,这就是 retransmission 的代价,反之,提升报文有效通过率的调控方向则指向低利率。

从借贷角度看,未发生 buffer overflow 的情形来自于 sender 及时 “归还” 了 “借来” 的时间,表现为一轮 burst 后的静默,这轮 burst 时间与下次发送之间 “刚刚好(不至于过久而有损自身抢占能力,不至于过短增加 overflow 风险而增加 retransmission 时延)” 的静默时间,作为本息归还。

网络传输本身就是投资,付出发送成本并获得带宽收益,对于刚兑传输协议比如 TCP,成本即必须连本带息归还的借贷时间,无论 burst 后静默的及时归还是表现为 retransmission 的延期归还,利息都是时间,这段时间对 receiver 是无效时间。无论本息,都是支出,而收益则是靠非利息支出挤压出的带宽。同时,风险则意味着过度借贷导致的过度 retransmission 甚至连接崩溃。但对于柔性协议比如 UDP,可借贷而不还,利用大 buffer 而进而有能力抢占大量带宽,除非 QoS 监管介入。

So?

网络拥塞状态取决于链路交换节点的串联特征,当任意一交换节点在本地视角下获得拥塞信号,包括不限于队列增加,瞬时 burst 加剧,都可通过调整 buffer 大小 or RED 参数进行 “宏观调控”。

可以继续购买大 buffer 设备,但这只意味着该设备的宏观调控能力更强,动态范围更大,而并没有倒逼终端用户购买更快的网卡而影响供需,这就算大善事。

拥塞控制核心从 sender 转移到交换节点,sender 从主动 AIMD 转移到被动响应交换节点的调控,整个拥塞控制的架构要大不同。测量 queuing delay 将没有意义,因为 buffer 和 RED 参数不再固定,盲目激进发送将支付高额的时间成本作为利息,根本不 care 丢包的柔性协议将遭受无声的惩罚。无他。

拥塞控制算法从 sender alg 转移到 buffer 调整,作为宏观调控,从而帮助新的 rate-based 的 probe 协议(比如 BBR)更好维持自身状态机的稳定转换,与 AIMD 流量一起被纳入统一规则。

对于微观调控,我曾经写过一个畅想:激励式拥塞控制,简单评价就是采用激励替代惩罚,你好他也好,这种微观调控方法非常巧妙,let me tell you why.

在百万级连接中找到抢占带宽占比最大的 top n 对它们实施限速惩罚非常困难,成本高昂,但反过来,与促进经济良性竞争和共同发展类似,对良性连接进行补偿激励却很容易。做法很简单,将所有报文 hash 到有限个 queue,hash 算法随时间不断调整(如 seed 每 5 secs 加 1),在每一时刻,优先调度 queue length < alpha 即可。原理很直观:无论 hash 算法如何变,激进连接的报文所在的 queue 总会很长而得不到补偿,另一方面,如果某些良性流在某次不幸和激进流共处一 bucket,“持续的” 补偿激励会平滑掉 “这一次” 没得到激励补偿的损失,且这种不幸对所有良性流平等,最后,连续和激进流 hash 到同一 bucket 的概率极低使这个微观调控策略具有可行性和有效性。

But?

但数据中心是一种不同的 “流通和兑换” 系统,它确实需要高速网卡,但它却不提倡大 buffer,在直觉上和上面的论述相反,但本质往往与直觉相悖。

稍微质疑一下因果。真的是广域网的大 buffer 错了吗?如果广域网不该有大 buffer,配置小 buffer 会引入新问题吗?在广域网如此多的海量接入终端的背景下,突发无处不在且不可预知,小 buffer 无疑会造成非常高的丢包率,一个报文被丢弃,那么发送该报文的能量就被白白损耗掉了,广域网平均路径长,越接近目的地的丢包,能量损耗越大,这是自然而然的推论。

数据中心的小 buffer 没错,广域网的大 buffer 也没错,经典拥塞控制方案也建议 buffer_size >= bdp,而广域网的 bdp 不会小,即使不能兑换有效带宽,即使可卷起网卡军备竞赛,大 buffer 也必要,似乎都没错,于是问题又回到 buffer 到底该有多大,这显然在循环论证。 用网络术语讲,buffer 为吸收统计突发被引入,但什么是突然,如何度量突发,很容易陷入循环论证。

如果用经济学术语描述就简单多了,从储备金或准备金的意义去理解 buffer 很合适,我们发现,广域网大 buffer 确实不是问题原因,而是 sender 行为的结果。 无需区分准备金和储备金作用的不同,这两种 “金” 都作为银行的 buffer 存在,以应对客户的存款和贷款需求,平滑二者之间的 gap,比如 user1 存了 100 块,user2 贷走了 50 块,此时 user1 来取他的 100 块,但银行只有 50 块,为了让 user1 正常取款而不违约,这 50 块的 gap 就由银行自己的钱来提供,这显然就是一个 “缓冲” 的作用,姑且将其称作 “备金”,类似水库,为了满足下游源源不断的用水量,必须存一部分水,这都不用解释,非常容易理解。

现在重点是,所谓 buffer 吸收突发,就是 buffer 作为备金而放贷,前面说过,sender 贷入的是时间,而 buffer 则提供这种贷款,比如 buffer = 1GB,在一条 1GBps 链路上,原先 sender 发送 1GB 需要 1s,现在 buffer 可以提供 1s 的 “贷款”,这意味着 sender 可以一瞬间(任意短的时间)发送 1GB 而无需再等待 1s。

设想一个小 buffer_size = 1MB,带宽 = 1MBps 的链路,1000 个 sender 以 1MBps 发送,平均来看,有 999 个 sender 因 “银行没钱而贷不到款”。

从借贷供需看,显然,sender 越多,贷款需求越多,需提供的备金越大,buffer 就越大,这正是广域网大 buffer 的成因,而数据中心恰恰相反,sender 数量可控,拓扑确定,bdp 相对确定,短消息交互,个体贷款需求少,典型的 incast 可视作挤兑或挤贷,转瞬即逝,不足挂齿。

大 buffer,银行有足够的钱提供借贷服务,在 sender 侧,摩尔定律也在促进网卡更新换代,这是典型的 “繁荣经济” 周期,在这种周期内,大 buffer 导致的高 burst 率不断推高贷款利率(丢包重传),反过来抑制 burst 率,丢包率维持在一个范围内震荡。

这让人想起了几年前的良性繁荣经济,没事就从银行借点钱花,因为工资高且对未来充满信心,利率高也不怕,直到高到一个离谱的水平抑制人们贷款的欲望。在良性周期,花更多的钱买同样的东西是普遍现象,因为物价上涨了,人们变得更辛苦往往是因为虽然工资也上涨了,但人们由于预期良好拼命加杠杆,负债太多,而负债终要还的。这种行为吹起一个又一个泡沫,人们对一个特定物件加杠杆的行为会影响这个物件的供需产生影响,最终将这件东西的价格泡沫化,比如房子。

回到 buffer,如果 sender 网卡不断更新换代,buffer 不断加大,但带宽却没有增加,这就是泡沫,现实情况还好,带宽最近确实有所增加。

带宽不能像 buffer 一样线性增加的原因很容易理解,buffer 只需要复制空间,而带宽却要挤压时间,内存插两条就翻倍,CPU 速度翻倍要等十几个月,这就是现实。另一方面,现代 TCP/IP 网络拓扑逃不开一个收敛比的问题,n 个节点组成的网络,增加一个节点,交互流量潜在增加 n 倍,指数关系意味着注定存在的枢纽节点就像一个中央银行,只能用大 buffer 调控 burst,我之前聊过一个 incast 的解决方案,把拓扑改了就行。

好了,先这样,下次从 receiver 侧继续。

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

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

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

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

相关文章

2024年浙大MPA复试可能面临的变数:权重加大

熟悉浙大mpa项目常规批复试规则的同学都知道&#xff0c;每年的复试成绩权重一般都在40%&#xff0c;这个权重对于每年复试后综合成绩的排名影响会比较大&#xff0c;按照mpa联考复试1分等于初试3分的规则&#xff0c;联考笔试成绩假如有15分差异的两个考生&#xff0c;复试成绩…

Docker 部署本地爬虫项目到服务器

笔记&#xff1a;一直想写一篇博客的&#xff0c;那就趁着周末闲暇时光记录一下。 目录 一、前提准备 二、Docker部署爬虫示例 整体梳理 1、打包构建本地项目镜像 2、在 hub 网站上 创建一个仓库。 3、将本地镜像与hub上的仓库打上标签 4、确保已登录 Dockerhub 账号 …

一键掌握多家快递信息,快递批量查询高手软件助你高效管理物流

一键掌握多家快递信息&#xff0c;快递批量查询高手软件助你高效管理物流 在当今这个高度信息化的时代&#xff0c;快递行业的发展可谓日新月异。随着网购的普及&#xff0c;如何高效、准确地掌握多家快递公司的信息&#xff0c;成为了很多消费者和管理者面临的难题。为了解决…

fastadmin笔记,fastadmin表格功能

fastadmin笔记 官方文档请到&#xff1a; https://ask.fastadmin.net/article/323.html自行查阅 1、默认有个切换功能。 浏览模式可以切换卡片视图和表格视图两种模式&#xff0c;如果不需要此功能 在该控制器对应的js 文件中添加上showToggle:false即可。 2、导出功能 …

谷歌浏览器误代码STATUS_INVALID_IMAGE_HASH如何一行代码解决

一、直入主题&#xff1a; 1.谷歌浏览器突然就不能用了&#xff0c;如下图&#xff1a; 2.如何解决 --test-type -no-sandbox 卸载浏览器重装还是一样的问题&#xff0c;目前我们的谷歌浏览器版本号&#xff1a;Chrome 已是最新版本 版本 118.0.5993.89&#xff08;正式版本&a…

2023年中职组“网络安全”赛项 云南省竞赛任务书

2023年中职组“网络安全”赛项 云南省竞赛任务书 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控 A-5 服务加固 A-6 防火墙策…

同步网盘选择指南:哪个同步网盘更好用?

同步盘是当下热门的云存储服务之一&#xff0c;它可以将您的文件在不同设备之间进行同步&#xff0c;使您可以随时随地访问和共享您的文件&#xff0c;因此受到了许多用户的喜爱。 一、什么是同步盘 首先到底什么是同步盘&#xff1f;同步盘是指一种云存储服务&#xff0c;它…

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元回归预测。基于贝…

开关电源负载调整率测试规范国标有哪些?负载调整率测试方法是什么?

负载调整率是用来描述在额定电压下负载电流从0变化到最大时&#xff0c;输出电压相应的变化情况。它是衡量电源芯片好坏的重要指标&#xff0c;因此负载调整率测试是必不可少的环节。那么要如何测试电源芯片负载调整率呢?有哪些测试规范呢? 开关电源芯片测试规范 适用范围&am…

沃通SSL证书服务多省区一体化政务服务平台

近年来&#xff0c;我国政务服务数字化水平不断提升&#xff0c;数字政府建设取得积极成效。依托全国一体化政务服务平台&#xff0c;政务服务效能不断提升&#xff0c;“一网通办”能力显著增强&#xff0c;为创新政府治理、优化营商环境提供了有力支撑。沃通SSL证书具备保护数…

C语言判断设备存储是大端还是小端

一、运行结果 二、源代码 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现判断函数&#xff1b; int check_sys() {//初始化变量值&#xff1b;int a 1;//判断并返回值&#xff1b;return (*(char*)&a); }int main() {//调用判断内存函数&#xff1b;…

内存拷贝函数 memcpy 的原理及实现

memcpy是memory copy的缩写&#xff0c;意为内存复制&#xff0c;在写C语言程序的时候&#xff0c;我们常常会用到它。它的函原型如下&#xff1a; void *memcpy(void *dest, const void *src, size_t n);它的功能是从src的开始位置拷贝n个字节的数据到dest。如果dest存在数据…

Easyx趣味编程,鼠标消息读取及音频播放(坤坤播放器)

hello大家好&#xff0c;这里是dark flame master&#xff0c;今天给大家带来Easyx图形库最后一节功能实现的介绍&#xff0c;前边介绍了绘制各种图形及键盘交互&#xff0c;文字&#xff0c;图片等操作&#xff0c;今天就可以使写出的程序更加生动且容易操控。一起学习吧&…

选择最佳的项目管理工具:推荐哪一个?

项目管理工具推荐哪个&#xff1f;Zoho Projects项目管理工具为各类团队提供卓越的项目管理解决方案。 1、全面管理各类团队项目 Zoho Projects是一款全面的项目管理工具&#xff0c;具备简化工作流程和提高团队生产力的功能。无论是软件开发与DevOps&#xff0c;还是人力资源与…

Go语言入门心法(十二): GORM映射框架

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

HTTP响应

HTTP响应分为四个部分&#xff1a; 首行&#xff1a;HTTP/1.1&#xff08;首行&#xff09; 200&#xff08;状态码&#xff09; OK&#xff08;状态码描述&#xff09;header&#xff1a;空行&#xff1a;表示header的结束标记body&#xff1a;正文 HTTP状态码&#xff1a;…

想做情感配音解说就用这个软件~

很多视频里的声音都很好听&#xff0c;有的字正腔圆&#xff0c;有的情感真挚&#xff0c;有的激昂慷慨&#xff0c;有的忧伤动人&#xff0c;但你知道吗&#xff1f;这些都不是真人配音的效果&#xff0c;而是配音软件制作合成的效果。一个好的配音可以起到事半功倍的效果。今…

C#中各种循环遍历的功能与应用

在C#编程中&#xff0c;循环遍历是一种重要的技巧&#xff0c;它使我们能够有效地处理集合、数组和其他数据结构。本文将深入探讨C#中常见的循环遍历方式&#xff0c;包括for循环、foreach循环、while循环和do while循环&#xff0c;并给出它们在实际应用中的使用场景、示例和最…

国内外数据保护(灾备、备份、恢复、复制、归档)厂商

做在数据保护领域呆了3年&#xff0c;这里回顾一下经常接触、对比的国内外服务提供商。 国内做数据保护一般会和国外的这几家进行对比&#xff1a; commvault&#xff0c;一般简称为CV Commvault 是一家美国上市数据保护和数据管理软件公司&#xff0c;总部位于新泽西州廷顿…

STM32F4x之中断一

一、中断简介 中断概念&#xff1a;程序在运行过程中发生了外部或内部事件时&#xff0c;导致中断了正在执行的程序&#xff0c;让CPU转到外部或内部事件中去执行。 中断的作用&#xff1a;大量节约CPU资源&#xff0c;提高程序的效率&#xff0c;即避免重要事件被错过。 中断…