基于Linux 4.5的进程模型与调度器分析(4)

    每个调度器包括两个内容:调度框架(其实质就是两个函数框架)及调度器类。

    Linux的6种调度策略: 调度策略   描述  

所在调度器类

 
SCHED_NORMAL   (也叫SCHED_OTHER)用于普通进程,通过CFS调度器实现。SCHED_BATCH用于非交互的处理器消耗型进程。SCHED_IDLE是在系统负载很低时使用   CFS  
SCHED_BATCH   SCHED_NORMAL普通进程策略的分化版本。采用分时策略,根据动态优先级(可用nice()API设置),分配CPU运算资源。注意:这类进程比上述两类实时进程优先级低,换言之,在有实时进程存在时,实时进程优先调度。但针对吞吐量优化, 除了不能抢占外与常规任务一样,允许任务运行更长时间,更好地使用高速缓存,适合于成批处理的工作   CFS  
SCHED_IDLE   优先级最低,在系统空闲时才跑这类进程(如利用闲散计算机资源跑地外文明搜索,蛋白质结构分析等任务,是此调度策略的适用者)   CFS-IDLE  
SCHED_FIFO   先入先出调度算法(实时调度策略),相同优先级的任务先到先服务,高优先级的任务可以抢占低优先级的任务   RT  
SCHED_RR   轮流调度算法(实时调度策略),后者提供 Roound-Robin 语义,采用时间片,相同优先级的任务当用完时间片会被放到队列尾部,以保证公平性,同样,高优先级的任务可以抢占低优先级的任务。不同要求的实时任务可以根据需要用sched_setscheduler() API设置策略   RT  
SCHED_DEADLINE   新支持的实时进程调度策略,针对突发型计算,且对延迟和完成时间高度敏感的任务适用。基于Earliest Deadline First (EDF) 调度算法   DL  
    Linux的5种调度类: 调度器类   描述   对应调度策略  
stop_sched_class   优先级最高的线程,会中断所有其他线程,且不会被其他任务打断作用
1.发生在cpu_stop_cpu_callback 进行cpu之间任务migration
2.HOTPLUG_CPU的情况下关闭任务
  无, 不需要调度普通进程  
dl_sched_class   采用EDF最早截至时间优先算法调度实时进程   SCHED_DEADLINE  
rt_sched_class   采用提供 Roound-Robin算法或者FIFO算法调度实时进程
具体调度策略由进程的task_struct->policy指定
  SCHED_FIFO, SCHED_RR  
fair_sched_clas   采用CFS算法调度普通的非实时进程   SCHED_NORMAL, SCHED_BATCH  
idle_sched_class   采用CFS算法调度idle进程, 每个cup的第一个pid=0线程:swapper,是一个静态线程。调度类属于:idel_sched_class,所以在ps里面是看不到的。一般运行在开机过程和cpu异常的时候做dump   SCHED_IDLE  

其所属进程的优先级顺序为:

stop_sched_class -> dl_sched_class -> rt_sched_class -> fair_sched_class -> idle_sched_class

Linux的3种调度实体:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12804.html