マニュアルページとウィキペディアによると、 Nice
の範囲は-20〜20です。
しかし、次のコマンドを実行すると、一部のプロセスに(-)などの非数値が含まれていることがわかります。左から6列目のタイトル「NI」を参照してください。
(-)の良さは何を示していますか?
ps axl
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 19356 1548 poll_s Ss ? 0:00 /sbin/init
1 0 2 0 20 0 0 0 kthrea S ? 0:00 [kthreadd]
1 0 3 2 -100 - 0 0 migrat S ? 0:03 [migration/0]
1 0 4 2 20 0 0 0 ksofti S ? 0:51 [ksoftirqd/0]
1 0 5 2 -100 - 0 0 cpu_st S ? 0:00 [migration/0]
5 0 6 2 -100 - 0 0 watchd S ? 0:09 [watchdog/0]
1 0 7 2 -100 - 0 0 migrat S ? 0:08 [migration/1]
1 0 8 2 -100 - 0 0 cpu_st S ? 0:00 [migration/1]
1 0 9 2 20 0 0 0 ksofti S ? 1:03 [ksoftirqd/1]
5 0 10 2 -100 - 0 0 watchd S ? 0:09 [watchdog/1]
1 0 11 2 -100 - 0 0 migrat S ? 0:05 [migration/2]
Ubuntu 12.04、CentOs 6.5、Mac OsX 10.9の3つのサーバーが動作していることを確認しました。 UbuntuとCentOsのマシンのみが非数値のniceness値を持っています。
(-)の良さは何を示していますか?
これらも[〜#〜] pri [〜#〜]スコアが-100であることに注意してください。これは、プロセスがrealtimeプロセスとしてスケジュールされていることを示します。リアルタイムプロセスはナイススコアを使用せず、常に通常のプロセスよりも高い優先度を持ちますが、それでもなお互いに異なります。
chrt
コマンドを使用すると、プロセスごとの詳細を表示できます(例:chrt -p 3
)。 -100のうちの1つは、99の「現在のスケジューリング優先度」を報告する可能性があります-Nice
とは異なり、ここで高い値はより高い優先度であり、おそらくここで-100
番号が作成されました。非リアルタイムプロセスは、Nice値に関係なくchrt
に常に「現在のスケジューリング優先度」0を表示し、LinuxではSCHED_OTHER
の「現在のスケジューリングポリシー」を表示します。
UbuntuとCentOsのマシンのみが非数値のniceness値を持っています。
top
の一部のバージョンは、rt
が[〜#〜] pri [〜#〜]で、次に0
がであるリアルタイムプロセスを報告するようです[〜#〜] ni [〜#〜]。
@Goldlilockの答えは、正しい道で研究を行うように私に指示しました。これは私の研究の詳細です。
プロセスで使用可能なスケジューリングアルゴリズム
Linuxは3つのスケジューリングポリシーをサポートしています。 _SCHED_FIFO
_、_SCHED_RR
_、および_SCHED_OTHER
_。 _SCHED_OTHER
_は、ほとんどのプロセスで使用されるデフォルトのユニバーサルタイムシェアリングスケジューラポリシーです。 _SCHED_FIFO
_と_SCHED_RR
_は、実行可能プロセスを実行するために選択する方法を正確に制御する必要がある特別なタイムクリティカルなアプリケーションを対象としています。
利用可能な優先事項
実行するプロセスを選択するために、Linuxスケジューラは各プロセスの優先度を考慮する必要があります。実際には、優先順位には2種類あります。
静的優先度値が各プロセスに割り当てられ、スケジューリングはこの静的優先度に依存します。 _SCHED_OTHER
_でスケジュールされたプロセスの静的優先度は0です。 _SCHED_FIFO
_または_SCHED_RR
_でスケジュールされたプロセスは、_1
_から_99
_(99が最高)の範囲の静的優先順位を持つことができます。
sys_sched_get_priority_max( )
ルーチンは、プロセスの静的優先順位を返し、非リアルタイムプロセスの場合は_0
_を返します。
動的優先度は、非リアルタイムアプリケーションに使用されます。
すべてのリアルタイムプロセスは、通常のプロセスよりも優先されます。 Linuxは、POSIXに従ってリアルタイムの優先順位を実装します。以下のグラフは、プロセスがその優先順位とともにどのようにスケジュールされるかの概要を示しています。
_HIGH PRIORITY – - – - – > – - – - – > – - – - – > – - – - – > – - – – LEAST PRIORITY
……..real time priority (static priority)…….| …. Nice value (dynamic priority) …..
99 ……………………….. 50 ……………………… 1 | -20 …….. -10 …….. 0 …….. 10 ……. 19
_
これで、以下のコマンドを発行して、プロセスのリアルタイムの優先度を確認できます。ここでは、Nice値が-としてリストされているので、watchdogを使用しています。
_ps -e -o class,rtprio,pri,Nice,cmd | grep watchdog
_
これは上記のコマンドの出力です。ご覧のように、リアルタイムの優先度は99で、これは可能な限り高い優先度です。
_FF 99 139 - [watchdog/0]
FF 99 139 - [watchdog/1]
TS - 21 0 grep watchdog
_
したがって、私の理解によると、リアルタイムの優先度は最大値99をとることができるため、Nice値を超えることはできません。それが理由で、ウォッチドッグおよびその他のシステムプロセスの場合、Nice出力を取得します。
参照
http://oreilly.com/catalog/linuxkernel/chapter/ch10.htmlhttp://atipaday.wordpress.com/2008/08/19/atad-21-linux-プロセス優先順位範囲/