ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

调度器30—调度相关结构体—struct sched_entity

2022-07-23 20:36:59  阅读:150  来源: 互联网

标签:sched struct exec sum 调度 runtime cfs se rq


一、struct sched_entity

1. se->sum_exec_runtime

表示实际running的时间,不包括runnable时间。

(1) sum_exec_runtime 的更新逻辑

void set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
{
    ...
    update_stats_curr_start(cfs_rq, se);
    /* 选中当前se去运行 */
    cfs_rq->curr = se;
    ...
    /* 新的一次运行开始的时候才将sum值赋值给prev_sum */
    se->prev_sum_exec_runtime = se->sum_exec_runtime;
}

static inline void update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se)
{
    /* We are starting a new run period:*/
    se->exec_start = rq_clock_task(rq_of(cfs_rq)); //return rq->clock_task;
}

static void update_curr(struct cfs_rq *cfs_rq)
{
    struct sched_entity *curr = cfs_rq->curr;
    u64 now = rq_clock_task(rq_of(cfs_rq));
    u64 delta_exec;
    ...
    
    /* 在核间迁移时,调整的是 exec_start, sum_exec_runtime 是单调累加的,核间迁移也不影响 */
    delta_exec = now - curr->exec_start;
    ...
    curr->exec_start = now;
    ...
    /* 更新任务累计的运行时间 */
    curr->sum_exec_runtime += delta_exec;

    /* 更新 se 的虚拟时间 */
    curr->vruntime += calc_delta_fair(delta_exec, curr);
    update_min_vruntime(cfs_rq);
    ...
}

(2) 实验

# echo lock > /sys/power/wake_lock

//搞5个死循环,掐秒表10s
# let i=0; while true; do let i=i+1; done &
//5个死循环绑定cpu1
# taskset -p 01 24961

10测试前:
# for P in 24937 24940 24946 24955 24961; do cat /proc/$P/sched | grep se.sum_exec_runtime; done;
se.sum_exec_runtime                          :         59548.030554
se.sum_exec_runtime                          :         43598.199964
se.sum_exec_runtime                          :         38325.025722
se.sum_exec_runtime                          :         31508.426646
se.sum_exec_runtime                          :         28923.228260
10测试后:
# for P in 24937 24940 24946 24955 24961; do cat /proc/$P/sched | grep se.sum_exec_runtime; done;
se.sum_exec_runtime                          :         61571.478979
se.sum_exec_runtime                          :         45617.150613
se.sum_exec_runtime                          :         40347.151159
se.sum_exec_runtime                          :         33529.815536
se.sum_exec_runtime                          :         30944.450859

10s后        10s前        delta
61571.47898    59548.03055    2023.448425
45617.15061    43598.19996    2018.950649
40347.15116    38325.02572    2022.125437
33529.81554    31508.42665    2021.38889
30944.45086    28923.22826    2021.222599

可以看到,统计到的每个进程的运行时间是2s,而不是10s,验证了的确是运行时间不包括runnable时间。

 

标签:sched,struct,exec,sum,调度,runtime,cfs,se,rq
来源: https://www.cnblogs.com/hellokitty2/p/16512917.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有