首页 > 代码库 > CPU的进程调度策略

CPU的进程调度策略

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)



测试:

[root@server19 ~]# 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的调度算法:


[root@server19 ~]# chrt -f 10 top


从列出的信息可以看出来,top的优先级还是比较高的。

但是运行下面的命令后:


[root@server19 ~]# chrt -f 1 md5sum /dev/zero &

[1] 1885

[root@server19 ~]# chrt -f 1 md5sum /dev/zero


发现md5sum这两条指令一直占着CPU的最高优先级,一直比TOP高。


之后运行:

[root@server19 ~]# chrt -r 1 sha1sum /dev/zero

发现top命令里,看不见sha1sum的进程被CPU调度。


使用论寻的调度算法:


[root@server19 ~]# chrt -r 1 md5sum /dev/zero &

[1] 1885

[root@server19 ~]# chrt -r 1 md5sum /dev/zero


之后运行:

[root@server19 ~]# chrt -r 1 sha1sum /dev/zero


可以发现3个进程一直被CPU调度着。

CPU的进程调度策略