Kernel

Linux中的實時程序調度

  • December 4, 2015

我一直在學習一些調度概念。目前我的理解如下。

  • 有實時程序和非實時程序。
  • 非實時程序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.

問題

  1. 我可以將任何過程作為實時過程嗎?
  2. SCHED_OTHER除了非實時程序之外,我是否可以設置其他一些調度算法?
  3. 這裡,我還看到我可以將正在執行的程序的屬性修改為,
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命令驗證可用的調度算法和優先級,然後使用任何適合我們需要的調度算法。要設置不同的優先級,我們可以使用上述命令。

引用自:https://unix.stackexchange.com/questions/154867