L4S 杂谈

这不是技术文档,这是技术以外的文档。

带宽资源越来越丰富时,大家反而不抢了,资源越稀缺争抢越厉害,相比丰盈的带宽,如今人们更关注时延。l4s 提供了完全不同的方案。但梳理一下传统方法是必要的。

30 多年来,人们将拥塞控制算法简单划分为 loss-based 和 delay-based,前者比如 reno,cubic,后者比如 vegas,无论哪一类都是以时延为代价控制拥塞,丢包作为拥塞信号时,重传时延是必须的代价,时延增加作为拥塞信号时,它本身就增加了时延,这种传统路子无论怎么折腾,无异于原地绕圈圈。

有个有趣的地方很多人都忽略了,vegas 自始至终从没有自称 delay-based,但将 diff = expected - actual 视为时延增加导致,将其归为 delay-based 就显得粗鲁。

如果 vegas 自身会导致时延增加,那一定因为它在不停增加 cwnd or pacing_rate,直到获得一个时延增加信号,然而 vegas 并没有主动增加 cwnd,它做的一切都在被动适应,理论上,时延增加一定是有新流进入,这是个指示当前所有流量出让部分带宽的信号,新流即使没有任何 probe 行为(实际上还有慢启动),其它流出让的带宽也能被新流自然获取,反之,时延减少则是有流退出,需要均分它出让的带宽的信号。

vegas 采用与时延无关的方式对资源进行自适应,天然避免拥塞。vegas 只是用时延计算带宽,而起作用的是作为一个 “力矩” 的带宽时延乘积,它消去了参与计算的时延变量,是个表示实际拥塞作用效果(拥塞就要用 bdp 衡量)的量,可参考 vegas 的力学解释。

loss-based cc 固有的锯齿使针对它们的优化方案均旨在减小锯齿,从而获得带宽利用率的提升,而 vegas 理论上是无锯齿的。

如果网络是理想的,vegas 肯定是一个可伸缩的,公平的低时延算法,但网络不是理想的,因此 vegas 只能维持脆弱的不稳定平衡,而 aimd 则是稳定的平衡。不稳定平衡一旦偏离平衡点,正反馈将是灾难性的,这是它无法实用的根本。

l4s (的思想而非细节)为部署 vegas 带来了希望。

正如 aimd 需要类似 red aqm 提供支撑一样(否则将会跌入低效的全局同步),vegas 为什么不能由另一个 aqm 支撑呢?只要利用 l4s 设施将传统流量隔离到单独的队列,甚至不需要它提供的 ecn 能力,vegas 自己就能适应。

l4s 的意义在于它为网络注入了真正的拥塞控制能力,它显式将拥塞信息第一时间直接通知到 sender,这是与传统的 aimd 完全不同,aimd 的 capacity-search 行为被认为是造成拥塞的原因而不是解决拥塞的方案,它解决的只是拥塞崩溃。

虽然 l4s 与 aimd 的思路完全不同,但 aimd 很容易被误解为拥塞控制的根基,以至于试图摆脱它只能是昙花一现的徒劳,参见 bbr 到 bbr3 的迭代。

基于 l4s 框架,tcp prague(一帮经理在布拉格开 l4s 副经理大会,提出了算法方案,延续 tcp cc 按照地名的命名法则,就叫 tcp prague,算法细节看参考 Prague Congestion Control) 延续了 dctcp,而后者也是一个 aimd 算法。

dctcp 本质上还是 capacity-search,它自己倾向于占满带宽和 buffer,其内核并不符合 l4s 的思想,l4s aqm 不断发送 ecn 修正 sender 先污染后治理的行为,与传统 red aqm 无大不同,而 vegas “保持 alpha 到 beta 个报文在 buffer 中” 则完全贴合 l4s 可扩展,低时延的理念,无论多少流量,在 buffer 中保持固定数量报文意味着时延不会随流量而变化,这便是可扩展性,而 l4s aqm 只需要确保在 buffer 中保持固定数量报文这件事的落地,修正 sender 的误估。

如此 l4s 岂不是只提供了个浅 buffer。话虽如此,但我们很容易想象一个 aimd 流在这个浅 buffer 中如何剧烈抖动,然而 vegas 在这个浅 buffer 中倾向于平稳而无锯齿,除非有流量进入或退出才会导致 vegas aiad,而为了防止 aimd 流量频繁干扰 vegas,l4s 还有一项任务就是将传统 aimd 流量(简单方法就是无 ecn capable,但也可用算法)隔离出去,这也是 l4s 框架的核心工作之一。

如果只提供一个截止闸,一套严酷的律法来治理环境污染,这种先污染后治理的方案显然不能真正治理污染,而将每家企业的碳排放维持在一个区间,这才是好的方案。惯常的 tcp 锯齿就是先污染后治理的形态,而 red aqm 钝化了这类锯齿,这是一种优化手段,但丢包仍是信号。而 l4s 既然可以提供显式信号,就取消了 aimd 的必要。剩下的公平性问题,只要大家遵守同一个规则就能保证公平性,类似上周我对 vegas 的分析那样,而 l4s 可确保这个规则得到遵守。

理想的端到端传输没有任何网络力量干预,aimd 在避免拥塞崩溃后通过 red aqm 提供了优化,这算是一种来自网络对端的干预,此后很难再看见,网络甚至会丢掉携带 ecn 的报文,人们笃信一定存在一种最优的端到端算法,于是人们拼命寻找它,然而信息量有限是个固有缺陷,该缺陷限定了端到端算法的上限,任何算法都在带宽和时延之间拧巴,vegas 稍好一点。突破极限还得需要网络提供更多信息,将 dcn 用了很久的 ecn 思路照搬到广域网,就是 l4s,它在长程传输中的作用力比 dcn 短程传输更大。

作为从 dcn 衍生的广域网 dctcp 版本 tcp prague 仅仅是个开始,vegas 固然不完备,但 dctcp 也并非真正的可伸缩,依然依赖启发式算法和处理技巧推动优化,在某个点上,它将不再可伸缩。但在数据中心内部,dctcp 本身可以做得更好,与 l4s 等效的 dcn 技术不胜枚举。
如果只是想了解一下 l4s,请看:Reduce network delays with L4S,如果要深入了解它,就看 rfc9330。

最后,不得不说,网络干预端实属一把不对称的双刃剑,在 dcn 实施的方案在广域网却不一定可行,因为在不受控的分布式环境,兼容性要考虑的更多,这也是最初把互联网设计成细腰型瘦网胖端模型的原因。拥塞崩溃固然可怕,它由指数传输量导致,但对网络设施本身牵一发而动全身的改造也是指数效应,更要慎重。

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

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

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

相关文章

SpringBoot Gateway整合过程中的问题

现象描述: 第一次请求正常,第二次报错,错误如下: 2023-12-25 00:47:46.928 ERROR 5484 --- [ctor-http-nio-6] a.w.r.e.AbstractErrorWebExceptionHandler : [34ab38d8-2] 500 Server Error for HTTP GET "/gateway/config…

Oracle 学习(2)

过滤和排序数据 where条件过滤 日期格式 查询10号部门的员工信息:SQL> select * from emp where deptno10 查询”KING”的信息:SQL> select * from emp where ename KiNg 未选定行。 注意:字符串大小写敏感。 SQL> selec…

Navicat误删除生产环境SQLServer2012单表数据后恢复单表数据

背景: 1-后端更新功能部署到客户生产环境时误将测试环境数据保留,项目负责人发现后告知后端。 2-后端登录客户生产数据库使用navicat删除一张表的单表数据时多删了几条数据,判断弄乱了客户生产环境下自己产生的单表数据。 思路&#xff…

直通车定义、功能以及扣费原则

1.直通车是天猫付费搜索广告,即时需求,是消费者主动来搜索的,cpc扣费原则,一般用来拉新或者收割客户; 2.一般关键词优先,人群溢价是用来更精准投放的,可以不投溢价人群; 3.溢价人群…

什么是数据分析思维

参考 一文学会如何做电商数据分析(附运营分析指标框架) 电子商务该如何做数据分析?如何数据分析入门(从各项指标表象进入) https://www.processon.com/outline/6589838c3129f1550cc69950 数据分析步骤 什么是数据分析…

IP 地址归属地查询

IP 地址归属地查询 1. IP 地址归属地查询2. IP 地址归属地查询References 1. IP 地址归属地查询 https://tool.lu/ip/index.html 2. IP 地址归属地查询 https://www.ip.cn/ip/.html References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

【FPGA】分享一些FPGA高速信号处理相关的书籍

在做FPGA工程师的这些年,买过好多书,也看过好多书,分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

Unity | 渡鸦避难所-4 | 镜头跟随角色移动

1 Cinemachine 简介 在第一人称视角的游戏中,摄像机需要时刻跟随角色移动。除了手动计算摄像机的位置、旋转外,也可以使用 Unity 提供的 Cinemachine 插件来轻松实现摄像机的控制 Cinemachine 是一套用于操作 Unity 相机的模块,解决了跟踪目…

分布式系统架构设计之分布式数据管理

随着互联网时代的不断发展,分布式系统架构成为支撑大规模用户和高并发访问的基础。在构建分布式系统时,分布式系统有着一系列的要求以及对应的核心技术,涉及到数据管理、通信安全性、性能优化、可扩展性设计以及架构演进与版本管理等很多方面…

vs c++mysql 配置

C/C访问MySQL数据库_c链接数据库陈子青-CSDN博客

【使用Ubuntu编译FFmpeg生成Android动态库/静态库】

环境 我这里使用windows里的wsl2的ubuntu,使用物理机或者vmware,vbox之类的安装的ubuntu理论上也可以. gcc编译使用的环境如下: Ndk使用17 FFmpeg使用4.0.2. clang编译使用的环境如下: Ndk使用21.4 FFmpeg使用6.1 FFmpeg下载地址:https://ffmpeg.org/…

什么是pca降维

当执行主成分分析(PCA)降维时,具体的步骤如下: 1.数据准备: 2.数据集:有一个包含多个样本和特征的数据集。每个样本都是一个向量,每个特征都是向量的一个维度。 3.数据中心化:计算每…

Shell 脚本基础

Shell脚本 脚本以#!/bin/bash开头 执行方式 直接使用文件名执行:文件需要执行权限 以bash xxx.sh来执行, 本质上是bash解析器去执行, 文件作为一个输入, 因此可以不需要执行权限 变量 系统变量 自定义变量 定义变量 # 定义一个变量username, 注意不能有多余…

实战 9 权限菜单管理

目录 1、权限菜单后端接口 2、查询权限菜单列表 2.1 设计效果图 2.2 menuList.vue 3、 新增权限菜单 3.1 新增权限菜单窗口代码 3.2 选择所属菜单代码 3.3 封装图标选择器 3.4 新增、编辑和删除权限菜单 1、权限菜单后端接口 package com.cizhu.service;import com.ci…

[职业管理] OKR

推荐书籍 书名:OKR工作法:谷歌、领英等顶级公司的高绩效秘籍 作者:克里斯蒂娜沃特克 译者:明道团队 文章目录 OKR介绍OKR文档模板OKR周报模板使用OKR进行团队合作 OKR介绍 OKR是"Objectives and Key Results"的缩写&am…

C# WPF上位机开发(子窗口通知父窗口更新进度)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 这两天在编写代码的时候,正好遇到一个棘手的问题,解决之后感觉挺有意义的,所以先用blog记录一下,后…

基于flask和echarts的新冠疫情实时监控系统源码+数据库,后端基于python的flask框架,前端主要是echarts

介绍 基于flask和echarts的新冠疫情实时监控系统 软件架构 后端基于python的flask框架,前端主要是echarts 安装教程 下载到本地,在python相应环境下运行app.py,flask项目部署请自行完成 使用说明 flaskProject文件夹中 app.py是flask项目主运行文…

Android Studio解决:Connect time out问题

目录 前言 一、错误信息 二、解决方法 三、更多资源 前言 当您尝试建立网络连接时,如果连接的建立时间超过了预设的时间限制,就会出现"Connect time out"的错误提示。这通常是由于网络连接问题、服务器故障或网络延迟等原因导致的。 一、…

ARM Cortex-A学习(1):GIC(通用中断控制器)详解

文章目录 1 Cortex-A核中断1.1 处理器模式1.2 IRQ模式 2 GIC的操作2.1 CPU Interface2.2 Distributor GIC(通用中断控制器, Generic Interrupt Controller)是一种用于处理中断的硬件组件,它的主要功能是协调和管理系统中的中断请求,确保它们被正确地传递…

Android 设置系统桌面壁纸

本篇主要讲下如何设置系统桌面壁纸. 代码如下: public static void setLauncherWallPaper(Context context, Bitmap bitmap) throws IOException {if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.N) {final int result;try {result WallpaperMana…