ionice - プロセス I/O のクラスと優先度を設定、取得する
ionice [-c class] [-n level] [-t] -p PID
ionice [-c class] [-n level] [-t] -P PGID
ionice [-c class] [-n level] [-t] -u UID
ionice [-c class] [-n level] [-t] command [argument] ...
このプログラムは、 1 つのプログラムに対して、 I/O スケジューリングのクラスと優先度の設定または取得を行う。 引数指定がない場合、 または -p だけが用いられた場合、 ionice は、 プロセスに対する現在の I/O スケジューリングのクラスと優先度を検索する。
command が指定された場合、 ionice は指定された引数を使って、 そのコマンドを実行する。 class の指定がなかった場合は、 スケジューリングクラス「ベストエフォート (best-effort)」を使って、 command を実行する。 デフォルトの優先度レベルは 4 である。
現時点において、 プロセスには、 以下の 3 つのスケジューリングクラスがある。
アイドル (Idle)
アイドル I/O 優先度により実行しているプログラムは、 指定された猶予期間 (grace period) 中に、 他のプログラムがディスク I/O を要求していない場合にのみ、 ディスクへのアクセス時間を取得する。 通常のシステム処理において、 アイドル I/O プロセスが及ぼす影響はゼロである。 このスケジューリングクラスは、 優先度引数を受け取らない。 現時点において、 このスケジューリングクラスは、 一般ユーザーが利用できる (カーネル 2.6.25 以降)。
ベストエフォート (Best-effort)
このスケジューリングクラスは、 特定の I/O 優先度を要求するものでなければ、 どのようなプロセスであっても 効果を発揮する。 このクラスは、 優先度引数として 0-7 の値をとる。 数値が低いほど、 優先度は高くなる。 優先度がこのベストエフォートに設定されて実行しているプログラムどうしは、 ラウンドロビンにようにして動作する。
カーネル 2.6.26 以前において、 I/O 優先度が要求されていないプロセスは、 形式的には、 スケジューリングクラスとして "none" を用いるものとされている。 しかし I/O スケジューラーは、 実際には、 ベストエフォートクラスであるものとして動作する点に注意すること。 ベストエフォートクラス内での優先度は、 そのプロセスの CPU nice レベル値から、 動的に計算される。 つまり io_priority = (cpu_nice + 20) / 5 となる。
CFQ I/O スケジューラーを利用する 2.6.26 以降のカーネルにおいて、 I/O 優先度が要求されていないプロセスは、 CPU スケジューリングクラスを継承する。 I/O 優先度は、 そのプロセスの CPU nice レベル値から計算される (カーネル 2.6.26 以前でも同様)。
リアルタイム (Realtime)
RT スケジューリングクラスは、 システムに対して他にどのようなことが起こっていても、 ディスクへの一番のアクセスが与えられる。 したがって RT クラスは、 注意して用いることにしておかないと、 他のプロセスを無効化しかねない。 ベストエフォートクラスと同様にして、 定義されている優先度レベルは 8 つある。 これは指定されたプロセスが、 各スケジューリングウィンドウにおいて受けとるタイムスライスの大きさを表している。 このスケジューリングクラスは、 通常ユーザー (つまり root 以外のユーザー) は利用することができない。
-c, --class class
使用するスケジューリングクラスの名前または番号を指定する。
0
はクラスなし、1
はリアルタイム、2
はベストエフォート、3
はアイドルである。
-n, --classdata level
スケジューリングクラスのデータを指定する。 これは、 そのクラスが引数を受けとる場合にのみ有効である。 リアルタイムとベストエフォートに対しては、 0-7 が有効なデータである (優先度レベルを表す)。 なお、
0
は、 優先度レベルの最高値を表す。
-p, --pid PID...
スケジューリングパラメーターを設定または取得したい、 実行中プロセスのプロセス ID を設定する。
-P, --pgid PGID...
スケジューリングパラメーターを設定または取得したい、 実行中プロセスのプロセスグループ ID を設定する。
-t, --ignore
優先度設定にあたっての処理失敗を無視する。 command が指定されていた場合、 要求されたスケジューリング優先度が設定できなくても、 command は実行される。 このような状況は、 権限不足の場合や、 カーネルバージョンが古い場合に発生する場合がある。
-u, --uid UID...
スケジューリングパラメーターの設定または取得を行いたい場合に、 実行中プロセスのユーザー ID を設定する。
-h, --help
ヘルプを表示して終了する。
-V, --version
バージョンを表示して終了する。
Linux では、 2.6.13 以降、 CFQ I/O スケジューラーとともに、 I/O スケジューリングのクラスと優先度をサポートしている。
·
# ionice -c 3 -p 89
PID が 89 のプロセスを、 アイドル I/O プロセスとして設定する。
·
# ionice -c 2 -n 0 bash
'bash' を ベストエフォートのプログラムとして、 最高の優先度で実行する。
·
# ionice -p 89 91
PID 89 と 91 のプロセスについて、 そのクラスと優先度を表示する。
ioprio_set(2)
バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.
ionice コマンドは util-linux パッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.