CPU的进程调度策略
For real time scheduling #实时进程
SCHED_RR
#论寻
Round-robin fashion,each process gets a max CPU time
SCHED_FIFO
#队列,先进先出
#这个是我就一直占着,除非我做完了,你们才能用CPU。但是如果这个进程有严重的I/O延迟,系统会自动的调另一个上去。或者这个进程用sched_yield函数把CPU隔一段时间分出去。或者它被高优先级的进程取代。
Runs until blocked by I/O,calls sched_yield or preempted by a higher priority process
For general scheduling #普通非实时进程
SCHED_NORMAL
For general applocations,standard round-robin policy
SCHED_BATCH
#这个是特殊的,这个是针对批量的处理的操作的进程。比如对数据进行压缩,合并等等。不能中断,而且运行时间较久。如果运用了这个策略,CPU会相应的照顾到这些进程。
For batch style process,tuned to not be preempted tpp often,tacks run longer,
make bette use of caches
SCHED_IDLE
#这个是针对那些nice小于19的【这个19是最小的】
For low priority applications,with a very low priority(lower than nice 19)
测试:
[[email protected] ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 1
CPU socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 13
Stepping: 3
CPU MHz: 2294.786
BogoMIPS: 4589.57
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0,1
我们有两个CPU,所以要把两个CPU占满以测试。
使用FIFO的调度算法:
[[email protected] ~]# chrt -f 10 top
从列出的信息可以看出来,top的优先级还是比较高的。
但是运行下面的命令后:
[[email protected] ~]# chrt -f 1 md5sum /dev/zero &
[1] 1885
[[email protected] ~]# chrt -f 1 md5sum /dev/zero
发现md5sum这两条指令一直占着CPU的最高优先级,一直比TOP高。
之后运行:
[[email protected] ~]# chrt -r 1 sha1sum /dev/zero
发现top命令里,看不见sha1sum的进程被CPU调度。
使用论寻的调度算法:
[[email protected] ~]# chrt -r 1 md5sum /dev/zero &
[1] 1885
[[email protected] ~]# chrt -r 1 md5sum /dev/zero
之后运行:
[[email protected] ~]# chrt -r 1 sha1sum /dev/zero
可以发现3个进程一直被CPU调度着。