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

端到端拥塞控制的本质

昨天整理了一篇 bbr 的微分方程组建模(参见 bbr 建模),算是 bbr 算法终极意义上的一个总结,最后也顺带了对 aimd 的描述,算是我最近比较满意的一篇分享了。那么接下来的问题,脱离出具体算法,上升到宏观层面,拥塞控制的本质是什么。

拥塞控制的本质就是对有效资源的自适应,这里的有效资源包括带宽但不包括 buffer。这个自适应分为两个层面,在局部意义上,要对时延负反馈做适应,在全局意义上,要做公平收敛,要说本质,就是以上这些。

用微分方程描述拥塞控制非常直观,因为它本身就是描述变化的,而拥塞控制就是要对变化做响应,变化主要指全局流量的波动,有流量加入,就出让一些资源,有流量退出,就抢占一些资源,出让多少,抢占多少,不光看能力,还要看全局,所有这一切都非常容易用微分方程描述。拥塞控制更多的意义在于适应多流,单流还不容易吗,传统 slow start or bbr startup 就够了。

我们看迄今为止具有代表性的 3 类拥塞控制算法,基于丢包的 reno/cubic,基于时延的 vegas,基于 bdp 模型的 bbr,它们无外乎都在描述 cwnd/pacing rate 的变化。

虽然 reno/cubic 的 aimd 依赖外部事件(丢包)而显得不连续,但它依然可以用连续的方程描述,只需要把丢包事件等价到丢包率即可:

d W d t = ( 1 − p ) ∗ a W − p ∗ b ∗ W \dfrac{dW}{dt}=(1-p)*\dfrac{a}{W}-p*b*W dtdW=(1p)WapbW

而对于 vegas,只需要盯紧时延变化,下面是我给出的一个模型,简陋,但能说明问题。设 x(t) 为发送速率,y(t) 为期望 rtt,z(t) 为实际测量 rtt,w(t) 为 cwnd,则 vegas 的行为可由下列一组方程描述:

z ( t ) = 实际实时采样 z(t)=实际实时采样 z(t)=实际实时采样
d x d t = k 1 ( z − y ) \dfrac{dx}{dt}=k_1(z-y) dtdx=k1(zy)
d y d t = k 2 ( y − z ) \dfrac{dy}{dt}=k_2(y-z) dtdy=k2(yz) 【实则移动指数平均】
d w d t = x ⋅ z \dfrac{dw}{dt}=x\cdot z dtdw=xz

我用 sin 函数模拟采样波动,数值解法代码如下:

x = np.zeros_like(times)
y = np.zeros_like(times)
z = np.zeros_like(times)
w = np.zeros_like(times)x[0], y[0], z[0] = x0, y0, z0
t = np.arange(0.0, T, 0.1)
for n in range(1, len(times)):x[n] = x[n-1] + dt * (-k1*(z[n-1] - y[n-1]))y[n] = y[n-1] + dt * (-k3*(y[n-1] - z[n-1]))z[n] = 1 + 1*np.sin(2 * np.pi * t[n-1])w[n] = x[n]*z[n]

它长下面的样子:
在这里插入图片描述

可观察到这些量之间的关系,就是负反馈,阻止 rtt 变化,此消彼长。

资源限定场景,参与者多则收,参与者少则放,装进一个瓶子,晃一段时间就不再拥挤,这就是拥塞控制。

很多人都有体验,刚挤进一辆满载公交车或绿皮火车,似乎每个人都被压得喘不过气,但车子颠簸一阵子后,奇迹般宽松了,另一例,医院,景区,购物等不管排队多长,似乎最终都会得到服务。

总有人会往宽松的地方主动挪,有人挪就有人让,总有人觉得没希望而离开,但很少有人主动挤,这就是拥塞控制。端到端拥塞控制与此类似,都是没有全局上帝视角的自发自组织博弈。

自 1986 年第一次肉眼可见的大范围网络拥塞后,范雅各布森(Van Jacobson,任何 cc 都应引用他)引入拥塞控制机制后迄今诞生了越来越多的拥塞控制算法,但具有部署意义的依旧是 reno/cubic,vegas,bbr 这 3 类,其它的诸多算法大多数都上不了台面。

近几年各类 cc 如寒武纪大爆发(各顶会一年 n 多论文,n 多 cc,基本都是瞎 jb 扯淡),但多数上不了台面,主流 cc 还是老 3 样,实际部署的就是 cubic vs. bbr,vegas 都不行,别的都只能自己玩玩,内卷罢了。强调端到端却又没什么好招数获得更加详细的信息,上限到了,信息量已达极限,还折腾个啥。至于 dcn,只呵呵。

大多数都是为了升职加薪,包括 G 家。rack 早在 1994 年 vegas 论文中就展现了,然而无人问津,直到 bbr 前夕… 其实业内早就采用了。业内一般不管你实际效果,而在乎总结性只言片语,曾有位自诩资深的经理说 “拥塞控制的本质就是端到端的 qos”,这就纯扯犊子了。

端到端信息量极限的根因在于 “测不准”。测不准又怎样,大数定律,中心极限定理上场啊,任何事物在足够符合它自己尺度的那个度量精度,一定有规律,这就是统计学两大定律的前提,而分组交换互联网本身就是统计复用网络,它遵循统计律。

但大多数程序员看不上统计律。可统计律才是有效的拥塞控制的核心基础,不然呢?你试试看。

艹,本来不卷,求别卷!鸡屎,经理。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CSS实现table表格:隔行换色的效果
  • 使用F1C200S从零制作掌机之debian文件系统完善NES
  • 电压反馈型运算放大器的增益和带宽
  • Delta的最新更新可让iPad用户同时模拟多款游戏
  • Redis6.2.1版本集群新加副本
  • Ubuntu 修改~/.bashrc终端选择是否使用annconda环境
  • 介绍一款数据准实时复制(CDC)中间件 `Debezium`
  • 绘画平台小程序的设计
  • mysql笔记1
  • 内存对齐的定义以及它的重要性
  • 路径:/EtherCATInfo/Descriptions/Devices/Device/Type/@ShowHideableSubDevices
  • 路由协议的优先级,以及管理距离 AD 和 metric 的区别
  • P6. 对局列表和排行榜功能
  • 【框架】ABP(ASP.NET Boilerplate Project)
  • 24/7/12总结
  • [译] React v16.8: 含有Hooks的版本
  • conda常用的命令
  • CSS实用技巧干货
  • github指令
  • gulp 教程
  • Idea+maven+scala构建包并在spark on yarn 运行
  • isset在php5.6-和php7.0+的一些差异
  • JAVA之继承和多态
  • Logstash 参考指南(目录)
  • Next.js之基础概念(二)
  • Python进阶细节
  • Redis字符串类型内部编码剖析
  • SegmentFault 2015 Top Rank
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 模型微调
  • 前端面试之CSS3新特性
  • 区块链分支循环
  • 我的业余项目总结
  • 详解移动APP与web APP的区别
  • 一道面试题引发的“血案”
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • Java数据解析之JSON
  • MyCAT水平分库
  • 组复制官方翻译九、Group Replication Technical Details
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)(1.11) SiK Radio v2(一)
  • (13)Hive调优——动态分区导致的小文件问题
  • (145)光线追踪距离场柔和阴影
  • (2)MFC+openGL单文档框架glFrame
  • (2.2w字)前端单元测试之Jest详解篇
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (ibm)Java 语言的 XPath API
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (办公)springboot配置aop处理请求.
  • (第一天)包装对象、作用域、创建对象
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (十)T检验-第一部分
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)