CentOS進程調度策略主要分為實時和非實時兩類,由內核調度器根據策略和優先級分配CPU資源,以下是核心解析:
一、實時調度策略
特點:優先級高,保證實時性,適用于對響應速度要求嚴格的場景(如工業控制、音視頻處理)。
-
SCHED_FIFO(先進先出)
- 按進程進入就緒隊列的順序執行,先到先得,直到任務完成或被更高優先級進程搶占。
- 優先級范圍:1-99(數值越小優先級越高),默認0保留給內核。
- 特性:無時間片,一旦運行除非主動放棄或被搶占,否則持續占用CPU。
-
SCHED_RR(時間片輪轉)
- 為每個實時進程分配固定時間片,時間片用完后進程進入就緒隊列尾部,等待下一次調度。
- 優先級范圍:1-99,支持相同優先級進程的公平調度,避免單個進程長時間獨占CPU。
二、非實時調度策略
特點:優先級較低,注重公平性和資源利用率,適用于普通任務和批處理場景。
-
SCHED_NORMAL(默認策略)
- 基于CFS(完全公平調度器),通過紅黑樹管理進程,根據**虛擬運行時間(vruntime)**排序,運行時間短的進程優先執行。
- 動態優先級:通過
nice
值(-20~19)調整權重,nice
值越小優先級越高(默認0)。
- 時間片輪轉:相同優先級進程按時間片輪流執行,保證多任務公平性。
-
SCHED_BATCH
- 適用于CPU密集型批處理任務,不搶占實時進程,但會盡量避免頻繁調度以提升吞吐量。
-
SCHED_IDLE
- 僅在系統空閑時運行,優先級極低,用于后臺低負載任務。
-
SCHED_DEADLINE(RHEL 8+)
- 基于任務的截止時間(Deadline)調度,確保關鍵任務在指定時間內完成,適合實時性要求嚴格的場景(如視頻流處理)。
三、關鍵工具與操作
- 查看調度策略:
chrt -p <pid>
:顯示進程的調度策略和優先級。
- 設置調度策略:
chrt -f <優先級> -p <pid>
:設置為FIFO策略;-r
設置RR策略;-o
設置普通策略。
- 調整進程優先級:
nice -n <值> <命令>
:啟動時設置nice
值;renice <值> -p <pid>
:修改運行中進程的優先級。
四、注意事項
- 實時策略(FIFO/RR)需謹慎使用,高優先級進程可能導致系統無響應。
- 批處理任務建議使用
SCHED_BATCH
,避免頻繁調度影響性能。
- 多核環境下可通過
cgroups
或taskset
綁定進程到特定CPU,提升緩存命中率。
參考來源: