nice(ナイス)は、Unix系オペレーティングシステム上のそれぞれのプロセスに対する優先度を設定するコマンド、およびこれによってマッピングされるシステムコールである。

動作・用途 編集

niceコマンドは、同名のシステムコールを呼び出すことで、与えられたプロセスの、カーネルスケジューラ内での優先度を変更する。

nice値の−20は最大の優先度であり、19は最低の優先度である。プロセスのデフォルトのnice値は親プロセスから継承するが、通常は0である。

niceは、複数のプロセスがCPUが供給できるよりも大きい計算資源を要求しているときに有用である。このような場合、高い優先度のプロセスが、低い優先度のプロセスよりも多量のCPU時間を獲得する。もし、プロセスが要求しているよりも多くの計算資源をCPUが提供できるならば、最も優先度の低いプロセスでさえ、最大でCPUの99%近くを使用できる。スーパーユーザー(またはroot)だけが、nice値を小さく(高い優先度に)設定することが出来る。Linuxでは、/etc/security/limits.confを変更することで、他のユーザやグループがnice値を小さく変更することを許可できる[1]

関連するreniceコマンドは、すでに実行しているプロセスの優先度を変更するために使用される[2]

特定のnice値を設定したときの、数学的に厳密な効果は、Unixの実装でスケジューラがどのように設計されているかに依存している。典型的なオペレーティングシステムのスケジューラは、CPUバウンドのプロセスよりもI/Oバウンドのプロセスを優先するなど、ヒューリスティクスなアルゴリズムを組み込んでいる。単純な例として、2つの同一のCPUバウンドのプロセスが単一CPUの(2.6.22以前の)Linuxシステムで同時に動作しているとき、 をプロセスの優先度とすると、それぞれのCPU時間の割り当ては に比例する。したがって、nice値が+15で動作するプロセスが使用できるCPU時間は、通常の優先度のプロセスに比べて となる(  )。BSD 4.xのスケジューラでは、同じ例でのCPU時間の比率は、およそ10対1となる。

(*) 2.6.23以降のLinuxで採用されているCFSでは計算式が異なる

Linuxにはioniceプログラムも存在する。これはCPU時間よりもI/Oのスケジューリングに影響を与える。

関連項目 編集

参照 編集

  1. ^ limits.conf man page
  2. ^ Mike Loukides 著、砂原秀樹 監訳『UNIXシステムチューニング』アスキー出版局、1991年7月21日、107頁。ISBN 4-7561-0077-5 

外部リンク 編集