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


19

マニュアルページおよびウィキペディアによると、nice-20〜20の範囲。

それでも、次のコマンドを実行すると、一部のプロセスに(-)などの非数値が含まれていることがわかります。タイトルが「NI」の左から6番目の列を参照してください。

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

 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値を持っています。


参考:名前が含まれるプロセスはすべて[brackets]実際にはkthreads(カーネルスレッド)です。
ジョナソンラインハルト

回答:


18

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

また、PRIスコアが-100であることに注意してください。これは、プロセスがリアルタイムプロセスとしてスケジュールされていることを示します。リアルタイムプロセスはナイススコアを使用せず、常に通常のプロセスよりも高い優先度を持ちますが、それでも互いに異なっています。

chrtコマンド(例chrt -p 3)を使用して、プロセスごとに詳細を表示できます。-100のものの1つは、おそらく99の「現在のスケジューリング優先順位」を報告します-とは異なりnice、ここで高い値はより高い優先順位であり、おそらくtopが-100番号を作成した場所です。非リアルタイムプロセスはchrt、ナイス値に関係なく、常に「現在のスケジューリング優先順位」0を表示し、Linuxでは「現在のスケジューリングポリシー」を表示し SCHED_OTHERます。

UbuntuおよびCentOsマシンのみが、数字以外のniceness値を持っています。

一部のバージョンでは、topとのリアルタイムのプロセスを報告しているように見えるrtの下でPRI、その後、0NI


素晴らしい答え。私はそれが何か関係-100があることを知っていましたが、それを理解できませんでした:)
ラメシュ14

6

@Goldlilockの答えは、正しい道で研究を行うように私に指示しました。これが私の研究の詳細です。

プロセスで利用可能なスケジューリングアルゴリズム

Linuxは3つのスケジューリングポリシーをサポートしています。SCHED_FIFO、、SCHED_RRおよびSCHED_OTHERSCHED_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

これで、以下のコマンドを発行して、プロセスのリアルタイムの優先度を確認できます。ここでは、値が-としてリストされているため、ウォッチドッグを使用しています。

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の値を取ることができるため、それ以上の良い値はありません。それが理由です。ウォッチドッグやその他のシステムプロセスの場合、次のような素晴らしい出力が得られます。

参照資料

http://oreilly.com/catalog/linuxkernel/chapter/ch10.html http://atipaday.wordpress.com/2008/08/19/atad-21-linux-process-priority-range/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.