CPU的進程調度策略

CPU的進程調度策略node


For real time scheduling #實時進程 算法

SCHED_RRapp

#論尋socket

Round-robin fashion,each process gets a max CPU time函數


SCHED_FIFO測試

#隊列,先進先出ui

#這個是我就一直佔着,除非我作完了,大家才能用CPU。可是若是這個進程有嚴重的I/O延遲,系統會自動的調另外一個上去。或者這個進程用sched_yield函數把CPU隔一段時間分出去。或者它被高優先級的進程取代。spa

Runs until blocked by I/O,calls sched_yield or preempted by a higher priority processserver


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調度着。

相關文章
相關標籤/搜索