1. 程式人生 > >linux系統進程優先級

linux系統進程優先級

級別 沒有 進行 comm mman nice 情況 smp 運行

linux系統進程優先級

一、什麽是進程優先級?
? ? ? ?每個進程都會有相應的優先級,優先級決定程序何時運行。優先級值越低,優先級就越高,就越快被調度程序選中。
? ? ? ?另外,優先級還影響分配給進程的時間片長短。重要的進程,應該分配多一些cpu時間片,好讓其盡快完成任務。所有的進程都會有機會運行,但高優先級重要的進程會獲取更多的cpu執行時間。

二、優先級取值範圍
? ? ? ?在linux系統中,進程優先級的取值範圍是0-139,而這個值又是由另外兩個值組成的,一個是代表實時進程(realtime)優先級範圍是[0,99],另外一個是代表非實時進程,取值範圍是[100,139]。

? ? ? ?所以,Linux進程實際上實現了140個優先級範圍,取值範圍是從0-139,這個值越小,優先級越高。

  • 動態優先級:實時進程優先級[0,99],該區間被稱為動態優先級,優先級隨著進程執行情況的變化而改變,以便獲得更好的調度性能。
  • 靜態優先級:代表非實時進程優先級[100,139],被稱為靜態優先級,該值不會隨著時間而進行改變,但系統可以通過nice命令來進行修改。

三、PRI值和NICE值

  1. PRI值
    ? ? ? ?PRI即進程的優先級,此值越小進程的優先級別越高。PRI值越小越快被cpu調度程序執行,那麽加入nice值後,將會使得PRI變為:PRI(new)=PRI(old)+nice。由此看出,PRI是根據NICE排序的,規則是NICE越小PRI值越小,其優先級會變高。

  2. NICE值
    ? ? ? ?它是反應一個進程“優先級”狀態的值,其取值範圍是-20至19,一共40個級別。它對應於靜態優先級的[100,139]這個區間,進程啟動後默認的nice值為0,則其對應的優先級為120。
    ? ? ? ?NICE值雖然不是priority,但是它確實可以影響進程的優先級。

  3. ps和top命令
    查看PRI和NICE值,它們代表什麽意思呢?
    ps命令

    [[email protected] ~]#ps -elf

    F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD

    4 S root 1 0 0 80 0 - 32063 ep_pol 14:35 ? 00:00:02 /usr/lib/s
    1 S root 2 0 0 80 0 - 0 kthrea 14:35 ? 00:00:00 [kthreadd]
    1 S root 3 2 0 80 0 - 0 smpboo 14:35 ? 00:00:01 [ksoftirqd
    1 S root 5 2 0 60 -20 - 0 worker 14:35 ? 00:00:00 [kworker/0
    1 S root 6 2 0 80 0 - 0 worker 14:35 ? 00:00:00 [kworker/u
    ......


    top命令

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    1 root 20 0 128252 6804 4176 S 0.0 0.3 0:02.79 systemd
    2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
    3 root 20 0 0 0 0 S 0.0 0.0 0:01.63 ksoftirqd/0
    ......


    總結:
            top中的PR表示優先級,但是跟上述的值不是直接對等的。在top中,實時優先級的[0,99]沒有具體的表示。靜態優先級和top中的優先級關系為top_PR = static_Priority - 100也就是說,top中的PR取值為[0,39],對應優先級[100,139]。
            ps命令中,ps_PRI = static_priority - 40,PRI的取值範圍為[-40,99],也就是說,ps中PRI值為80等價於nice值為0,等價於靜態優先級的120。


linux系統進程優先級