成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何理解Linux之進(jìn)程優(yōu)先級PR和NI

本篇內(nèi)容主要講解“如何理解Linux之進(jìn)程優(yōu)先級PR和NI”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何理解Linux之進(jìn)程優(yōu)先級PR和NI”吧!

創(chuàng)新互聯(lián):于2013年創(chuàng)立為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為數(shù)千家公司企業(yè)提供了專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)和網(wǎng)站推廣服務(wù), 按需求定制開發(fā)由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

    JDK中線程有優(yōu)先級,0-10,10表示優(yōu)先級最大,而在Linux中則值最小表示優(yōu)先級最高,優(yōu)先級高的占用CPU的時(shí)間多。

    Linux中有PR和NI,在top命令的結(jié)果中就可以看到,如下圖1是top的結(jié)果,可以看到NI和PR的列值:

如何理解Linux之進(jìn)程優(yōu)先級PR和NI

       圖1

    先來搞清楚PR(priority)和NI(nice)值的區(qū)別

nice值

    這是一個(gè)反應(yīng)進(jìn)程優(yōu)先級狀態(tài)的值,范圍在-20到19,即總共有40個(gè)值,值最小,優(yōu)先級最高,默認(rèn)值是0

nice值雖然不是priority值,但是它可以影響進(jìn)程優(yōu)先級

    nice值越低的進(jìn)程搶占CPU的能力越強(qiáng),而nice值越高的進(jìn)程搶占CPU的能力越弱

    在原來O1調(diào)度的Linux上,nice值也叫靜態(tài)優(yōu)先級,一旦設(shè)置了,除非手動(dòng)renice修改值,否則不會改變;在priority值在O1調(diào)度的Linux上,值是會變的,所以也叫動(dòng)態(tài)優(yōu)先級。

    在linux上,renice  10  pid,這樣就可以將pid的那個(gè)進(jìn)程的優(yōu)先級設(shè)置為10,renice設(shè)置值的時(shí)候只能設(shè)置為值更大的值,比如之前的值是5,之后的值設(shè)置為10是可以的,但是設(shè)置為-10是不可以的,會報(bào)沒有權(quán)限的錯(cuò)誤,除非使用root用戶。 

實(shí)時(shí)操作系統(tǒng)

    實(shí)時(shí)操作系統(tǒng)需要保證相關(guān)的實(shí)時(shí)進(jìn)程在較短的時(shí)間內(nèi)響應(yīng),不會有較長的延時(shí),并且要求最小的中斷延時(shí)和進(jìn)程切換延時(shí)。對于這樣的需求,一般的進(jìn)程調(diào)度算法,無論是O1還是CFS都是無法滿足的,所以內(nèi)核在設(shè)計(jì)的時(shí)候,將實(shí)時(shí)進(jìn)程單獨(dú)映射了100個(gè)優(yōu)先級,這些優(yōu)先級都要高于正常進(jìn)程的優(yōu)先級(nice值),而實(shí)時(shí)進(jìn)程的調(diào)度算法也不同,它們采用更簡單的調(diào)度算法來減少調(diào)度開銷。

    由于實(shí)時(shí)進(jìn)程,無論是O1還是CFS調(diào)度,都滿足不了,所以給它們分配0-100的值優(yōu)先級,使用簡單的調(diào)度算法,來減少開銷。

    實(shí)時(shí)進(jìn)程和非實(shí)時(shí)進(jìn)程的區(qū)分是通過優(yōu)先級來區(qū)分的,0-99的都是實(shí)時(shí)進(jìn)程,而100-139的都是非實(shí)時(shí)進(jìn)程,NICE的-20~19對應(yīng)著100~139,如果PR列中看到的是'rt',那么說明這個(gè)任務(wù)/進(jìn)程是realtime進(jìn)程,即實(shí)時(shí)進(jìn)程,有時(shí)候會看到PR的值不是數(shù)值,而是rt的。

    如下List-1中所示,policy options部分,系統(tǒng)給進(jìn)程5種調(diào)度策略,這5中調(diào)度策略是給倆中進(jìn)程使用的,實(shí)時(shí)進(jìn)程:SCHED_FIFO、SCHED_RR,而對于非實(shí)時(shí)進(jìn)程則是:SCHED_OTHER、SCHED_OTHER、SCHED_IDLE。

    List-1

mjduan@dmj:/mnt/sdb1/doc/minedoc$ chrt --help
Show or change the real-time scheduling attributes of a process.

Set policy:
 chrt [options] <priority> <command> [<arg>...]
 chrt [options] --pid <priority> <pid>

Get policy:
 chrt [options] -p <pid>

Policy options:
 -b, --batch          set policy to SCHED_BATCH
 -d, --deadline       set policy to SCHED_DEADLINE
 -f, --fifo           set policy to SCHED_FIFO
 -i, --idle           set policy to SCHED_IDLE
 -o, --other          set policy to SCHED_OTHER
 -r, --rr             set policy to SCHED_RR (default)

Scheduling options:
 -R, --reset-on-fork       set SCHED_RESET_ON_FORK for FIFO or RR
 -T, --sched-runtime <ns>  runtime parameter for DEADLINE
 -P, --sched-period <ns>   period parameter for DEADLINE
 -D, --sched-deadline <ns> deadline parameter for DEADLINE

Other options:
 -a, --all-tasks      operate on all the tasks (threads) for a given pid
 -m, --max            show min and max valid priorities
 -p, --pid            operate on existing given pid
 -v, --verbose        display status information

 -h, --help           display this help
 -V, --version        display version

For more details see chrt(1).

    系統(tǒng)的整體調(diào)度策略:

  1.     如果系統(tǒng)中存在要執(zhí)行的實(shí)時(shí)進(jìn)程,那么執(zhí)行實(shí)時(shí)進(jìn)程

  2.     直到實(shí)時(shí)進(jìn)程退出或者主動(dòng)讓出CPU時(shí),才會調(diào)度執(zhí)行非實(shí)時(shí)進(jìn)程

sched_fifo: 是實(shí)時(shí)進(jìn)程的調(diào)度策略之一,使用FIFO的策略,在優(yōu)先級一樣的情況下,誰先進(jìn)入隊(duì)列那么那個(gè)先被調(diào)度

sched_rr: 是實(shí)時(shí)進(jìn)程調(diào)度策略之一,使用時(shí)間分片的策略,默認(rèn)是100ms,這種策略簡單,適合實(shí)時(shí)進(jìn)程延時(shí)小的特點(diǎn)

    Linux上更麻煩的是非實(shí)時(shí)調(diào)度策略,linux上很多進(jìn)程都是非實(shí)時(shí)進(jìn)程,它們的主要調(diào)度算法是O1和CFS調(diào)度策略

O1調(diào)度策略

    是2.6內(nèi)核版本引入的,到2.6.63就被替換為CFS了

    命名為O1是因?yàn)樗惴ǖ臅r(shí)間復(fù)雜度是O1,使用時(shí)間分片思路來,將cpu的時(shí)間分為一小段一小段,每個(gè)進(jìn)程占用一段時(shí)間分片,對于多核的來說,對每個(gè)cpu進(jìn)行這樣時(shí)間分片即可。優(yōu)先級是怎么處理的呢:優(yōu)先級高的時(shí)間分片占用多,反之占用少

CFS完全公平調(diào)度

    O1對多核、多CPU支持的不好,性能不好,此外linux內(nèi)核還要加上cgroup的功能,所以被替換為了CFS,Linux在2.6.23之后開始啟用CFS作為對一般優(yōu)先級(SCHED_OTHER)進(jìn)程調(diào)度方法

    CFS調(diào)度策略會收集虛擬時(shí)間,然后構(gòu)建紅黑樹red-block tree,虛擬時(shí)間就是紅黑樹的key,所以虛擬時(shí)間越短的會在紅黑樹的最左邊,查詢的時(shí)間復(fù)雜度是Log(N)。

    大致是這樣的,會根據(jù)當(dāng)前進(jìn)程的優(yōu)先級和執(zhí)行時(shí)間,來生成一個(gè)虛擬時(shí)間,對每個(gè)進(jìn)程都是如此,最后構(gòu)建紅黑樹,紅黑樹中左邊的進(jìn)程表示虛擬時(shí)間值小,表示大部分時(shí)候在占用cpu,而右邊的進(jìn)程表示虛擬時(shí)間大,當(dāng)一個(gè)虛擬時(shí)間小的進(jìn)程在占用cpu時(shí),如果此時(shí)一個(gè)虛擬時(shí)間大的進(jìn)程變得可運(yùn)行,那么這個(gè)虛擬時(shí)間大的就會搶占cpu,即系統(tǒng)總是調(diào)度虛擬時(shí)間比較小的進(jìn)程

 如何理解Linux之進(jìn)程優(yōu)先級PR和NI

                                                              圖2

    多核cpu情況下,CFS是怎么優(yōu)化性能的,每個(gè)cpu會維護(hù)一個(gè)調(diào)度隊(duì)列,避免使用全局隊(duì)列而出現(xiàn)爭搶的鎖問題,但是每個(gè)cpu一個(gè)隊(duì)列之后,就有可能出現(xiàn)負(fù)載不均衡,所以系統(tǒng)需要定期對各個(gè)cpu隊(duì)列進(jìn)行平衡

    如下List-2中,使用chrt命令查看進(jìn)程的優(yōu)先級是0,調(diào)度算法是CFS

    List-2

mjduan@dmj:/mnt/sdb1/doc/minedoc$ jps
26960 Main
12642 Jps
27090 Main
890 RemoteJdbcServer
31980 Launcher
mjduan@dmj:/mnt/sdb1/doc/minedoc$ chrt -p 27090
pid 27090's current scheduling policy: SCHED_OTHER
pid 27090's current scheduling priority: 0
mjduan@dmj:/mnt/sdb1/doc/minedoc$ chrt -p 890
pid 890's current scheduling policy: SCHED_OTHER
pid 890's current scheduling priority: 0
補(bǔ)充

    如果需要調(diào)度的進(jìn)程個(gè)數(shù)為n,那么平均每個(gè)進(jìn)程占用的CPU時(shí)間為sched_latency_ns/n。顯然,每個(gè)進(jìn)程實(shí)際占用的CPU時(shí)間會因?yàn)閚的增大而減小。但是實(shí)現(xiàn)上不可能讓它無限的變小,所以sched_min_granularity_ns的值也限定了每個(gè)進(jìn)程可以獲得的執(zhí)行時(shí)間周期的最小值

    List-3

mjduan@dmj:/mnt/sdb1/doc/minedoc$ cat /proc/sys/kernel/sched_latency_ns 
3000000
mjduan@dmj:/mnt/sdb1/doc/minedoc$ cat /proc/sys/kernel/sched_min_granularity_ns 
300000
注意:

    對于普通進(jìn)程而言,PR=nice+20,所以默認(rèn)情況下,創(chuàng)建的進(jìn)程nice值是0,而PR值是20,比如默認(rèn)的情況下java應(yīng)用的PR就是20.

    對于rt進(jìn)程,即實(shí)時(shí)進(jìn)程,PR=-1-用戶視角,所以有時(shí)候看到PR值是-51的進(jìn)程,那么它實(shí)際對應(yīng)的優(yōu)先級是50,有時(shí)候看到PR的值是rt而不是數(shù)值,這種對應(yīng)的優(yōu)先級是99

到此,相信大家對“如何理解Linux之進(jìn)程優(yōu)先級PR和NI”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

標(biāo)題名稱:如何理解Linux之進(jìn)程優(yōu)先級PR和NI
網(wǎng)站路徑:http://jinyejixie.com/article28/ggiicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、商城網(wǎng)站靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司電子商務(wù)、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
西青区| 临澧县| 马鞍山市| 桃园市| 南华县| 上思县| 二连浩特市| 泊头市| 大同县| 万载县| 阿拉善盟| 天等县| 哈密市| 柏乡县| 碌曲县| 漳平市| 敦化市| 集安市| 高邑县| 苍溪县| 新蔡县| 三门县| 德令哈市| 丹巴县| 城步| 封丘县| 特克斯县| 濉溪县| 大足县| 峨眉山市| 娄底市| 米林县| 称多县| 天津市| 延吉市| 临邑县| 丹阳市| 巨野县| 锡林郭勒盟| 佛山市| 加查县|