linux 负载

负载定义

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值