top 與 ps 輸出中的 NI (Nice) 與 PR (Priority) 看似相關,實則代表兩套不同語義的優先級體系。本文從核心調度原理切入,徹底釐清靜態 Nice、動態優先級、即時進程調度的層級關係與操作指令。
| 指標 | 全名 | 範圍 | 含義 | 誰修改 |
|---|---|---|---|---|
| NI | Nice Value | -20 ~ 19 | 使用者空間「禮讓度」,值越小越搶佔 CPU | 使用者(nice/renice) |
| PR | Priority (Dynamic) | 0 ~ 139 | 核心調度器實際使用的動態優先級 | 核心(依 nice、睡眠、I/O 調整) |
nice -n 10 command:以 NI=10 啟動(較低優先級)renice -n -5 -p PID:調整執行中進程(需 root 降低 nice)PR = 20 + NI + 80(非即時進程基準 100~139)vruntime 動態計算ps -eo pid,ni,pri,cmd 觀察 NI 與 PR 變化SCHED_FIFO:先進先出,無時間片,主動放棄或阻塞才切換SCHED_RR:輪轉,有時間片SCHED_OTHER (CFS)、SCHED_BATCH、SCHED_IDLE# 以 RR 優先級 10 啟動即時 bash
chrt -r 10 bash
# 查看進程調度策略與優先級
chrt -p PID
# 修改現有進程為即時
chrt -f -p 50 PID # SCHED_FIFO priority 50
輸出範例:
pid 12345's current scheduling policy: SCHED_RR
pid 12345's current scheduling priority: 10
#define MAX_RT_PRIO 100 // 即時優先級 0-99
#define NICE_WIDTH 40 // nice -20~19 共 40 級
#define MAX_PRIO (MAX_RT_PRIO + NICE_WIDTH) // 140
#define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH/2) // 120 (nice 0)
vruntime 權重nice -n 10 降低優先級chrt -r 50 升為即時(需鎖定記憶體 mlockall)docker run --cpu-rt-runtime=950000 --ulimit rtprio=99NI 是你對核心的「建議」,PR 是核心的「決定」,即時進程則是「特權命令」。理解三者層級,進程調優不再盲目。
零成本製作 Linux 開機隨身碟:Universal USB Installer 圖文教學
VCS 雙機啟動報 STALE ADMIN WAIT:.stale 檔案殘留導致資源組 Faulted
Linux 命令行入門掃盲:su/pwd/cd/ls/find/tar/gzip/mkdir/cp/rm/mv/reboot/halt 十二大核心命令詳解
Linux 修改密碼完整指南:passwd 指令用法與 Root 特權差異
Linux 下 SQL*Plus 歷史命令無法使用方向鍵的解決方案
VMware 遷移虛擬機導致 Debian/Ubuntu 網卡啟動失敗:MAC 地址不匹配解決方案