bindprocessor コマンド

目的

プロセスのカーネル・スレッドをプロセッサーにバインドまたはアンバインドします。

構文

bindprocessor Process [ ProcessorNum ] | -q | -u Process{ProcessID [ProcessorNum] | -u ProcessID | -s SmtSetID | -b bindID ProcessorNum | -q }

説明

bindprocessor コマンドは、プロセスのカーネル・スレッドをバインドまたはアンバインドするか、使用可能なプロセッサーをリスト表示します。Process パラメーターは、スレッドをバインドまたはアンバインドするプロセスの ID です。 ProcessorNum パラメーターは、使用するプロセッサーのバインド CPU ID です。ProcessorNum パラメーターを省略すると、プロセスはランダムに選択されたプロセッサーにバインドされます。

同時マルチスレッド化が使用可能になると、物理プロセッサーの各ハードウェア・スレッドは、bindprocessor コマンドによって個別のプロセッサーとしてリストされます。 これにより、ソフトウェア・スレッドを各ハードウェア・スレッドに別個にバインドすることができます。 POWER5 プロセッサー には 2 つのハードウェア・スレッドがあり、これらは 1 次ハードウェア・ スレッド および 2 次ハードウェア・スレッド と呼ばれます。 SmtSetId パラメーターはハードウェア・スレッドの同時マルチスレッド 設定 ID 値であり、1 次ハードウェア・スレッドの場合は 0、2 次 ハードウェア・スレッドの場合は 1 になるように定義されます。 -s フラグを使用して、すべてが 1 次ハードウェア・スレッドであるか またはすべてが 2 次ハードウェア・スレッドである使用可能なプロセッサーをリストすることができます。 -b フラグは、単一物理プロセッサーで使用可能なすべてのハードウェア・ スレッドをリストするためのものです。その単一物理プロセッサー上 で、ProcessorNum パラメーターは、そのプロセッサーの 1 次 ハードウェア・スレッドまたは 2 次ハードウェア・スレッドのバインド CPU ID です。 詳細については、プログラミングの一般概念: プログラムの作成およびデバッグの『同時マルチスレッド化』のセクションを参照してください。

bindprocessor コマンドは、ターゲット・プロセスが Resource Attachment を持っていると失敗します。

プロセッサー・バインディングを使用するプログラムは、動的ロジカル・パーティショニング (DLPAR) を認識している必要があります。

プロセスそのものがバインドされるのではなく、そのカーネル・スレッドがバインドされるということを理解しておく必要があります。カーネル・スレッドは、いったんバインドされると、後でアンバインドされない限り、常に選択されたプロセッサー上で実行されるようにスケジュールされます。新しいスレッドが作成されると、そのスレッドのバインド属性はそれを作成したスレッドと同じになります。このことは、fork サブルーチンによって作成された新しいプロセス内の初期スレッドに適用されます。新しいスレッドは、fork を呼び出したスレッドのバインド属性を継承します。exec サブルーチンを呼び出しても、スレッドの属性は変更されません。

bindprocessor コマンドの -q フラグを指定すると、使用可能なバインド CPU ID の一覧を作成します。 この場合、ProcessorNum パラメーターに対応する値として 指定されたこれらの論理番号を使用できるようになります。-u フラグは、プロセスのスレッドをアンバインドして、それらを任意のプロセッサー上で実行できるようにします。

同時マルチスレッド化が使用可能になると、bindprocessor コマンドの -s フラグにより、各プロセッサーの一覧を別個に作成するこ とによりアプリケーションのスレッドを個別の物理プロセッサーにバインドすることができます。 -b フラグは、アプリケーションの全スレッドを同じ物理プロセッサーのハードウェア・スレッドにバインドしたい場合に役立ちます。

注:
  1. bindprocessor コマンドは、マルチプロセッサー・システム向けです。 ユニプロセッサー・システム上でも機能しますが、この種のシステムではバインディングは効果がありません。
  2. ユーザーが所有していないプロセス内のスレッドをバインドまたはアンバインドするには、 root 権限が必要です。
  3. swapper および sched などのカーネル・プロセスをユーザー・スペースからバインドしようとすると、操作は失敗し、EPERM エラー・コードが戻されます。プロセス構造内の SSCHEDPROC フラグを探すことにより、どのカーネル・プロセスが失敗するか判別できます。SSCHEDPROC フラグが設定されていると、カーネル・プロセスのバインディングは失敗します。

フラグ

項目 説明
-b アプリケーションの全スレッドを同じ物理プロセッサーのハードウェア・スレッドにバインドします。
-q 使用可能なプロセッサーを表示します。
-s 各プロセッサーの一覧を別個に作成することによりアプリケーションの全 スレッドを個別の物理プロセッサーにバインドします。
-u 指定したプロセスのスレッドをアンバインドします。

  1. どのプロセッサーが使用可能か (指定可能な ProcessorNum) を調べるには、次のように入力します。
    bindprocessor -q
    4 プロセッサー・システムの場合、出力は次のようになります。
    
    The available processors are: 0 1 2 3
  2. プロセス 19254 内のスレッドをプロセッサー 1 にバインドするには、 次のように入力します。
    
    bindprocessor 19254 1
  3. 1 次ハードウェア・スレッドである使用可能なすべてのプロセッサーを調べるには、次のように入力します。
    bindprocessor -s 0
    同時マルチスレッド化が使用可能になっている 4 つのプロセッサーから成るシステムの場合は、出力は次のようになります。
    The available processors are: 0 2 4 5
    2 次ハードウェア・スレッドである使用可能なすべてのプロセッサーを調べるには、次のように入力します。
    bindprocessor -s 1
    出力は以下のようになります。
    The available processors are: 1 3 6 7
    smtctl コマンドを使用して同時マルチスレッド化が使用不可になった場合、または同時マルチスレッド化をサポートしないプロセッサーを備えたシステムでは、出力は次のようになります。
    bindprocessor -s 0
    
    The available processors are: 0 1 2 3
    
    bindprocessor -s 1
    
    SmtSetId 1 is not available
  4. バインド CPU ID が 0 のハードウェア・スレッドを備えた物理プロセッサー上の使用可能なすべてのバインド CPU ID を調べるには、次のように入力します。
    bindprocessor -b 0
    出力は以下のようになります。
    The available processors are: 0 1
    コマンドを次のように入力したとします。
    bindprocessor -b 1
    この場合も、同じ出力結果となります。

ファイル

項目 説明
/usr/sbin/bindprocessor bindprocessor コマンドが入っています。