本系列文章阅读的core是:2.6.32-220
这里使用“模型”而不是“算法”是因为这东西实在不好用算法描述(但是它却运行得很好,包括性能)。
核心思想: 把CPU总时间按运行队列的所有se的权重分配给每个se。 每个se使用cpu的顺序由它们已使用的cpu虚拟时间(vruntime)决定的,已使用的虚拟时间越少,它在运行队列的位置越靠左,那么它再次被调度执行的概率也就越高。每个se每次占用cpu后能够执行的时间(ideal_runtime)也由它们的权重决定,并且保证在某个时间周期(__sched_period)内运行队列里的所有se都能够至少被调度执行一次。并且为了保证新进程能够获得合理的vruntime(不至于一开始太小导致长期占用cpu,以及不同组之间的迁移的标准化),在每个cfs_rq上维护一个min_vruntime,所有的se vruntime的调整按它自己的cfs_rq的min_vruntime为基准。
从上面的思想中,我们可以得到下面几个关系:
vruntime增长速率决定了进程被调度的次数,而这个增率又是由进程的权重决定的,权重越大(优先
这里使用“模型”而不是“算法”是因为这东西实在不好用算法描述(但是它却运行得很好,包括性能)。
核心思想: 把CPU总时间按运行队列的所有se的权重分配给每个se。 每个se使用cpu的顺序由它们已使用的cpu虚拟时间(vruntime)决定的,已使用的虚拟时间越少,它在运行队列的位置越靠左,那么它再次被调度执行的概率也就越高。每个se每次占用cpu后能够执行的时间(ideal_runtime)也由它们的权重决定,并且保证在某个时间周期(__sched_period)内运行队列里的所有se都能够至少被调度执行一次。并且为了保证新进程能够获得合理的vruntime(不至于一开始太小导致长期占用cpu,以及不同组之间的迁移的标准化),在每个cfs_rq上维护一个min_vruntime,所有的se vruntime的调整按它自己的cfs_rq的min_vruntime为基准。
从上面的思想中,我们可以得到下面几个关系:
vruntime增长速率决定了进程被调度的次数,而这个增率又是由进程的权重决定的,权重越大(优先