未来的拥塞控制与 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.rhkb.cn/news/189666.html

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

相关文章

[云原生案例2.4 ] Kubernetes的部署安装 【通过Kubeadm部署Kubernetes高可用集群】

文章目录 1. 基本架构及前置准备1.1 基本架构1.2 前置准备 2. 系统初始化操作 ---- 所有节点2.1 关闭防火墙、selinux和swap分区2.1.1 关闭防火墙和selinux2.1.2 关闭交换分区 2.2 修改主机名,添加域名映射2.2.1 修改主机名2.2.2 修改本地hosts文件 2.3 内核升级2.4…

html菜单的基本制作

前面写过一点网页菜单的博文&#xff1b;下面再复习一些技术要点&#xff1b; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.…

RLHF讲解

RLHF包含了两个至关重要的步骤&#xff1a; 训练Reward Model用Reward Model和SFT Model构造Reward Function&#xff0c;基于PPO算法来训练LLM frozen RMfrozen SFT ModelActor π Φ R L \pi_{\Phi}^{R L} πΦRL​ initialized from SFT ModelCritic V η V_\eta Vη​ i…

tensorboard报错解决:No dashboards are active for the current data set

版本&#xff1a;tensorboard 2.10.0 问题&#xff1a;文件夹下明明有events文件&#xff0c;但用tensorboard命令却无法显示。 例如&#xff1a; 原因&#xff1a;有可能是文件路径太长了&#xff0c;导致系统无法读取文件。在win系统中规定&#xff0c;目录的绝对路径不得超…

案例续集留言板

前端没有保存数据的功能,后端把数据保存下来(内存,数据库等等......) 前端代码如下 : <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

论文笔记--Baichuan 2: Open Large-scale Language Models

论文笔记--Baichuan 2: Open Large-scale Language Models 1. 文章简介2. 文章概括3 文章重点技术3.1 预训练3.1.1 预训练数据3.1.2 模型架构 3.2 对齐3.2.1 SFT3.2.2 Reward Model(RM)3.2.3 PPO 3.3 安全性 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Baichuan 2…

PyQt制作【小红书图片抓取】神器

文章目录 &#x1f4e2;闲言碎语&#x1f43e;窗口设计&#x1f43e;功能设计&#x1f4da;资源领取 &#x1f4e2;闲言碎语 最近写一个系统&#xff0c;被一个Bug折腾了两天&#xff0c;至今还未解决。由于解决Bug弄得我有点心力憔悴&#xff0c;于是想着写其他小项目玩玩&am…

Halcon WPF 开发学习笔记(2):Halcon导出c#脚本和WPF初步开发

文章目录 前言HalconC#教学简单说明如何二开机器视觉如何二次开发Halcon导出Halcon脚本新建WPF项目&#xff0c;导入Halcon脚本和Halcon命名空间 前言 我目前搜了一下我了解的机器视觉软件&#xff0c;有如下特点 优点缺点兼容性教学视频(B站前三播放量)OpenCV开源&#xff0…

Windows桌面黑屏无法打开软件窗口不显示卡死等解决方案

问题还原 该软件窗口无论如何操作均 无法打开显示的窗口 ,但是 可使用 ALTTab 看到任务视图 目录 问题还原 解决方案 1. 使用 WinR 打开命令窗口 盲输 cmd 2. 盲输 taskkill /f /im explorer.exe 关闭资源管理器 3. 输入 start explorer.exe 启动任务管理器即可恢复正常…

TDD、BDD、ATDD以及SBE的概念和区别

在软件开发或是软件测试中会遇到以下这些词&#xff1a;TDD 、BDD 、ATDD以及SBE&#xff0c;这些词代表什么意思呢&#xff1f; 它们之间有什么关系吗&#xff1f; TDD 、BDD 、ATDD以及SBE的基本概念 TDD&#xff1a;&#xff08;Test Driven Development&#xff09;是一种…

基于飞蛾扑火算法优化概率神经网络PNN的分类预测 - 附代码

基于飞蛾扑火算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于飞蛾扑火算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于飞蛾扑火优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

链表OJ题(4)

目录 10.链表的回文结构 11.随机链表的复制 &#x1f642;找中间节点一定要考虑偶数个和奇数个的问题。 &#x1f642;指针指向的前中后。 &#x1f642;链表节点的位置个数/链表的节点中的数字。&#x1f197;&#x1f197; 今天最后两道链表OJ题目。 10.链表的回文结构…

【C++】非类型模板参数 | array容器 | 模板特化 | 模板为什么不能分离编译

目录 一、非类型模板参数 二、array容器 三、模板特化 为什么要对模板进行特化 函数模板特化 补充一个问题 类模板特化 全特化与偏特化 全特化 偏特化 四、模板为什么不能分离编译 为什么 怎么办 五、总结模板的优缺点 一、非类型模板参数 模板参数分两类&#x…

数据结构预算法--链表(单链表,双向链表)

1.链表 目录 1.链表 1.1链表的概念及结构 1.2 链表的分类 2.单链表的实现(不带哨兵位&#xff09; 2.1接口函数 2.2函数的实现 3.双向链表的实现&#xff08;带哨兵位&#xff09; 3.1接口函数 3.2函数的实现 1.1链表的概念及结构 概念&#xff1a;链表是一种物理存储结…

黑豹程序员-架构师学习路线图-百科:Knife4j API接口文档管理

文章目录 由来&#xff1a;接口文档第一代&#xff1a;Swagger第二代&#xff1a;Knife4j界面 由来&#xff1a;接口文档 古老编程是一个语言前后端通吃&#xff0c;ASP、JSP、PHP都是如此。 但随着项目规模变大&#xff0c;项目团队也开始壮大&#xff0c;岗位职责开始细分&a…

如何从零开始手写一个消息中间件(从宏观角度理解消息中间件的技术原理)

如何从零开始手写一个消息中间件&#xff08;从宏观角度理解消息中间件的技术原理&#xff09; 什么是消息中间件消息中间件的作用逐一拆解消息中间件的核心技术消息中间件核心技术总览IOBIONIOIO多路复用AIOIO多路复用详细分析selectpollepoll Java中的IO多路复用 协议序列化消…

【halcon】halcon 函数文件 以及 脚本引擎如何调用外部函数文件 上篇

前言 halcon有几种文件&#xff1a; 本地程序函数&#xff08;.hdev&#xff09;外部函数文件&#xff08;.hdvp)库函数(.hdp) 说多了容易混淆&#xff0c;今天就说&#xff0c;我觉得最有用的&#xff1a;外部函数文件&#xff08;.hdvp) 步骤 先写一段halcon脚本&#x…

Nuxt.js——基于 Vue 的服务端渲染应用框架

文章目录 前言一、知识普及什么是服务端渲染什么是客户端渲染&#xff1f;服务端渲染与客户端渲染那个更优秀&#xff1f; 二、Nuxt.js的特点Nuxt.js的适用情况&#xff1f; 三、Vue是如何实现服务端渲染的&#xff1f;安装依赖使用vue安装 Nuxt使用npm install安装依赖包使用n…

C语言——打印1000年到2000年之间的闰年

闰年&#xff1a; 1、能被4整除不能被100整除 2、能被400整除 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int year;for(year 1000; year < 2000; year){if((year%4 0) && (year%100!0) || (year%400 0)){printf("%d ",ye…

Java学习_对象

对象在计算机中的执行原理 类和对象的一些注意事项 this关键字 构造器 构造器是一种特殊的方法 : 特殊之处在于&#xff0c;名字必须与所在类的名字一样&#xff0c;而且不能写返回值类型 封装 封装的设计规范&#xff1a;合理隐藏、合理暴露 实体类 成员变量和局部变量的区别 …