web-dev-qa-db-ja.com

Linuxでのリアルタイムプロセススケジューリング

私はいくつかのスケジューリングの概念を学んでいます。現在のところ、私の理解は以下の通りです。

  • リアルタイムプロセスと非リアルタイムプロセスがあります。
  • 非リアルタイムプロセスは、-20からの範囲の優先度のNice値を持つことができます+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. here から、実行中のプロセスの属性を次のように変更できることもわかります。

    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を設定すると、どのアルゴリズムが使用されますか?

25
Ramesh

質問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と質問

スケジューリングポリシーをSCHED_FIFOに設定するには、次のように入力します。

chrt -f -p [1..99] {pid}

スケジューリングポリシーをSCHED_RRに設定するには、次のように入力します。

chrt -r -p [1..99] {pid}

したがって、質問3に答えるには、chrt -mコマンドを使用して、使用可能なスケジューリングアルゴリズムと優先順位を確認し、必要に応じて任意のスケジューリングアルゴリズムを使用する必要があります。異なる優先順位を設定するには、上記のコマンドを使用できます。

21
Ramesh