拥塞控制算法为何失效,网络为何难以测量?

紧接着上文 如何测量一个(传输网络)系统的容量 给出的方法,看一下如何测量网络容量,如果真的能测量网络容量,传输算法就好设计了。

先给出答案,很遗憾,根本无法测量,请阅读 why we don’t know how to simulate the internet,超级经典的一篇论文,我推荐过不止一次,因此我本文不谈异构问题,说点别的,比如拓扑。

感谢 bbr 讨论组前段时间抛出的一个问题,让我知道了一个新词,parking lot topology,真的就像停车场一样,肯定很多人都有体会。

本文我就用这个拓扑来描述,实证为什么往往在实验室仿真良好的算法一旦部署到真实的网络就拉了,这有点反其道而行之的意思,因为大多数文章甚至论文都在讲标准 dumbbell topology 下的仿真,但不妨把这看作一个新方向。

我准备分别从 bbr 和 aimd 这两个经典算法分析。先看拓扑:
在这里插入图片描述

很简单,3 条流共享 2 个 buffer,先看 bbr 的表现,设 x 为预估带宽,w 为 inflt,排除 RTT 分割因素,假设 R 非常小,建模如下:

d x 1 d t = C 1 ⋅ g ⋅ x 1 ⋅ R g ⋅ x 1 ⋅ R + w 21 − x 1 \dfrac{dx_1}{dt}=C_1\cdot\dfrac{g\cdot x_1\cdot R}{g\cdot x_1\cdot R+w_{21}}-x_1 dtdx1=C1gx1R+w21gx1Rx1

d x 21 d t = C 1 ⋅ g ⋅ x 22 ⋅ R g ⋅ x 22 ⋅ R + w 1 − x 21 \dfrac{dx_{21}}{dt}=C_1\cdot\dfrac{g\cdot x_{22}\cdot R}{g\cdot x_{22}\cdot R+w_1}-x_{21} dtdx21=C1gx22R+w1gx22Rx21

d x 3 d t = C 2 ⋅ g ⋅ x 3 ⋅ R g ⋅ x 3 ⋅ R + w 22 − x 3 \dfrac{dx_3}{dt}=C_2\cdot\dfrac{g\cdot x_3\cdot R}{g\cdot x_3\cdot R+w_{22}}-x_3 dtdx3=C2gx3R+w22gx3Rx3

x 22 = C 2 ⋅ x 21 ⋅ ( R − ϵ ) x 21 ⋅ ( R − ϵ ) + w 3 x_{22}=C_2\cdot\dfrac{x_{21}\cdot (R-\epsilon)}{x_{21}\cdot (R-\epsilon)+w_3} x22=C2x21(Rϵ)+w3x21(Rϵ)

w 22 = x 21 ⋅ ( R − ϵ ) w_{22}=x_{21}\cdot (R-\epsilon) w22=x21(Rϵ) 【这一步就是 Little 定律】

d w 1 d t = x 1 ⋅ R − w 1 \dfrac{dw_1}{dt}=x_1\cdot R-w1 dtdw1=x1Rw1

d w 21 d t = x 21 ⋅ R − w 21 \dfrac{dw_{21}}{dt}=x_{21}\cdot R-w_{21} dtdw21=x21Rw21

d w 3 d t = x 3 ⋅ R − w 3 \dfrac{dw_3}{dt}=x_3\cdot R-w3 dtdw3=x3Rw3

设定参数如下:

C1, C2, R, g = 10, 10, 2, 1.25
x1[0], x21[0], x3[0] = 1, 6, 5

看一下表现吧:
在这里插入图片描述

任何端到端算法的动力学只作用于第一跳,不同的端到端算法就是采用不同方法利用 buffer 动力学挤兑带宽,根基就是 buffer 动力学,过了第一跳所有算法都退到自然 buffer 动力学:

x k = C ⋅ w k ∑ w i x_k=C\cdot\dfrac{w_k}{\sum w_i} xk=Cwiwk

看,是不是 bbr 的 gain 效应没了,人们预期的是:

x k = C ⋅ g ⋅ x k ⋅ R ∑ w i x_k=C\cdot\dfrac{g\cdot x_k\cdot R}{\sum w_i} xk=CwigxkR

可这个只在第一跳生效,如上面模型所示。总结,上游输出不会携带算法的药效。

再来看 aimd 的表现,建模如下:

d x 1 d t = C 1 ⋅ w 1 w 1 + w 21 − x 1 \dfrac{dx_1}{dt}=C_1\cdot\dfrac{w_1}{w_1+w_{21}}-x_1 dtdx1=C1w1+w21w1x1

d x 21 d t = C 1 ⋅ w 21 w 12 + w 1 − x 21 \dfrac{dx_{21}}{dt}=C_1\cdot\dfrac{w_{21}}{w_{12}+w_1}-x_{21} dtdx21=C1w12+w1w21x21

d x 3 d t = C 2 ⋅ w 3 w 3 + w 22 − x 3 \dfrac{dx_3}{dt}=C_2\cdot\dfrac{w_3}{w_3+w_{22}}-x_3 dtdx3=C2w3+w22w3x3

x 22 = C 2 ⋅ x 21 ⋅ r 2 x 21 ⋅ r 2 + w 3 x_{22}=C_2\cdot\dfrac{x_{21}\cdot r_2}{x_{21}\cdot r_2+w_3} x22=C2x21r2+w3x21r2

w 22 = x 21 ⋅ r 2 w_{22}=x_{21}\cdot r_2 w22=x21r2 【这一步就是 Little 定律】

d w 1 d t = { 1 , D = 0 0.5 ⋅ w 1 , D = 1 \dfrac{dw_1}{dt}=\begin{cases} 1,& D=0\\0.5\cdot w_1,& D=1\end{cases} dtdw1={1,0.5w1,D=0D=1

d w 21 d t = { 1 , D = 0 0.5 ⋅ w 21 , D = 1 \dfrac{dw_{21}}{dt}=\begin{cases} 1,& D=0\\0.5\cdot w_{21},& D=1\end{cases} dtdw21={1,0.5w21,D=0D=1

d w 3 d t = { 1 , D = 0 0.5 ⋅ w 3 , D = 1 \dfrac{dw_3}{dt}=\begin{cases} 1,& D=0\\0.5\cdot w_3,& D=1\end{cases} dtdw3={1,0.5w3,D=0D=1

r 1 = w 1 + w 12 C 1 r_1=\dfrac{w_1+w_{12}}{C_1} r1=C1w1+w12

r 2 = w 2 + w 22 C 2 r_2=\dfrac{w_2+w_{22}}{C_2} r2=C2w2+w22

与 bbr 同样初始值,g = 1.25 换成 I = 1,10X bdp buffer,结局如下:
在这里插入图片描述

如果 buffer 1 输出 C1 = 10,buffer 2 输出 C2 = 20,结局如下:
在这里插入图片描述

和 bbr 的动力学一样,细节不同:

  • 上游输出带宽不会将 additive increase 传递到下游,特别瓶颈在上游时(输出固定,不足以填充下游);
  • 任意一跳丢包都会导致 multiplicative decrease。

再多的例子我就不举了,总之这只是一个简单的拓扑,但足以表示真实网络的抽象,不必引入更复杂拓扑,只需细细斟酌上面 bbr 的例子就足够。我们清楚知道这个模型中, R + ϵ R+\epsilon R+ϵ 很重要,因为 buffer 2 中计算 w22 时并不能直接用 R,那么用什么呢?如果 ϵ = − 0.5 ⋅ R \epsilon=-0.5\cdot R ϵ=0.5R,f 2 就会被压到虚无。

我到底想说什么?我想说的是端到端拥塞控制算法的不可度量性,无论是静态适配的 aimd 还是动态适配的 bbr,这就是我逼逼呵呵说了好几年的 “测不准” 的数学表达。

这和上一篇说的测量系统容量的方法并不矛盾,因为对于网络传输系统而言,系统是动态变化的,在流量部署到系统上并开始传输时,没有全局视图,就不能指望全局公平,留下的 gap 是固有的,没法靠算法弥补。

如果拥有全局视图,对于第一个例子 bbr 算法,我们只需要将 f2 的 gain 调大就可以确保公平:
在这里插入图片描述

可是谁又提前知道这个拓扑和配置呢?

所以你知道实验室仿真的宇宙第一算法为啥拉了吧,也就不用再问为什么部署了 bbr 却还不如 cubic 了吧,如果你还希望研发一个精准的,普适的端到端算法,我劝你改行去卖皮鞋,至少还有很多经理市场。

令人费解的是,我为什么要说这些,这不是砸自己饭碗吗?对,就是要砸,因为我不干了。

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

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

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

相关文章

react-intl——react国际化使用方案

国际化介绍 i18n&#xff1a;internationalization 国家化简称&#xff0c;首字母首尾字母间隔的字母个数尾字母&#xff0c;类似的还有 k8s(Kubernetes) <br /> React-intl是 React 中最受欢迎的库。 使用步骤 安装 # use npm npm install react-intl -D # use yarn项目…

MySOL数据库进阶篇——存储引擎

一.MySQL体系结构图&#xff1a; MySQL的结构体系主要包含以下几个方面的内容&#xff1a; 1. 服务器层&#xff08;Server Layer&#xff09;&#xff1a;提供了MySQL的核心服务&#xff0c;包括连接管理、查询解析、优化等功能。 2. 存储引擎&#xff08;Storage Engine&am…

每日OJ_牛客_点击消除(栈)

目录 牛客_点击消除&#xff08;栈&#xff09; 解析代码 牛客_点击消除&#xff08;栈&#xff09; 点击消除_牛客题霸_牛客网 描述&#xff1a; 牛牛拿到了一个字符串。 他每次“点击”&#xff0c;可以把字符串中相邻两个相同字母消除&#xff0c;例如&#xff0c;字符…

图表类型识别系统源码分享

图表类型识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询&#xff1a; 定义&#xff1a;关联查询又叫连接查询 常见&#xff1a;内连接/外连接/自连接 1.内连接(无存在主从表&#xff09; 语法&#xff1a;inner join ...on 定义&#xff1a;组合两个表的记录&#xff0c;返回关联字段相符的记录&#xff0c;也就是返…

Cryptography and Network Security: Principles and Practice(Lesson 2 notes)

Playfair Cipher Operation steps Construct a 55 letter matrix based onThe matrix is ​​constructed using a keyword (key)Then from left to right, from top to bottom; fill in the letters of the key in sequence (note: repeated letters in the key are not fil…

Open-Sora代码详细解读(2):时空3D VAE

Diffusion Models视频生成 前言&#xff1a;目前开源的DiT视频生成模型不是很多&#xff0c;Open-Sora是开发者生态最好的一个&#xff0c;涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发&#xff0c;深…

嵌入式软件黑盒测试技术与案例分析培训

黑盒测试&#xff0c;也称为基于需求的测试&#xff0c;是目前嵌入式软件领域普遍开展的一种测试过程。目前&#xff0c;随着人们对软件质量要求的不断提升&#xff0c;行业对软件测试和验证的要求也在不断提高&#xff0c;对测试的充分性和准确性要求越来越苛刻。当前行业内&a…

物联网平台架构图

在数字化时代&#xff0c;物联网&#xff08;IoT&#xff09;正逐渐成为连接物理世界与数字世界的桥梁。物联网架构&#xff0c;作为这一桥梁的核心&#xff0c;是一个多层次、分布式的网络系统&#xff0c;它通过将各种物理设备与传感器连接到互联网上&#xff0c;实现设备之间…

GLSL 棋盘shader

今日永杰开金 float size 100.;vec2 checkerboard mod(floor(gl_FragCoord.xy / size), 2.);float c mod(checkerboard.x checkerboard.y, 2.);gl_FragColor vec4(vec3(c), 1);或 vec2 uv floor(S * p.xy * vec2(iResolution.x / iResolution.y, 1) / iResolution.xy); …

华为SMU02B1管理模块WEB登录与账户密码信息

1、将电脑的IP地址与SMU02B1的IP地址配置在同一个网段中。例如&#xff0c;如果监控的IP地址为192.168.0.11&#xff0c;子网掩码为255.255.255.0&#xff0c;默认网关为192.168.0.1&#xff0c;则电脑的IP地址设置成192.168.0.12&#xff0c;子网掩码设置成255.255.255.0&…

Python+Pytest框架,“conftest.py文件编写如何获取token和获取日志“?

1、新增"conftest.py" import pytest import loggingfrom api_keyword.api_key import ApiKey from config import *# 获取token # 1. 正常的请求对应的接口并且提取数据 # 2. pytest.fixture()测试夹具&#xff08;测试前置、后置操作&#xff09;pytest.fixture(s…

ESP32开发 -- VSCODE+PlatformIO环境安装

参看官网安装&#xff1a;PlatformIO IDE for VSCode 一、安装PlatformIO IDE 参看&#xff1a;日常生活小技巧 – Visual Studio Code 简单使用 扩展中搜索platformIO IDE 当安装完提示重启之后。 打开一个要创建新工程的文件夹&#xff1a; 点击 Create New Project&…

【高等数学学习记录】函数

【高等数学&学习记录】函数 从事测绘工作多年&#xff0c;深刻感受到基础知识的重要及自身在这方面的短板。 为此&#xff0c;打算重温测绘工作所需基础知识。练好基本功&#xff0c;为测绘工作赋能。 1 知识点 1.1 函数 设数集 D ⊂ R D\subset R D⊂R&#xff0c;称映射…

java开发中间件学习记录(持续更新中~)

1 Redis 2JVM 3 java基础底层 4Mysql 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1:Redis 1.穿透 1.1缓存穿透 1.1.1布隆过滤器 1.2缓存击穿 2&#xff1a;击穿 1.3&#xff1a;缓存雪崩 1.4:双写一致 1.5.持久化&#xff08;RDB,AOF&#xff09; 1.6…

电脑桌面数据误删如何恢复?提供一份实用指南

电脑桌面作为我们工作和学习的主要界面&#xff0c;存放着大量重要的文件。一旦这些数据不慎被删除&#xff0c;不仅会影响我们的工作效率&#xff0c;还可能造成无法挽回的损失。幸运的是&#xff0c;通过一些有效的方法&#xff0c;我们有机会恢复这些误删的桌面数据。本文将…

Leetcode面试经典150题-79.搜索单词

题目比较简单&#xff0c;回溯最基础的题&#xff0c;记得除非覆盖&#xff0c;否则一定要恢复现场就行 解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {public boolean exist(char[][] board, String word) {int m board.length; int n board[0].length;i…

AI周报(9.8-9.14)

AI应用-NEKO Health用AI颠覆体检 Neko Health 由 Spotify 创始人丹尼尔埃克和哈亚尔马尔尼尔森共同创立&#xff0c;致力于通过每年的全身扫描和由 AI 驱动的洞察力来改善预防性医疗保健&#xff0c;能够检测诸如心脏病和皮肤癌等疾病。 该公司通过使用人工智能软件支持的全身…

基于Python的量化交易回测框架Backtrader初识记录(二)

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;基于Python的量化交易回测框架Backtrader初识记录&#xff08;二&#xff09;-CSDN博客 前言&#xff1a;在上一篇文章 基于Python的量化交易回测框架Backtrader初识记录&#xff08;一…

转置卷积与反卷积的区分

transposed convolution&#xff08;转置卷积&#xff09;和deconvolution&#xff08;反卷积&#xff09;是两个完全不同的概念。 deconvolution为“inverse of convolution”、“inverse filter”&#xff0c;翻译为反卷积、解卷积。在信号处理中&#xff0c;反卷积是指从卷积…