プロセスとスレッドの優先順位

優先順位管理ツールは、プロセスの優先順位を取り扱います。

AIX® バージョン 4 では、プロセス優先順位はスレッド優先順位の先行版です。 fork() サブルーチンが呼び出されると、 そのサブルーチンで実行されるプロセスおよびスレッドが作成されます。 スレッドの優先順位は、プロセスの属性であった優先順位です。

カーネルは、それぞれのスレッドごとに優先順位の値 (スケジューリング優先順位 と呼ばれることもある) を維持します。 優先順位の値は正の整数で、関連付けられたスレッドの重要性に逆比例して変化します。 つまり、優先順位の値が小さいほど、スレッドの重要性が高いことを意味します。 スケジューラーは、ディスパッチするスレッドを探す際、 優先順位の値が最も小さいディスパッチ可能スレッドを選択します。

スレッドの優先順位は、固定優先順位でも非固定優先順位でもかまいません。 固定優先順位スレッドの優先順位の値は定数ですが、非固定優先順位スレッドの優先順位の値は、 ユーザー・スレッドの最小優先順位 (定数 40)、スレッドの nice の値 (デフォルトは 20 で、 オプションで nice または renice コマンドによって設定される)、 およびそのプロセッサー使用率に伴うペナルティーに基づいて変動します。

スレッドの優先順位は特定の値に固定することができ、その優先順位が setpri() サブルーチンを通じて設定 (固定) されている場合、40 より小さい優先順位の値を持つことができます。 これらのスレッドは、スケジューラーの再計算アルゴリズムに影響されません。 その優先順位の値が 40 より小さい値に固定されている場合、これらのスレッドは、 どのユーザー・スレッドが実行されるよりも前に実行され、完了します。 例えば、固定値が 10 のスレッドは、固定値が 15 のスレッドより前に実行されます。

ユーザーは nice コマンドを適用して、スレッドの非固定優先順位を低くすることができます。 システム管理者はスレッドに負の nice の値を適用して、より高い優先順位を与えることができます。

次の図は、優先順位の値を変更する方法を幾つか示しています。

図1: 優先順位の値の決定方法。 この図は、スレッドの実行中や nice コマンドの適用後に、 スレッドのスケジューリング優先順位の値がどのように変化するかを示しています。 優先順位の値が小さいほど、スレッド優先順位は高くなります。 開始時は、nice の値はデフォルトの 20 で、基本優先順位はデフォルトの 40 です。 いくつかの命令が実行され、プロセッサー・ペナルティーが適用された後も、nice 値は 20 のまま、基本優先順位は 40 のままです。 renice —5 コマンドを実行した後、プロセッサー使用率が前と同じである場合は、nice の値は 15 になり、基本優先順位は 40 のままです。 値 50 を指定して setpri() サブルーチンを実行すると、固定優先順位は 50 になり、nice の値とプロセッサー使用率は無関係になります。
優先順位の値を判別する方法

スレッドの nice の値は、スレッドの作成時に設定され、そのスレッドが存在する間一定です。ただし、ユーザーが renice コマンドか setpri() setpriority()thread_setsched()、または nice() システム・コールによって明示的に変更した場合は別です。

プロセッサー・ペナルティーは、スレッドの最新のプロセッサー使用率から計算される整数です。 最新のプロセッサー使用率は、10 ミリ秒のクロックの目盛りの終わりにスレッドが プロセッサーの制御下に入るつど、最大値の 120 に達するまでおよそ 1 ずつ増加します。 ティックごとの実際の優先順位ペナルティーは、nice の値と共に増加します。 1 秒に一度、すべてのスレッドの最新のプロセッサー使用率の値は再計算されます。

結果は次のとおりです。

  • 非固定優先順位スレッドの優先順位は、 その最新のプロセッサー使用率が増加するにつれて下がり、減少するにつれて上がります。 これは、平均して、スレッドが直近で多くのタイム・スライスを割り当てられているほど、 そのスレッドに次に割り当てられるタイム・スライスは少なくなる傾向にあるということを示します。
  • 非固定優先順位スレッドの優先順位は、その nice の値が増加するにつれて下がり、 減少するにつれて上がります。
注: 複数のプロセッサー実行キューとそれらのロード・バランシング・メカニズムを使用すると、優先順位の低い優先順位の実行時間が優先順位の実行時間以上になる可能性があるため、 nice または renice の値がスレッド優先順位に期待される影響を与えない場合があります。 nice または renice の予期したとおりの効果を出す必要のあるスレッドは、グローバル実行キューに入れてください。

ps コマンドを使用すれば、プロセスの優先順位の値、nice の値、 および短期プロセッサー使用率の値を表示することができます。

nice および renice コマンドの使用について詳しくは、 マイクロプロセッサーの競合の制御 を参照してください。

プロセッサー・ペナルティーの計算および最近のプロセッサー使用量の値の減衰について詳しくは、 スレッド-優先順位-値の計算を参照してください。

優先順位メカニズムは、プロセッサー・リソース管理を実施するために AIX ワークロード・マネージャー によっても使用されます。 ワークロード・マネージャー に分類されるスレッドは、 ワークロード・マネージャーによって管理される優先順位を持つため、 ワークロード・マネージャーに分類されないスレッドとは異なる優先順位の動作を持つ可能性があります。