walt 调度算法

news2024/11/27 22:34:29

Walt 算法

WALT负载统计原理_walt算法_森森浅浅笙笙的博客-CSDN博客

CPU负载均衡之WALT学习【转】_mb5fdcad0be2e90的技术博客_51CTO博客

1、A task’s demand is the maximum of its contribution to the most recently completed window and its average demand over the past N windows.

WALT “forgets” blocked time entirely:即只统计runable和running time,可以对于Task的实际耗时有更准确的统计,可以通过demand预测;更新demand 通过函数account_busy_for_task_demand判断

linux/sched/walt.h

struct walt_task_struct {

...

}

2、CPU busy time - The sum of execution times of all tasks in the most recently completed window;WALT “forgets” cpu utilization as soon as tasks are taken off of the runqueue;

更新通过account_busy_for_cpu_time函数判断

struct walt_task_struct 、struct walt_rq 内嵌到tast_struct 和 struct rq 里面

walt_update_task_ravg 更新demand 和 cpu busy time

kernel-5.10/kernel_platform/msm-kernel/kernel/sched/walt/walt.c

1、

old_window_start = update_window_start(rq, wallclock, event);

根据当前时间wallclock 更新walt_rq 中当前窗口起始时间;

如果wallclock 和 walt_rq->window_start 间隔N(N>=1)个窗口周期,就需要walt_rq->window_start 向前偏移N个窗口周期;prev_window_size 赋值为窗口周期;

2、

2243      if (!wts->mark_start) {
2244          update_task_cpu_cycles(p, cpu_of(rq), wallclock);
2245          goto done;
2246      }

任务标记时间还没有开始,则根据cpu 周期更新rq 周期,再赋值给walt_task_struct 周期;

cycles cup周期;更新cycles 时时间last_cc_update (即为wallclock)

3、更新rq 和 task 运行时钟周期及窗口负载(执行算力*时间/理论最大执行算力*时间)

4、update_task_demand(p, rq, event, wallclock);

参考

https://www.cnblogs.com/lingjiajun/p/12317090.html

 如果不是新的窗口,执行add_to_task_demand ,等效这段时间中,满算力执行的时间,更新wts->sum

 

update_history(rq, p, wts->sum, 1, event);

第一部分

类似上面这个图 

walt 算法5 个窗口,这里将

hist[3] => 赋值给hist[4]

hist[2] => 赋值给hist[3]

...

hist[1] => 赋值给hist[2]

再将runtime 赋值给到hist[1]

sum 为 更新后hist数组和,max 为更新后hist数组最大值

 再根据配置,获取demand(等效最近5个窗口计算出来的负载)

第二部分

参考

https://www.cnblogs.com/lingjiajun/p/12317090.html

这里是核心的部分,有时间再慢慢看

pred_demand 用于EAS 

第三部分

直接根据结果更新walt_rq->walt_sched_stats

 337          stats->cumulative_runnable_avg_scaled + demand_scaled_delta;
338      s64 pred_demands_sum_scaled =
339          stats->pred_demands_sum_scaled + pred_demand_scaled_delta;

第四部分 

更新

Sched_Boost小结

调度器分支之RTG_内核工匠的博客-CSDN博客

在后续的kernel版本升级及代码演进中,又进行了一些功能的调整,比如在5.4内核上,引入skip_min来替代perferredcluster,并通过sched_min_task_util_for_colocation来过滤掉负载较低的任务,当任务负载低于sched_min_task_util_for_colocation时,其选核时的优先调度大核任然可以持续维持sched_task_unfilter_period的时间(这个名字也很有趣,不过滤的时间周期,迟滞一段时间)。整体功能并没有发生大的变化。

第六部分

这里就是完整窗口了及剩下的最后一个窗口

5、

update_cpu_busy_time(p, rq, event, wallclock, irqtime);

第一部分

一个新的窗口

第二部分

当前任务到了一个新窗口,需要更新prev 到curr ,curr 清零,不是当前任务不需要

 

第三部分

不是当前任务,更新,由于第二部分没有 更新prev 到curr ,curr 清零

if (!p_is_curr_task) {

...

}

是当前任务,更新,由于第二部分已经   更新prev 到curr ,curr 清零

.....

第四部分,有时间再慢慢看

 1853  done:
1854      if (!is_idle_task(p))
1855          update_top_tasks(p, rq, old_curr_window,
1856                      new_window, full_window);

6、有时间再慢慢看

不同算法对比:

                                         cfs                                            eas

task placement            task load (pelt)                   task demand(walt)

balance                        task load(pelt)                    task load(pelt)   

cupfreq                        task utility (pelt)                  task utility(walt)

 

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

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

相关文章

webgl-attribute、uniform、varying三者的区别

通用js: let canvas document.getElementById(webgl) canvas.width window.innerWidth canvas.height window.innerHeight let ctx canvas.getContext(webgl) attribute: 范围: 只适用于vertexShader,将js代码中的数据传递给vertexShader。 使用方…

知识图谱扩充|蜕变测试|蜕变关系

目录 前言:概念定义 什么是蜕变测试? 那么,怎么进行蜕变测试呢? 1. 生成蜕变关系 a 等价关系 b 混排关系 c 交集关系 d 并集关系 2. 生成蜕变用例 3. 执行蜕变用例 4. 校验蜕变关系 学术报告 一、蜕变测试MT 二、蜕变…

【id:32】【20分】B. Date(类与构造)

题目描述 下面是一个日期类的定义,请在类外实现其所有的方法,并在主函数中生成对象测试之。 注意,在判断明天日期时,要加入跨月、跨年、闰年的判断 例如9.月30日的明天是10月1日,12月31日的明天是第二年的1月1日 2月…

vue2路由(下)

编程式路由导航 通过点击按钮实现push和replace俩种模式的跳转 实现:就是通过$router原型里面的方法 也能实现路由的跳转和后退,分别采用的是$router里面的black和forward方法 感觉就是BOM对象中的history对象里面的方法 正是前进,后是后…

快鲸scrm | 三个步骤,快速打造企业长效私域营销阵地

快鲸scrm对企业微信私域流量玩法进行系统梳理,把企业微信用户运营拆解为“获客”、“转化”和“服务”这三个关键步骤,从点到面,为企业私域运营提供可行性的解决方案。 一、构建私域流量管理机制 用户是企业发展的基础,用户增长对…

三电技术之电控技术

三电技术之电控技术 1 基本功能 整车控制系统能够实现对汽车动力、舒适度、安全性以及能耗等多方面进行调整优化,配合大数据让电动汽车拥有更好的操作性和可靠性,具体来讲整车控制器对电动汽车主要有以下功能: 数据交互管理:整…

mybatis-plus-join MPJ连表查询 这样写太香了!

mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接,你还是得老老实实的打开xml文件,手写上一大段…

【unity实战】用对象池设计制作Dash冲锋残影的效果

什么是对象池? 在Unity中,对象池是一种重复使用游戏对象的技术。使用对象池的好处是可以减少游戏对象的创建和销毁,从而提高游戏的性能。如果不使用对象池,每次需要创建游戏对象时,都需要调用Unity的Instantiate函数,这会导致内存分配和垃圾回收的开销。而使用对象池,可…

李宏毅 深度学习【持续更新】

目录pytorch快速入门csdn快速入门OS包PIL包Opencv包Dataset类Tensorboard的使用torchvision.transforms 的使用torchvision中数据集的使用DataLoader的使用(torch.utils.data)神经网络的搭建nn.Module深度学习 李宏毅Chatgpt1 研究方向2 Chatgpt学习的步骤3 Fine tune vs. Prom…

【Linux内网穿透】使用SFTP工具快速实现内网穿透

文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术,可以使得内网服务可以被外网访问。以下是内网穿透的一些应用: 远程控制:通过内…

九【springboot】

Springboot一 Spring Boot是什么二 SpringBoot的特点1.独立运行的spring项目三 配置开发环境四 配置开发环境五 创建 Spring Boot 项目1.在 IntelliJ IDEA 欢迎页面左侧选择 Project ,然后在右侧选择 New Project,如下图2.在新建工程界面左侧&#xff0c…

深入理解PyTorch中的train()、eval()和no_grad()

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

【数据结构】栈的实现

😛作者:日出等日落 📘 专栏:数据结构 🌹 如果说,读书是在奠定人生的基石,在梳理人生的羽毛,那么,实践,就是在构建人生的厅堂,历练人生的翅膀。是不…

阿里P7晒工资条,看完好扎心了……

前几天,有位老粉私信我,说看到某95后学弟晒出阿里P7的工资单,他是真酸了…想狠补下技术,努力冲一把大厂。 为了帮到他,也为了大家能在最短的时间内做面试复习,我把软件测试面试系列都汇总在这一篇文章了。 …

自然语言处理: 知识图谱的十年

动动发财的小手,点个赞吧! NLP 中结合结构化和非结构化知识的研究概况 自 2012 年谷歌推出知识图谱 (KG) 以来,知识图谱 (KGs) 在学术界和工业界都引起了广泛关注 (Singhal, 2012)。作为实体之间语义关系的表示,知识图谱已被证明与…

ECharts 横向柱状图自动滚动

核心代码 const seriesList [120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 120, 200]; const xAxisList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; const dataZoomEndValue 6; // 数据窗口范围的结束数值(一次性展示几个) dataZoom: [{show: false, // 是否显示滑动…

Java面向对象高级【类加载器】

目录 Java程序是怎样被运行的 类加载器的作用 加载类文件 链接类 定位类 类加载器间的委派 实现类的隔离 类加载器的类型 启动类加载器(Bootstrap Class Loader) 扩展类加载器(Extension Class Loader) 应用程序类加载器…

数据结构和算法学习记录——二叉树的非递归遍历(中序遍历、先序遍历、后序遍历)

目录 中序遍历 代码实现 思路图解 先序遍历 代码实现 后序遍历 思路图解 二叉树的非递归遍历运用到堆栈 中序遍历 循环的思路是 遇到一个节点,就把它压栈,并去遍历它的左子树。当左子树遍历结束之后,从栈顶弹出这个节点并访问…

MybatisPlus主键策略

Mybatis默认主键策略是TableId(type IdType.ASSIGN_ID) 这是默认策略雪花算法 此时主键类型可以是String 数据表字段类型可以是bigint int varchar 无需数据表主键自增 TableId(type IdType.ASSIGN_AUTO) 是主键自增策略:该策略为跟随数据库表的主键递增策略&…

大数据挖掘建模平台产品功能特点

大数据挖掘建模平台是面向大数据挖掘教学实训的工具。在“泰迪杯”数据挖掘挑战赛中大多学生都有使用到该工具,平台采用可视化操作方式,通过丰富内置算法,帮助用户快速、一站式的进行数据分析及挖掘建模。可应用于处理海量数据、高复杂性的数…