未来的拥塞控制与 Linux EEVDF 调度器

有破要有立。

前面提到 经典端到端拥塞控制将越来越失效,未来该如何,谈谈我的看法。

端到端拥塞控制的难点根本上是要解决公平性问题,顺带着提高资源利用率。我们很容易理解,在共享资源场景下,不公平一定是低效的,公平甚至是高效的前提,但公平是加权的。

比如一些不重要的后台任务,一致算法对其强加一致公平就多此一举了,为解决这问题,将其纳入 app-limited 就不管了。自己都不需要公平但却被强加公平的情况还有很多,算法很难加权。

为刻画任务权重,引用自己一个想法:四象限调度 以及 Linux 四象限调度。

网络传输如何实现自决,引用自己一个借贷式方案:借贷式拥塞控制。借贷式拥塞控制尝试引入一个新的维度,burst 率,作为发送体验(或者计费)的度量依据,供求关系和 ROI 会自动收敛。

引用一个更实际的 Linux 新调度器:Linux 6.6 的 EEVDF 调度器。

了解一下 EEVDF(Earliest Eligible Virtual Deadline First):
在这里插入图片描述

很有意思的一个调度器。

之前的调度器之所以引入那么多 “启发式” 把戏都不尽人意,就因为无论多么大的权重,很容易被那些来无影去无踪,不易捕捉的 “紧急” 小事不停打断,比如 hardirq,softirq,做过系统运维的都知道,一旦 hardirq 不均衡,softirq 高了,系统就抖动了,这是不公平的根源,也是低效的根源,但一直以来 Linux 调度器都没有把这些 “闪客” 纳入管理,这次 EEVDF 做到了,我觉得这就是一个四象限调度器。

网络传输也一样,类比的话我就不说太多,本质上就是一回事,就说一点,拥塞,公平性,抖动的根源同样来自那些来无影去无踪的 “紧急闪客”,也就是 burst!管理好 burst,拥塞问题就解决了一大半。

CFS 调度器 的优势之一就是承诺去除 O(1) 调度器的启发式把戏,但最终它自己也加入了越来越多的把戏,事后回想,其实就是信息不足,“紧急性” 维度一直作为 “额外” 因素作为把戏的输入,没有被融入到调度权重。

网络传输也有两个维度,cwnd 表示数据量(重要性),而 burst 率表示紧急性,一直以来后者也没有被融入权重,和调度器的问题几乎一模一样。

学学 EEVDF 如何识别并管理闪客的。其实它并没有能力识别,它靠的是信任。谁说时间片小的一定是紧急任务的,信任啊。这也就是拥塞控制自决的依据。

分布式网络非同步网络,没有哪个共享变量可以充作 base vtime,但绝对时间可以一用,我们要的不是它的粒度,而是它定义了一条死线,遵循同一算法的各 sender 的 vtime 不能越过该死线,我们是合作式网络,如果你能靠调本地时间来占便宜,你也可以不用这个算法,换用 pixie。我们是苦于没办法合作共赢,而不是苦于没办法抓坏蛋。

如果不理解为什么绝对时间可以用,就看看天上的太阳。

可以从下面开始实验。

  • 各 sender 采用同一如下算法。
  • 定义函数 cwnd_and_pacing_rate = f(curr_time),获取初始传输配置。
  • 定义 acct,发送量平稳但多时,均匀增加 acct,突发增加时,快速增加 acct。
  • 定义函数 vtime = g(acct),acct 越大,vtime 增长越快。
  • gap = curr_time - vtime,gap 为负暂停传输,gap 越大,传输机会越大。
  • 定义函数 cwnd_and_pacing_rate = h(gap),获取即时传输配置。
  • 各 sender 同一调好一套参数。

再次强调,假设网络是合作网络,没有机会主义者想占便宜,这其实也是所有拥塞控制算法的基本假设,但这也是人们(特别是国内)对拥塞控制算法的误解,以为既然没人管,那就使劲占便宜吧。因此,难点是如何将上述算法迭代得更优秀,而不是如何钻空子。

事实上,Linux 内核也提供给 task 钻空子的机会,但系统的假设是系统是合作式的,没有这样的 task,如果有人非要写个 while(true) {i++} 或者 fork 炸弹,管理员会收拾他。

最后,如何响应丢包和时延增加就不是问题了,以上是 “拥塞控制自决” 框架,它定义了系统的基本法则,所有一切就都可自决,比如丢包,时延增加了,你主动减缓多少发送由自己决定,比如你有一笔紧急数据要发送,那就根据上面的公式计算,如果可以发就按照结果发就好了,如果你发的实在太多,vtime 会越过 base_vtime 的,你只要遵守规则,下次就没法发了,这就量化并节制了突发。perfect。

任何拥塞控制算法都和一个新的调度器一样,在大量部署并成为默认之前,必须经过大量的实验和验证以及数学论证,绝对不能损害他者。不能轻易部署。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis的特性以及使用场景

分布式发展历程参考 陈佬 http://t.csdnimg.cn/yYtWK 介绍redis Redis(Remote Dictionary Server)是一个基于客户端-服务器架构的在内存中存储数据的中间件,属于NoSQL的一种。它可以用作数据库、缓存/会话存储以及消息队列。 作为一种内存数…

【Pytorch和深度学习】栏目导读

一、栏目说明 本栏目《pytorch实践》是为初学者入门深度学习准备的。本文是该栏目的导读部分,因为计划本栏目在明年完成,因此,导读部分,即本文也在持续更新中。 本栏目设计目标是将深度学习全面用pytorch实践一遍,由浅…

原型模式 rust和java的实现

文章目录 原型模式介绍优点缺点使用场景 实现java 实现rust 实现 rust代码仓库 原型模式 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当…

mysql主从复制-使用心得

文章目录 前言环境配置主库从库 STATEMENTbinloggtidlog-errorDistSQL总结 前言 mysql 主从复制使用感受,遇到一些问题的整理,也总结了一些排查问题技巧。 环境 mysql5.7 配置 附:千万级数据快速插入配置可以参考:mysql千万数…

数据分析面试题1

1.右表为一组数据,尝试进行简单分析,并给出结论(使用公式和图表辅助) ①理解数据 userid:用户id神兽印记消耗数量 ②数据清洗 冻结首行,将列标题的英文字段转换成汉字字段检查是否有重复项:…

STM32F407: CMSIS-DSP库的移植(基于源码)

上一篇:STM32F407: CMSIS-DSP库的移植(基于库文件)-CSDN博客 1. 拷贝源码 仿照官方源码目录,新建一个source目录:\Drivers\CMSIS\DSP\Source 将所有源文件拷贝过来,如下: 然后在每个目录下新建一个总的c文件&#x…

CSS花边001:无衬线字体和有衬线字体

网站中我们看到过很多字体,样子各有千秋。通常针对结构,区分为有衬字体(serif) 和无衬字体(sans-serif)。今天我们聊一下这个话题。 什么是有衬字体,什么是无衬字体? 衬线字体&…

sqli-labs关卡16(基于post提交的双引号加括号闭合的布尔盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第十六关通关思路1、判断注入点2、猜数据库长度3、猜数据库名字4、猜表名长度5、猜表名名字6、猜列名长度7、猜列名名字8、猜数据长度9、猜数据名字 总结 前言 此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击…

已解决:java.net.BindException: 地址已在使用

解决zookeeper报错:java.net.BindException: 地址已在使用,是因为端口被占用。显示Starting zookeeper ... STARTED,jps没有QuorumPeerMain进程。 问题截图: 看似Starting zookeeper ... STARTED,实则集群并没有启动…

逻辑回归-癌症病预测与不均衡样本评估

1.注册相关库(在命令行输入) pip install scikit-learn pip install pandas pip install numpy 2.导入相关库 import pandas as pd import numpy as np from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split…

【每日一题】—— B. Deja Vu(Codeforces Round 907 (Div. 2))(暴力枚举、队列)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

“苹果定律”失效,2023是VR的劫点还是拐点?

因为Pico裁员的事情,VR行业又被讨论了。 Pico于2021年9月被字节跳动收购,当时是出货量排名全球第三的VR 头显生产商。 此前曾有国际机构预测,2023年随着Meta和Pico的硬件更新,苹果Vision Pro的推出,三星电子重新回归VR…

黑马程序员微服务Docker实用篇

Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

初探地理编码(2023.11.12)

地理编码相识 2023.11.12 引言1、地理编码简介2、地理编码API和服务(解决方案供应商 / 厂商)2.1 高德2.2 百度2.3 超图2.4 天地图2.5 ArcGIS2.6 MapBox2.7 Cesium2.8 MapLocation 3、python实例3.1 pip安装依赖库(python 3.6)3.2 …

git分支与tag标签的介绍与使用)

git分支与tag标签的介绍与使用 一.什么是分支与标签1.2.开发环境分层 二git分支介绍2.1分支操作2.2.IDEA中操作分支 三、Git标签的讲解3.1.GitBashHere操作标签3.2. IDEA中操作标签 一.什么是分支与标签 分支(Branches): 功能开发&#xff…

Jenkins简介及Docker Compose部署

Jenkins是一个开源的自动化服务器,用于自动化构建、测试和部署软件项目。它提供了丰富的插件生态系统,支持各种编程语言和工具,使得软件开发流程更加高效和可靠。在本文中,我们将介绍Jenkins的基本概念,并展示如何使用…

PyCharm 安装库时显示连接超时

在setting->python Interpreter 中用“” 安装库时,出现一个弹窗,提示信息如下: Error updating package list: Connect timed out 通过查阅资料,发现是镜像源的问题,具体的解决方案如下: 1. 更新一下…

初始MySQL(四)(查询加强练习,多表查询(未完))

目录 查询加强 where加强 order by加强 group by 分页查询 总结 多表查询(重点) 笛卡尔集及其过滤 自连接 子查询 #先创建三张表 #第一张表 CREATE TABLE dept(deptno MEDIUMINT NOT NULL DEFAULT 0,dname VARCHAR(20) NOT NULL DEFAULT ,loc VARCHAR(13) NOT NULL D…

v-bind和v-model

目录 前言 v-bind 作用 语法格式 编译原理 简写 v-model 作用 使用方法 v-bind和v-model的区别和联系 前言 本文我们来了解一下模板语法之指令语法中的v-bind和v-model v-bind 作用 v-bind可以让html标签的某个属性的值产生动态的效果 语法格式 <html标签 v-bin…

菜单栏管理软件 Bartender 3 mac中文版功能介绍

​Bartender 3 mac是一款菜单栏管理软件&#xff0c;该软件可以将指定的程序图标隐藏起来&#xff0c;需要时呼出即可。 Bartender 3 mac功能介绍 Bartender 3完全支持macOS Sierra和High Sierra。 更新了macOS High Sierra的用户界面 酒吧现在显示在菜单栏中&#xff0c;使其…