博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 负载
阅读量:4192 次
发布时间:2019-05-26

本文共 1022 字,大约阅读时间需要 3 分钟。

负载定义

load_avg/util_avg

include/linux/sched.h有定义

struct sched_avg {

在这里插入图片描述

load_avg 包含进程睡眠所花的时间

runnalbe_load_avg只包含任务在rq上面所花费的时间

代码区别查看分析确认:

util_sum仅考虑running时间
load_sum 包含running+runnable

contribut=delda_time * scale_freq;

sa->load_sum += load * contrib;

数据结构

task_struct -> sched_entity -> sched_avg

cfs_rq-> sched_entity(curr, last, next)->
-> sched_avg

在这里插入图片描述

在这里插入图片描述

和cgoup的关系

负载更新流程梳理

load_sum load_avg流程

说明:包含睡眠进程的时间

__update_load_avg_se -》 ___update_load_sum (kernel/sched/pelt.c)

1) 唤醒时计算睡眠任务时间

enqueue_entity_fair -> enqueue_entity-> update_load_avg-> __update_load_avg_se -> __update_load_avg_se
-> update_cfs_rq_load_avg — 更新rq上面的负载
如下: runnalbe 参数和 running 参数都被设置成0, 因为 on_rq为0
在这里插入图片描述

最终会调用accumulate_sum对负载进行计算:

如下有两个runnable和running参数决定如何对running任务以及runnable任务进行计算

在这里插入图片描述

入队时, runnable和running都被设置成0,所以不会更新这个两部分负载。注意load_sum会被无条件追加, 从这里可以看出load_sum是会被加上睡眠时间的。

在这里插入图片描述

在这里插入图片描述

注意:load_sum完全是统计时间没有包含load.

load_avg 是和weight相乘之后得到的值。

如下为rq上面负载更新流程,可以看出load_sum* weight 了。

在这里插入图片描述

从running 编程runnable

在这里插入图片描述

参考资料

内核工匠 pelt算法浅析

https://www.cnblogs.com/Linux-tech/p/13873884.html

你可能感兴趣的文章
小孩编程积木玩具
查看>>
科学育儿书籍
查看>>
emacs 学习
查看>>
cygwin
查看>>
内核页表
查看>>
github
查看>>
sublime
查看>>
linux 内存函数
查看>>
sdcardfs
查看>>
csdn 代码拷贝编译错误解决方法
查看>>
软件开发经典书籍
查看>>
spinlock原理
查看>>
dup源码分析
查看>>
try_to_wakeup 选择其他核运行逻辑
查看>>
2021-03-28
查看>>
rtlinux
查看>>
OPPO Reno3系列旗舰官宣:骁龙765G+正反双曲面设计
查看>>
一加8系列新机有望亮相CES 2020:全系支持5G网络
查看>>
称对方攀附使用近似商标 “汽车之家”起诉索赔500万
查看>>
三星突然发布Galaxy S10 Lite和Note 10 Lite:有不同也有所同
查看>>