linux cfs scheduler

Linux调度相关模块组件图

    linux cfs scheduler

  80% of CFS's design can be summed up in a single sentence: CFS basically models an "ideal, precise multi-tasking CPU" on real hardware.

   和以前在老的linux 2.6内核中使用的O(1)调度器不同,CFS调度器实现并不是基于run queues。事实上,CFS使用红黑树实现将来任务执行的时间线。同时,CFS使用了纳秒级的统计粒度。

主要特性:

模块化调度程序

完全公平调度

CFS组调度

算法:

scheduler将任务记录存储在一棵红黑树中,使用所花费的处理器时间作为键值。使用处理器时间最少的进程为红黑树中最左叶子节点。所选择的进程leftmost leaf node 从树中移除,花费的执行时间更新,然后再次添加到树中,通常与上次所添加的节点位置不同。不断反复。

如果一个任务大部分时间都在睡眠,则其花费时间值就低,那么其自动获得优先级加速当他需要的时候。所以这种任务较之于不断运行的任务并没有获得更少的处理器时间。

CFS调度程序使用安抚策略确保公平性。当某个任务进入运行队列后,将记录当前时间,但某个进程等待CPU时,将对这个进程的wait_runtime值加一个数,这个数取决于运行队列当前的进程数。当执行这些计算时,也将考虑不同任务的优先级值。将这个任务调度到CPU后,它的wait_runtime值开始递减,当这个值递减到其他任务成为红黑树的最左侧任务时,当前任务被抢占。通过这种方式,CFS努力实现一种理想状态,即wait_runtime值为0!

 

 

你可能感兴趣的:(linux cfs scheduler)