Linux CFS调度算法之虚拟时钟vruntime

    参考网址:https://blog.csdn.net/gatieme/article/details/52067748

    1.cfs调度算法

        系统使用fair_sched_class调度类调度管理普通进程,采用的策略有:SCHED_NOMAL和SCHED_BATCH。

    CFS调度算法采用红黑树方式组织进程或进程组,红黑树的键值为虚拟时间:vruntime。虚拟时间越小,越靠近红黑树的最左边,那么越容易被调度执行。注意只有等待cpu的就绪态进程在这棵树上,睡眠进程和正在运行的进程都不在树上。

    2.vuntime-虚拟运行时间

    vruntime在时钟中断中周期性的更新,update_curr->calc_delta_fair函数中计算虚拟时间:

    (1)curr.nice != NICE_0_LOAD

            curr->vruntime += delta_exec*(NICE_0_LOAD/curr->se->load.weight)

    (2)curr.nice == NICE_0_LOAD

            curr->vruntime += delta_exec

        delta_exec:curr进程在CPU上运行的时间

    优先级越高,权重越大,vruntime行走的就越慢,那么在红黑树种向右移动的速度就越慢,cpu调度该进程的几率就越大。

    进程入就绪队列和出就绪队列的时候,也会调用update_curr更新虚拟时间

    3.调度周期

   sysctl_sched_latency: 调度延迟:保证每个可运行的进程应该至少运行一次的某个时间间隔,可以通过/proc/sys/kernel/sched_latency_ns查看和修改。换句话说:就绪队列中多有进程运行一遍所需要的时间,这个是经验值:sum_runtime。

    sched_nr_latency:延迟周期中处理的最大活动进程数目。

    sum_runtime(就绪队列中所有进程运行一遍所用的时间):

    (1)就绪队列中进程数目>sched_nr_latency,sum_runtime = sysctl_sched_min_granularity*nr_running

    (2)就绪队列中进程数目<sched_nr_latency,sum_runtime = sysctl_sched_latency

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值