web-dev-qa-db-ja.com

(-)のniceness値はどういう意味ですか?

マニュアルページとウィキペディアによると、 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値を持っています。

20
spuder

(-)の良さは何を示していますか?

これらも[〜#〜] 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 [〜#〜]

19
goldilocks

@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-プロセス優先順位範囲/

7
Ramesh