ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- スレッドのホーム lgroup と lgroup アフィニティーの監視と変更
plgrp [-F] [-h] pid | core [/lwps] ...
plgrp [-F] -i pid[/lwps] ...
plgrp [-F] -a lgroup_list pid[/lwps] ...
plgrp [-F] [-I default | none |future] -H lgroup_list pid[/lwps] ...
plgrp [-F] [-I default | none |future] -H lgroup_list -e command [arguments]
plgrp [-F] [-I default | none | future] -A lgroup_list/none | weak | strong [,...] pid[/lwps] ...
plgrp [-F] [-I default | none | future] -A lgroup_list/none | weak |strong [,...] -e command [arguments]
plgrp [-F] -I default | none | future pid[/lwps]
plgrp [-F] -I default | none | future -e command [arguments] ...
plgrp は、1 つ以上のプロセス、スレッド、または LWP のホーム lgroup と lgroup アフィニティーを表示および設定します。
lgroup は、一連の CPU およびメモリーに類似するハードウェアデバイスを表します。これらの間には少し距離 (遅延) がある場合があります。システムの各 lgroup は、一意の lgroup ID によって識別されます。lgroup は、もっとも近いリソースを見つけやすくするために階層にまとめられます。lgroups と lgroup 階層の詳細については、lgrpinfo(1) を参照してください。
デフォルトでは、各スレッドには、作成時にホーム lgroup が割り当てられます。CPU リソースまたはメモリーリソースをスレッドに割り当てる必要がある場合、システムは、スレッドのホームにもっとも近い位置にある使用可能なリソースを探すために、スレッドのホーム lgroup から順番に lgroup 階層を検索します。
通常、スレッドのホーム lgroup は、スレッドがもっともアフィニティーを持つ lgroup です。初期状態では、システムは各スレッドのホーム lgroup を選択しますが、その lgroup に対するスレッドのアフィニティーは none に設定されたままにします。スレッドがホームではないプロセッサセットに、より強い lgroup のアフィニティーを設定した場合、スレッドが CPU に関連付けられていないかぎり、スレッドのホームはその lgroup に変更されます。ホーム lgroup のアフィニティー (もしあれば) が削除された (none に設定) 場合、スレッドのホームは、そのプロセッサセットで 2 番目に高いアフィニティーを持つ lgroup に変更できます。
lgroup アフィニティーの各種レベルとそのセマンティクスの詳細については、lgrp_affinity_set(3LGRP) を参照してください。
lgroup_list は、次のものを 1 つ以上含むコンマで区切られたリストです。
- lgroup_ID - Range of lgroup_IDs specified as <start lgroup_ID>-<end lgroup_ID> - all - root - leaves
all キーワードは、システム内のすべての lgroup ID を表します。root キーワードは、ルート lgroup の ID を表します。leaves キーワードは、すべての leaf lgroup、つまり、子を持たない lgroup の ID を表します。
plgrp は、スペース文字で区切られた 1 つ以上のプロセスまたはスレッドを引数に取ります。プロセスとスレッドは、proc(1) ツールと同様の形式で指定できます。プロセス ID は、整数の pid または /proc/pid として指定できます。/proc/pid を使用する場合、プロセスを指定するためにシェル展開を使用できます。たとえば、システム内のすべてのプロセスを指定するには /proc/* を使用します。プロセス ID が単独で指定された場合、plgrp の引数としてプロセスのすべてのスレッドが含められます。
スレッドは、pid/lwpid のようにプロセス ID とスレッド ID で明示的に指定できます。プロセスの複数のスレッドは、ハイフン (-) とコンマ (,) を使用すると、一度に選択できます。たとえば、pid/1,2,7-9 は、プロセス ID が pid であるプロセスのスレッド 1、2、7、8、および 9 を指定しています。
次のオプションがサポートされています。
指定された lgroup_list の指定されたプロセスまたはスレッドの lgroup のアフィニティーを表示します。
指定された lgroup_list の指定されたプロセスまたはスレッドのアフィニティーを設定します。
lgroup/アフィニティーによる割り当ての、コンマで区切られたリストを指定すると、一度に複数のアフィニティーを設定できます。
別のプロセスが制御していても、ターゲットプロセスを捕捉して強制実行します。-F フラグを使用するときは注意してください。2 つの制御プロセスを 1 つの犠牲プロセスに課すと混乱することがあります。一次制御プロセス (通常はデバッガ) が犠牲プロセスを停止していて、この proc ツールの適用中に何も実行していない場合のみ、安全性が確保されます。詳細は、「警告」を参照してください。
新しいプロセスを作成し、そのプロセスに plgrp を適用し、指定されたコマンドと引数を実行します。
指定されたプロセスまたはスレッド、あるいはその両方のホーム lgroup を取得します。オプションが何も指定されていない場合は、これがデフォルトになります。
指定されたプロセスおよびスレッドのホーム lgroup を設定します。
これは、スレッドのホームを変更する対象の lgroup に、強力なアフィニティーを設定します。複数の lgroup が指定された場合、plgrp はラウンドロビン方式でスレッドのホームを lgroup に設定することを試みます。
指定されたプロセスまたはスレッドの lgroup のアフィニティーの継承を表示します。
指定されたプロセスまたはスレッドの lgroup のアフィニティーの継承を設定します。
次のオペランドがサポートされています。
スレッドを指定します。「使用法」を参照してください。
プロセス ID を指定します。「使用法」を参照してください。
例 1 シェルのホーム lgroup の取得
次の例では、シェルのホーム lgroup を取得します。
% plgrp $$ PID/LWPID HOME 3401/1 1
例 2 複数のスレッドのホーム lgroup に対するルート lgroup の設定
次の例では、複数のスレッドのホーム lgroup にルート lgroup を設定します。
% plgrp -H root `pgrep firefox` PID/LWPID HOME 918/1 1 => 0 934/1 2 => 0 934/2 1 => 0 934/3 2 => 0 934/625 1 => 0 934/626 2 => 0 934/624 2 => 0 934/623 2 => 0 934/630 1 => 0
例 3 複数スレッドのホーム lgroup としてルートの lgroup で plgrp を実行
次の例では、複数スレッドのホーム lgroup としてルートで firefox を実行します。
% plgrp -H root -e /usr/bin/firefox
例 4 lgroup 0-2 の 2 つのスレッドのアフィニティーの取得
次の例では、lgroup 1-2 の 2 つのスレッドのアフィニティーを取得します。
% plgrp -a 0-2 101398/1 101337/1 PID/LWPID HOME AFFINITY 101398/1 1 0-2/none 101337/1 1 0-2/none
例 5 lgroup のアフィニティーの設定
次の例では、lgroup のアフィニティーを設定します。
% plgrp -A 0/weak,1/none,2/strong 101398 PID/LWPID HOME AFFINITY 101398/1 1 => 2 0,2/none => 2/strong,0/weak
次の終了値が返されます。
正常終了。
構文エラー。変更は行われていません。
致命的ではないエラーまたは中断。変更が行われた箇所がある可能性があります。
属性についての詳細は、attributes(5) を参照してください。
|
コマンド構文と出力形式は「不確実」です。
lgrpinfo(1), madv.so.1(1), pmadvise(1), pmap(1), proc(1), ps(1), prstat(1M), lgrp_affinity_get(3LGRP), lgrp_affinity_set(3LGRP), lgrp_affinity_inherit_get(3LGRP), lgrp_affinity_inherit_set(3LGRP), lgrp_home(3LGRP), liblgrp(3LIB), proc(4), attributes(5)
proc(1) ツールと同様に、plgrp ユーティリティーは、任意のオプションを指定して呼び出した場合、ターゲットプロセスの検査中にターゲットプロセスを停止して結果を報告します。
状況によっては、プロセスのデッドロックが発生する可能性があります。停止中のプロセスは何も実行できません。本稼働環境で頻繁に使用されるプロセスを短時間でも停止すると、これらのプロセスが深刻なボトルネックになったりハングアップしたりして、ユーザーがプロセスを使用できなくなることがあります。このため、本稼働環境で UNIX プロセスを停止することは避けてください。proc(1) を参照してください。
このツールによって停止されたプロセスは、次のように識別できる場合があります。次のコマンドを発行して:
/usr/bin/ps -eflL
出力の最初の列で T を探します。ただし、sched などの特定のプロセスは、ほとんどの場合デフォルトで T ステータスを表示する可能性があります。