niceコマンドとは
`nice`コマンドは、
Unix系オペレーティングシステムにおいて、
プロセスの優先度を制御するためのコマンドおよび
システムコールです。このコマンドを使用することで、カーネルスケジューラ内での
プロセスの実行優先度を変更できます。
動作原理と用途
`nice`コマンドは、同名の
システムコールを呼び出すことで、指定された
プロセスの優先度を調整します。優先度は「nice値」として表現され、-20が最も高く、19が最も低い優先度を表します。
プロセスのデフォルトのnice値は通常0で、親
プロセスから継承されます。
複数の
プロセスが
CPU資源を競合している状況で、`nice`コマンドは特に有用です。優先度の高い
プロセスには、優先度の低い
プロセスよりも多くの
CPU時間が割り当てられます。ただし、
CPUに余裕がある場合は、最も低い優先度の
プロセスでも
CPU時間の大部分を使用できます。
優先度の設定
スーパーユーザー(root)のみが、nice値を小さく設定(より高い優先度を与える)ことができます。Linuxでは、`/etc/security/limits.conf`ファイルを変更することで、他のユーザーやグループにもnice値を変更する権限を付与できます。
reniceコマンド
関連するコマンドとして、`renice`があります。これは、既に実行中の
プロセスの優先度を変更するために使用されます。
優先度とCPU時間の関係
`nice`値が
CPU時間に与える影響は、
オペレーティングシステムのスケジューラの設計によって異なります。一般的に、I/Oバウンドの
プロセスは
CPUバウンドの
プロセスよりも優先されるなど、ヒューリスティックなアルゴリズムが組み込まれています。
例えば、2つの同一
CPUバウンド
プロセスが単一
CPUのLinuxシステム(2.6.22以前)で同時に動作している場合、
プロセスの優先度を `p`とすると、それぞれの
CPU時間割り当ては `20 - p` に比例します。
したがって、nice値が+15で動作する
プロセスは、通常の優先度の
プロセスに比べて、
CPU時間がおよそ1/4になります。これは、以下の計算式に基づきます。
(20 - 15) / (20 - 0) = 1/4
BSD 4.xのスケジューラでは、同じ状況下での
CPU時間の比率はおよそ10対1になります。
注意: Linux 2.6.23以降では、CFS(Completely Fair Scheduler)が採用されており、上記のような単純な計算式は適用されません。
ioniceコマンド
Linuxには、`ionice`というコマンドも存在します。これは、
CPU時間ではなく、I/O
スケジューリングに影響を与えます。
まとめ
`nice`コマンドは、システムのパフォーマンスを調整し、リソースを効率的に管理するための重要なツールです。
プロセスの優先度を適切に設定することで、システム全体の安定性と応答性を向上させることができます。特に、複数の
プロセスが同時に動作する環境では、`nice`コマンドの適切な使用が非常に重要になります。
関連項目
GNU Core Utilities
top (UNIX)
ps (UNIX)
kill
参照
Manpage of nice - JM Project
nice(1) - コマンド man page(HP-UX リファレンス)
*
renice(1M) - コマンド man page(HP-UX リファレンス)