Linux CFS调度器之虚拟运行时间vruntime

CFS简介


Linux中大名鼎鼎的CFS调度器是专门为普通进程设计的调度器,CFS调度器的核心是虚拟运行时间vruntime。虚拟运行时间一方面跟进程运行时间有关,另一方面跟进程优先级有关,总的来说,进程占用CPU时间越长,进程优先级越低,其vruntime就越大。vruntime越小,代表CPU对进程的宠幸越少,那么后续就需要优先宠幸它;反之,vruntime越大,代表CPU对进程的宠幸越多,那么后续就需要对它做出一定的惩罚,减少对它的宠幸。CFS调度器就是要在各个进程间维持一种相对的公平,既不能过多宠幸某个进程,也不多过分亏欠某个进程,所有进程同属于一个大家庭,任何一个进程受到亏欠,都会影响整个大家庭。

所有的普通进程以vruntime为键值加入红黑树,vruntime越小,在红黑树的位置越靠左,vruntime越大,在红黑树的位置越考右。CFS调度器从最左边的进程开始调度,进程被调度后,vruntime增加,进程因而向右移动。

更新虚拟运行时间


update_curr函数更新虚拟运行时间,更新虚拟运行时间的时机有很多,主要有以下几种:

  • 定时器tick中断中
 task_tick_fair->entity_tick(cfs_rq, se, queued);->update_curr(cfs_rq);
  • 进程入CFS调度队列的时候
enqueue_task_fair->enqueue_entity(cfs_rq, se, flags);->update_curr(cfs_rq);
  • 进程出CFS调度队列的时候
dequeue_task_fair->dequeue_entity(cfs_rq, se, flags);->update_curr(cfs_rq);
  • 进程创建的时候
task_fork_fair->update_curr(cfs_rq);

更新虚拟运行时间的函数如下,逻辑并不复杂,我们下面详细分析:

static void update_curr(struct cfs_rq *cfs_rq)
{
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值