端到端拥塞控制的本质

昨天整理了一篇 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”,这就纯扯犊子了。

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

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

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

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

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

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

相关文章

git reset hard和soft的使用和区别

在Git中,git reset命令用于撤销提交、回溯版本和调整工作目录或暂存区状态,而不是gitrestore。git reset主要有三种模式:--soft、--mixed(默认)和--hard。以下是关于--hard和--soft两种模式的使用方法和区别的详细解释…

uniapp微信小程序 TypeError: $refs[ref].push is not a function

我的写法 this.$refs.addPopup.open();报错 打印出来是这样的 解决 参考未整理 原因 在当前页面使用的v-for循环 并且循环体内也有组件使用了ref(而我没有把每个ref做区别命名) 这样就导致了我有很多同名的ref,然后就报错了 解决办法&a…

AI人工智能作词,为音乐注入未来之力

在当今的音乐世界中,创新的力量不断推动着边界的拓展,而人工智能作词正以其独特的魅力,成为引领音乐走向未来的强大动力。 “妙笔生词智能写歌词软件(veve522)”无疑是这股浪潮中的璀璨明星。它利用先进的人工智能技术…

记录一次Android推流、录像踩坑过程

背景: 按照需求,需要支持APP在手机息屏时进行推流、录像。 技术要点: 1、手机在息屏时能够打开camera获取预览数据 2、获取预览数据时进行编码以及合成视频 一、息屏时获取camera预览数据: ①Camera.setPreviewDisplay(SurfaceH…

通过 Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4(win版)

官方文档 Azure OpenAI 是微软提供的一项云服务,旨在将 OpenAI 的先进人工智能模型与 Azure 的基础设施和服务相结合。通过 Azure OpenAI,开发者和企业可以访问 OpenAI 的各种模型,如 GPT-3、Codex 和 DALL-E 等,并将其集成到自己…

input上传--upload

1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>上传文件</title><link rel"…

《C++并发编程实战》笔记(一、二)

一、简介 抽象损失&#xff1a;对于实现某个功能时&#xff0c;可以使用高级工具&#xff0c;也可以直接使用底层工具。这两种方式运行的开销差异称为抽象损失。 二、线程管控 2.1 线程的基本控制 1. 创建线程 线程相关的管理函数和类在头文件&#xff1a; #include <…

数据结构——线性表(C语言实现)

写在前面&#xff1a; 在前面C语言的结构体学习中&#xff0c;我提及了链表的操作&#xff0c; 学习数据结构我认为还是需要对C语言的数组、函数、指针、结构体有一定的了解&#xff0c;不然对于结构体的代码可能很难理解&#xff0c;特别是一些书籍上面用的还是伪代码&#xf…

OpenGL笔记一之基础窗体搭建以及事件响应

OpenGL笔记一之基础窗体搭建以及事件响应 总结自bilibili赵新政老师的教程 code review! 文章目录 OpenGL笔记一之基础窗体搭建以及事件响应1.运行2.目录结构3.main.cpp4.CMakeList.txt 1.运行 2.目录结构 01_GLFW_WINDOW/ ├── CMakeLists.txt ├── glad.c ├── main…

Linux基于centos7指令初学3

date指令 作用&#xff1a; date指令可以查看时间 这个指令可以进行格式化 格式&#xff1a;date %想要的内容 Y&#xff1a;年份 m&#xff1a;月份 d&#xff1a;日 H&#xff1a;时 M&#xff1a;分 S&#xff1a;秒 时间分界线可以由…

GIT相关操作,推送本地分支到远程仓库流程记录学习

git流程 切换到源文件夹&#xff1a;cd 源文件夹克隆远程仓库&#xff1a;git clone [ssh]进入项目文件夹&#xff1a;cd .\project\查看本地分支&#xff1a;git branch获取远程仓库更新&#xff0c;使远程同步&#xff1a;git fetch查看所有分支&#xff08;包括远程分支&am…

OJ-0712

示例1&#xff1a; input 8 123 124 125 121 119 122 126 123 output 1 2 6 5 5 6 0 0示例2&#xff1a; input 2 95 100 output 1 0示例3&#xff1a; input 2 100 95 output 0 1package com.wsdcode.od;import java.util.Scanner;public class Main {public static void m…

LabVIEW比例压力控制阀自动测试系统

开发了一套基于LabVIEW编程和PLC控制的比例控制阀自动测试系统。该系统能够实现共轨管稳定的超高压供给&#xff0c;自动完成比例压力控制阀的耐久测试、流量滞环测试及压力-流量测试。该系统操作简便&#xff0c;具有高精度和高可靠性&#xff0c;完全满足企业对自动化测试的需…

安装jenkins最新版本初始化配置及使用JDK1.8构建项目详细讲解

导读 1.安装1.1.相关网址1.2.准备环境1.3.下载安装 2. 配置jenkins2.1.安装插件2.2.配置全局工具2.3.系统配置 3. 使用3.1.配置job3.2.构建 提示&#xff1a;如果只想看如何使用jdk1.8构建项目&#xff0c;直接看3.1即可。 1.安装 1.1.相关网址 Jenkins官网&#xff1a;https…

RabbitMq如何保证消息的可靠性和稳定性

RabbitMq如何保证消息的可靠性和稳定性 rabbitMq不会百分之百让我们的消息安全被消费&#xff0c;但是rabbitMq提供了一些机制来保证我们的消息可以被安全的消费。 消息确认 消息者在成功处理消息后可以发送确认&#xff08;ACK&#xff09;给rabbitMq&#xff0c;通知消息已…

Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志

章节内容 上节我们完成了如下的内容&#xff1a; Sqoop MySQL迁移到HiveSqoop Hive迁移数据到MySQL编写脚本进行数据导入导出测试 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机…

计算机的错误计算(二十九)

摘要 &#xff08;1&#xff09;讨论近似值的错误数字个数。有时&#xff0c;遇到数字9或0, 不太好确认近似值的错误数字个数。&#xff08;2&#xff09;并进一步解释确认计算机的错误计算&#xff08;二十八&#xff09;中一个函数值的错误数字个数。 理论上&#xff0c;我…

py2neo常用语句

1.连接数据库 Neo4j服务器默认的端口号就是7474,所以本地的主机就是"http://localhost:7474" 。 默认的用户名密码都是neo4j&#xff0c; # 连接数据库&#xff0c;输入个人配置 graph Graph("http://localhost:7474//browser/", auth("neo4j"…

百日筑基第十九天-一头扎进消息队列2

百日筑基第十九天-一头扎进消息队列2 消息队列的通讯协议 目前业界的通信协议可以分为公有协议和私有协议两种。公有协议指公开的受到认可的具有规 范的协议&#xff0c;比如 JMS、HTTP、STOMP 等。私有协议是指根据自身的功能和需求设计的协 议&#xff0c;一般不具备通用性&…

数学建模·熵权法

熵权法 一种计算评价指标之间权重的方法。熵权法是一种客观的方法&#xff0c;没有主观性&#xff0c;比较可靠。 具体定义 熵权法的核心在于计算信息熵&#xff0c;信息熵反映了一个信息的紊乱程度&#xff0c;体现了信息的可靠性 具体步骤 Step1正向化处理 将所以评价指标转…