Kernel
Linux中的實時程序調度
我一直在學習一些調度概念。目前我的理解如下。
- 有實時程序和非實時程序。
- 非實時程序
nice
的優先級值可以在**-20到+20**的範圍內。較高的正值表示程序的優先級較低。- 實時程序將列出一個 niceness 值,如此處
-
的答案中所述。這主要是因為實時程序比非實時程序具有更高的優先級,並且 niceness 值不適用於它們。- 現在,我可以
chrt
用來查看程序的實時屬性。對於實時過程,
chrt
輸出為,chrt -p 5 pid 5's current scheduling policy: SCHED_FIFO pid 5's current scheduling priority: 99
正如我們在程序5中看到的,優先級是最高的 99。此外,調度策略是
SCHED_FIFO
現在,對於非實時過程,
chrt
輸出為,chrt -p 22383 pid 22383's current scheduling policy: SCHED_OTHER pid 22383's current scheduling priority: 0
我們可以看到程序22383的優先級為 0,調度策略為
SCHED_OTHER
.問題
- 我可以將任何過程作為實時過程嗎?
SCHED_OTHER
除了非實時程序之外,我是否可以設置其他一些調度算法?- 從這裡,我還看到我可以將正在執行的程序的屬性修改為,
chrt -p prio pid
另外,我看到
chrt -m
給了我調度算法的列表。該命令給我的輸出為,SCHED_OTHER min/max priority : 0/0 SCHED_FIFO min/max priority : 1/99 SCHED_RR min/max priority : 1/99 SCHED_BATCH min/max priority : 0/0 SCHED_IDLE min/max priority : 0/0
現在,如上所述,如果我設置
chrt -p 55 22383
將使用哪種算法?
問題 1
使用者也可以對程序使用實時優先級。可以從
/etc/security/limits.conf
文件中設置此配置。我在該文件中看到以下內容。# /etc/security/limits.conf # #Each line describes a limit for a user in the form: # #<domain> <type> <item> <value>
如果我們檢查項目部分,我們會看到下面的條目,它可以為使用者設置實時優先級。
# - rtprio - max realtime priority
問題 2 和問題 3
要將調度策略設置為
SCHED_FIFO
,請輸入:chrt -f -p [1..99] {pid}
要將調度策略設置為
SCHED_RR
,請輸入:chrt -r -p [1..99] {pid}
所以要回答問題 3,我們應該使用
chrt -m
命令驗證可用的調度算法和優先級,然後使用任何適合我們需要的調度算法。要設置不同的優先級,我們可以使用上述命令。