首页 > 系统服务 > 详细

LINUX CFS 调度tick逻辑

时间:2019-11-19 21:43:20      阅读:103      评论:0      收藏:0      [点我收藏+]
  1. 计算当前task在这个tick周期实际用时delta_exetime, 更新当前task的vruntime;
  2. 根据权重,重新计算调度period,计算当前task的应得时间片slice(idle_runtime,实际时间片);
  3. 若delta_exetime大于slice,则切下一个任务;否则继续检查4;
  4. 若delta_exetime小于最小调度粒度:0.75ms(sysctl_sched_min_granularity),则不切下一个任务;否则继续检查5;
  5. 取出run queue的rq_se(__pick_first_entity),比较curr_se和rq_se的vruntime,若curr_se->vruntime小于rq_se->vruntime,则不切下一个任务,否则继续检查6;
  6. 若curr_se->vruntime - rq_se->vruntime 大于 slice, 则切入下一个任务;

为啥第6点直接用 “虚拟时间差值” 与 “实际时间片” 作比较???是否会有误差?

参考:http://www.wowotech.net/process_management/452.html

内核代码:fair.c -> check_preempt_tick()

LINUX CFS 调度tick逻辑

原文:https://www.cnblogs.com/zengjianrong/p/11892329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!