[笔记]linux 内核调度策略

Linux2.6的系统时钟频率默认是1000HZ,即每1ms调用一次时钟中断处理程序,
    具体系统配置的时钟频率可以通过cat/boot/config-*|grep"^CONFIG_HZ="来获取

SCHED_OTHER(默认),SCHED_RR (也可使用)
    SCHED_OTHER、SCHED_FIFO、SCHED_RR、SCHED_BATCH、SCHED_IDLE

各调度策略简介
SCHED_OTHER 分时调度策略,也是所谓TSS调度策略。
    在RHEL5等Linux 2.6.23之前的内核优先为会话进程赋予执行权。TSS的时间片由优先级决定。
    在RHEL6等Linux 2.6.23之后的CFS中,会公平地为所有TSS策略的进程分配CPU时间。其时间片是动态决定的。

SCHED_FIFO 实时调度策略
    具有静态优先级的调度策略。Linux内核中能够为实时调度策略的进程指定的优先级为1~99。
    使用了SCHED_FIFO调度策略的进程,除了等待I/O完成时休眠、自发休眠或优先级更高的实时进程获得优先权以外,不会释放执行权。
    使用SCHED_FIFO的实时调度策略时,需要注意的是,它的进程不会自动释放CPU,也就是说执行权不会转移到其他进程。
    例如,实时调度策略的进程陷入无限循环时,其他所有优先级较低的进程永远不会被赋予执行权,此时系统就会死机。
    小贴士:另外,要对进程使用实时调度策略,必须有root权限。

SCHED_RR(
round robin 循环轮询) 实时调度策略, 时间片轮转
    与SCHED_FIFO不同的是,它具有时间片,时间片使用完时,执行权将转移到其他进程。
    在2.6.23以前导入的O(1)调度程序中,时间片是由优先级决定的。
    引入CFS时SCHED_RR的调度策略也进行了修改,时间片变为固定值(100毫秒)。

SCHED_BATCH
    指定这个调度策略的进程不是会话型,不会根据休眠时间更改优先级。
    例如,备份处理等需要进行较大文件或大量文件存取的进程,是通过磁盘I/O来中止的。
    在TSS调度策略中,因为这个休眠,正在进行备份处理的进程优先级提高,需要应答性的shell的优先级相对降低。导致系统应答性降低。
    使用了这个调度策略的进程被识别为休眠时间为0的CPU bound进程。因此,优先级必然会变成比会话型shell进程低。
    对非会话型的进程(即所谓的补丁处理)使用这个调度策略,就可以使会话型进程的优先级保持相对较高,并确保应答性。
    在Linux 2.6.23导入的CFS中,对进行补丁处理的进程改变了处理的方法,优先级不会因休眠时间而发生变化。在导入CFS的RHEL6中,SCHED_BATCH和SCHED_OTHER几乎没有区别,因此可以不使用。

SCHED_IDLE 是由CFS导入的新等级
    CPU空闲时,即SCHED_IDLE等级以外处于可执行状态的进程消失时,将被赋予执行权。也就是它将成为优先级最低的进程。
    特殊标志:SCHED_RESET_ON_FORK
    为了限制实时调度策略的进程运行,而为调度策略添加了标志flag。设置了标志flag的实时调度策略进程,在执行fork()时,新生成的子进程就成为SCHED_OTHER策略的进程。
    如下例所示,通过向实时调度策略添加标志flag来设置。
    sched_setscheduler(pid, SCHED_FIFO|SCHED_RESET_ON_FORK, ¶m);




参考
linux内核调度算法(1)--快速找到最高优先级进程

请使用浏览器的分享功能分享到微信等