具体系统配置的时钟频率可以通过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)--快速找到最高优先级进程