プロセッサーのバインディング

bindprocessor システム・コールを使用することにより、 アプリケーションはプロセッサーへのバインドを行うことができます。 このシステム・コールでは、 プロセッサーの番号付けの体系がゼロ (0) で始まり N-1 で終わることを前提としています。 ここで、N はオンライン CPU の数です。

N は、 _system_configuration.ncpus システム変数を読み取ることにより、 プログラマチックに判別されます。 プロセッサーが追加および除去されると、この変数は 動的論理区画化を使用して増分および減分されます。

番号付けの体系には穴はないので注意してください。 プロセッサーはいつでも N 番目の位置に追加され、 N-1 番目の位置から除去されます。 bindprocessor システム・コールによって使用される番号付けの体系を使用して、 特定の論理プロセッサーへのバインドを行うことはできません。 これは、どのようなプロセッサーでも除去することができますが、 それは番号付けの体系に反映されておらず、 常に N-1 番目の CPU が割り振り解除されるからです。 このような理由から、 bindprocessor システム・コールによって使用される ID は、 バインド CPU ID と呼ばれています。

_system_configuration.ncpus システム変数への変更では、 以下の意味があります。
  • アプリケーションが変数を読み取った後で最後のプロセッサーが除去された場合に、 そのアプリケーションは bindprocessor システム・コールからエラーを受け取る準備をしなければなりません。 このエラー条件は、 動的プロセッサー割り振り解除 (欠陥のあるプロセッサーの実行時割り振り解除) によって最初に導入されました。
  • プロセッサーの数に応じてスケールを変更するように設計されているアプリケーションは、 プロセッサーの数が変更された場合、 _system_configuration.ncpus システム変数を再読み取りしなければなりません。

アプリケーションは、 ソフトウェア・パーティショニングと呼ばれる ワークロード・マネージャー (WLM) のフィーチャーを使用して、プロセッサーのセットにバインドすることもできます。 これは、 論理 CPU ID に基づいている番号付けスキーマを想定しています。 これもゼロ (0) で始まり、N-1 で終わります。 ただし、この場合の N は、 区画のアーキテクチャーでサポートできるプロセッサーの最大数です。 この番号付けの体系は、オンラインとオフラインの両方のプロセッサーを反映します。

そのため、 プロセッサーを除去する際に正しい改善方法を適用できるように、 使用されているバインディングのタイプを覚えておくことが重要です。 bindprocessor コマンドを使用することにより、 オンライン・プロセッサーの数を判別することができます。 ps コマンドを使用することにより、 最後のオンライン・プロセッサーにバインドされているプロセスとスレッドを識別することができます。 ターゲットが識別された後で、 bindprocessor コマンドを再び使用し、 新しい接続を定義することができます。

WLM 関連の依存関係は、 問題の原因である特定のソフトウェア区画を識別することにより、 解決することができます。 これらの依存関係を解決するには、 以下のことを行います。
注: システムは、バインドされたジョブをオフラインまたは保留中のオフライン・プロセッサーについてスケジュールするため、特定のソフトウェア区画に別のオンライン CPU がある場合は、変更する必要はありません。
  1. lsrset コマンドを使用して、WLM によって使用されるソフトウェア区画のセットを表示します。
  2. lsclass コマンドを使用して、 これらのソフトウェア区画を識別します。
  3. chclass コマンドを使用して、 これらのソフトウェア区画を使用するクラスのセットを識別します。
  4. wlmctrl コマンドを使用して、 システムを再分類します。
この時点で新しいクラス定義が有効になり、 システムはバインドされているジョブを、 除去される論理プロセッサーから自動的に移行します。