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