2011-11-04 37 views
13

我是一个初学者到Linux内核,我努力学习如何Linux的时间表过程。的Linux CFS(完全公平调度器)延迟

我读过一些书上的Linux内核,并通过从IBM http://www.ibm.com/developerworks/linux/library/l-cfs/,所有的环节了,但我还是留下了一些疑问。

  1. 调度程序如何安排sysctl_sched_latency时间内的所有任务?
  2. 当一个进程被唤醒究竟在place_entity功能呢?
  3. 当一个进程被唤醒,为什么是vruntimesched_latency减去调整?不能导致运行队列中的进程在vruntime值有很大差异吗?

回答

10

首先任务

    理论上
  • 的虚拟运行时间是当任务将开始执行 其下一个时间片理论上完美的多线程CPU上。
  • 在实践中它的实际运行时间归到正在运行的任务

1总数如何进行调度安排所有的 sysctl_sched_latency时间内的任务?

它维护一个时间排序的红色和黑色的树,其中所有可运行的任务是 按其虚拟运行时间排序。左边的节点已经运行了最短的时间。 CFS挑选最左边的任务,并运行它,直到任务计划或调度蜱 那么CPU时间花在它被添加到其虚拟运行时中运行。 当它不再是最左边的节点时,则运行具有最短虚拟的新任务,并且旧的任务被预充电。

2.当一个进程被唤醒究竟在place_entity功能呢?

短版:

当一个进程被唤醒的place_entity功能要么保留 任务的虚拟运行,因为它是或增加它。

龙版本:

当一个进程被唤醒的place_entity功能做以下的事情

  1. 初始化临时虚拟运行时最小的任务的CFS运行队列的虚拟运行。

  2. 由于睡眠时间少于一个延迟时间不计算,所以 将初始化阈值变量初始化为sysctl_sched_latency。 如果启用GENTLE_FAIR_SLEEPERS功能,那么 则是该变量值的一半。 用此阈值减少先前初始化的临时虚拟运行时间。

  3. 确保临时虚拟运行时间至少等于任务的虚拟运行时,通过计算虚拟运行时间设置为最大的本身和任务的虚拟运行。

  4. 设置任务的虚拟运行到临时运行。

3.当一个进程被唤醒,为什么是vruntime由sched_latency减去调整?

虚拟运行时间递减,因为睡眠不足单等待时间不计。 例如,如果它的 只睡眠一个调度程序延迟,那么该任务不应在红黑树中更改其位置。

能4.不是导致在运行队列中vruntime值差异较大的过程?

相信在步骤3对问题2所述的逻辑,防止或至少最小化。

参考

sched.c Linux Kernel Source

sched_fair.c Linux Kernel Source

Notes on the CFS Scheduler Design

+0

回答问题1并没有真正回答关于内'sysctl_sched_latency' CFS调度。 – kavadias