プロセッサー使用の制御

このセクションでは、マルチプロセッサー・システムでのプロセッサーの使用を制御する方法について説明します。

マルチプロセッサー・システムでは、プロセッサーの使用について、 次の方法で制御することができます。
  • ユーザーが、 プロセスまたはカーネルのスレッドを強制的に特定のプロセッサー上で実行させることができる。

プロセスとカーネル・スレッドのバインディング

ユーザーは、 プロセスを特定のプロセッサー上で強制的に実行させることができます。 このアクションは、バインディング と呼ばれます。 システム管理者は、任意のプロセスをバインドすることができます。 バインドは、コマンド行から bindprocessor コマンドによって制御されます。

プロセス自体がバインドされるのではなく、 そのカーネル・スレッドがバインドされます。 カーネル・スレッドは、 いったんバインドされると、後でアンバインドされた場合を除き、 選択されたプロセッサーで実行するように常にスケジュールされます。 新しいカーネル・スレッドが作成されると、そのカーネル・スレッドはその作成者と同じバインド属性になります。

この状態は、 fork サブルーチンによって作成された新規プロセスの初期スレッドに適用されます。新規スレッドは、 fork サブルーチンを呼び出したスレッドのバインド・プロパティーを継承します。 exec サブルーチンが呼び出されると、バインド・プロパティーは変更されません。 プロセスがプロセッサーにバインドされた後、 他にバインディングまたはアンバインディングのアクションが実行されていない場合、 すべての子プロセスが同じプロセッサーにバインドされます。

プロセスは、論理プロセッサー番号を使用して、 使用可能なプロセッサーに対してバインドすることだけが可能です。 使用可能な論理プロセッサー番号をリストするには、bindprocessor -q コマンドを使用してください。 4 つの使用可能プロセッサーがあるシステムでは、 このコマンドによって次のような出力が作成されます。
The available processors are: 0 1 2 3

バインドは、 bindprocessor サブルーチンを使用してプログラム内で制御することもできます。これにより、プログラマーは単一のカーネル・スレッドまたはプロセス内のすべてのカーネル・スレッドをバインドすることができます。 プログラマーは、 単一カーネル・スレッドまたは全カーネル・スレッドをアンバインドすることもできます。