漫谈拥塞控制: a Decade of Wasted Bandwidth?

news2024/12/24 3:06:43

梭子蟹终于上市了,早早起来准备去买来尝鲜,出发之前想起大概 2016,2017 年左右温州老板推荐给我的一篇好论文:The Linux Scheduler: a Decade of Wasted Cores,但有点长,就读个梗概:a Decade of Wasted Cores。

大意是,现有的观测工具无法观测到 Linux 调度器在一定精度以下的细节行为,于是这帮人开发了一个精度更高的可观测工具,观测到了 Linux 调度器隐藏了非常久的一些不合理行为并进行了修正。

拥塞控制本质上也是一种资源调度行为,肯定同样存在粒度问题,问题是能识别的精度上限在哪。

RTT 测量不准和抖动是造成算法带宽分配不合理的首要因素,从而引发效率和公平性问题,高估会导致丢包重传,低估影响利用率和公平性,受 a Decade of Wasted Cores 启发,对 RTT 的测量可等同而视之。

看一组 RTT 采样:9,10,11,9,28,12,9,3,10,11,… 这组样本对目前TCP RTT 采集会有什么影响?

  • 样本 28 会拉高 srtt,虽然移动指数平均会平滑些许,但还是会拉高。
  • 样本 3 会被 minrtt 记录,造成类 BBR,Vegas 算法对带宽的高估。

肉眼看一眼就能排除 28 和 3,但在算法离散采样过程中如何识别?势必要进行更精细粒度的观测。

真实的排队是什么样?如果一个连接发送足够平滑,报文应该足够均匀分布在每一个 buffer,以 3 个报文为例,通过这 3 个报文采集的 RTT 应该均匀梯度:
在这里插入图片描述

这样才是合理的采集 RTT 的方式,但凡在 n 以内的变化,均属于抖动,不予理睬。在这里,n 是一个参数,预估为一个连接在 buffer 里所能被容纳的报文数量,这是个前提,意味着通过 n 个连续报文采集的 RTT 波动是噪声,因为同时排在同一 buffer 里的报文应该具有相同排队时延。

n 个间隔为 1 个报文的轮次一起向前推,就能大致勾勒出 RTT 的变化,从而探测出精确的拥塞变化并排除任何潜在的噪声:
在这里插入图片描述

以 7 个报文为例,一共 7 个计算序列(小圆圈表示)作为一个周期,任何一个序列里的梯度波动被主动忽略,梯度变化可通过相邻序列校准,即差一个固定相位差。

如此,增加一个 buffer 容纳报文数量 n,细节便能被捕捉。

以一组 RTT 样本作为考察样本而不是一个,以另一种维度的组样本做校准。和试图用算法平滑掉噪声不同,恰恰需要放大噪声才能识别到它真的是噪声,不然就是掩耳盗铃。IBM Aspera 与此类似。

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

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

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

相关文章

中科亿海微ROM使用

标题 ROM(Read-Only Memory,只读存储器)是一种在FPGA(Field-Programmable Gate Array,现场可编程门阵列)中常用的存储器类型。与RAM(Random Access Memory,机存取存储器)…

用HTML+JavaScript构建C++类(Class)代码转换为MASM32代码的平台

一、需求分析 在使用MASM32编写Windows应用程序时,经常要调用Windows API接口函数 和 相应的数据结构,这些数据结构中有很多是类(Class),对于那些在MASM32没有定义的类,我们需要自己来转换。比如&#xff…

Mybatis 初识

目录 1. MyBatis入门 1.1 MyBatis的定义 1.2 MyBatis的核心 MyBatis的核心 JDBC 的操作回顾 1.3 MyBatis的执行流程 MyBatis基本工作原理 2. MyBatis的使用 2.1 MyBatis环境搭建 2.1.1 创建数据库和表 2.1.2 添加MyBatis框架支持 老项目添加MyBatis 新项目添加MyBatis 2.1.3 设…

第一份工作要怎么找呀

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

LeetCode150道面试经典题--赎金信(简单)

1.题目 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 2.示例 3.思路 统计字…

JVM 中一次完整的 GC 流程和对象如何晋升到老年代?

前言 今天来分享一道比较好的面试题,JVM 中一次完整的 GC 流程是怎样的以及对象如何晋升到老年代?对于这个问题,我们一起看看考察点和比较好的回答吧。 考察点 Java 虚拟机能够替我们回收内存空间,清除垃圾对象,因此…

《嵌入式 - 嵌入式大杂烩》SVC和PendSV异常详解

1 操作模式 在讨论PendSV和SVC异常前,需要先了解Cortex-M的模式和两个特权等级。 Figure 1 1 操作模式和特权等级 两种模式为handler模式和线程(thread)模式,这两种模式是为了区别正在执行代码的类型;handler模式为异常处理例程的代码;线程模式为普通应用程序的代码。 两…

【云原生】Kubernetes 概述

Kubernetes 概述 1.Kubernetes 简介 Kubernetes 是一个可移植的、可扩展的、用于管理容器化工作负载和服务的开源平台,它简化(促进)了声明式配置和自动化。它有一个庞大的、快速增长的生态系统。Kubernetes 的服务、支持和工具随处可见。 K…

计算机视觉中的Transformer

几十年来,理论物理学家一直在努力提出一个宏大的统一理论。通过统一,指的是将被认为是完全不同的两个或多个想法结合起来,将它们的不同方面证明为同一基础现象。一个例子是在19世纪之前,电和磁被看作是无关的现象,但电…

HCIP-linux和kvm

1、linux linux安装教程参考,https://blog.51cto.com/cloudcs/5245337 yum源配置 本地yum源配置: 8版本配置:将光盘iso挂载到某个目录,/dev/cdrom是/dev/sr0软链接,# mount /dev/cdrom /mnt,# ls /mnt Ap…

项目知识点记录

1.使用druid连接池 使用properties配置文件: driverClassName com.mysql.cj.jdbc.Driver url jdbc:mysql://localhost:3306/book?useSSLtrue&setUnicodetrue&charsetEncodingUTF-8&serverTimezoneGMT%2B8 username root password 123456 #初始化链接数…

Python-OpenCV中的图像处理-霍夫变换

Python-OpenCV中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行,如果要检测的形状可以用数学表达式描述,就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

《人月神话》:我所遇见的“焦油坑”

最近在读《人月神话》这本书。 发现大部分task延期和研发关系不是很大,技术为业务服务,但是偿还不了业务债。 焦油坑的概念源自于挖掘坑井时的一种不幸状况。当挖掘坑井时,首先会进入表土层,进展颇快。但接下来遇到了沥青或泥浆…

Highcharts引入

Highcharts是和jQuery一起使用的,所以需要下载好jQuery jQuery下载方式:访问:http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js,然后全选复制到自己新建的txt文档中,最后把扩展名改为js。 Highcharts下载方式&…

红帽8.5 ansible 安装和部署 |(简单版)

安装 配置yum仓库: vim /etc/yun.repo.d/aliyun.repo [AppStream] nameApp baseurlhttps://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os gpgcheck0[BaseOS] namebase baseurlhttps://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os gpgcheck…

安装PaddleOCR-2.7.0版本-笔记

安装PaddleOCR-2.7.0版本-笔记 先安装conda和python版本 本机安装的conda 22.9.0 python2.9.12 paddle2.4.2 paddlepaddle-gpu2.4.2 cuda10.2 安装完后,测试生成的结果如下所示: 一、第一步先激活环境 conda activate base conda activate base二、第…

线程介绍,线程与进程区别,如何使用多线程,Thread类,Runnable接口,补充知识(方法重载,方法重写)

引言:搞进程是为了什么呢? 满足并发编程,这样的需求,cpu多个核心,应用程序做出对应调整,让代码可以把多个核心充分利用起来~,当需要支持多个任务的时候——进程就十分关键了&#x…

8月9日上课内容 nginx反向代理与负载均衡

负载均衡工作当中用的很多的,也是面试会问的很重要的一个点 负载均衡:通过反向代理来实现(nginx只有反向代理才能做负载均衡) 正向代理的配置方法(用的较少) 反向代理的方式:四层代理与七层代…

Golang 函数定义及使用

文章目录 一、函数定义格式二、函数定义及使用 一、函数定义格式 //func: 函数定义关键字 //function_name:函数名称 //parameter_List: 函数参数列表,多个时使用逗号拆分 //return_types:函数返回类型,返回多个值时使用逗号拆分…

2023河南萌新联赛第(五)场:郑州轻工业大学-F 布鲁特佛斯

2023河南萌新联赛第(五)场:郑州轻工业大学-F 布鲁特佛斯 https://ac.nowcoder.com/acm/contest/62977/F 文章目录 2023河南萌新联赛第(五)场:郑州轻工业大学-F 布鲁特佛斯题意解题思路代码 题意 给定一个…