マニュアルページセク ション 1M: システム管理コマンド

印刷ビューの終了

更新: 2014 年 7 月
 
 

pbind(1M)

名前

pbind - プロセスまたは LWP のバインディングの制御およびクエリー

形式

pbind -b [-c | 
g | l] [target_list] [
-n] [-s | w] [-xft] [
-i idtype] [idlist]
pbind -b [-c | 
g | l] [target_list] [
-n] [-s | w] [-xft] [
-e command [argument(s)]]
pbind [-q] [-c | 
g | l] [-i idtype] [
idlist]
pbind -u [-i 
idtype] idlist
pbind -Q [-c | 
g | l] [target_list]
pbind -U [-c | 
g | l] [target_list]

説明

pbind は、CPU に対するプロセスや LWP (軽量プロセス) のバインディングとアフィニティーを制御およびクエリーします。このユーティリティーを使用すると、ユーザーは、1 つまたは複数の LWP の実行をスケジュールすべきプロセッサ、そのようなバインディングを強く強制すべきか、それとも弱く強制すべきか、およびそれを子の LWP に継承すべき方法を決定できます。pbind は、特定のバインディングを使ってコマンドを実行するためにも使用できます。

強いアフィニティーを使用すると、ターゲット LWP は指定されたプロセッサでのみ実行されますが、弱いアフィニティーでは、そのような CPU での LWP の実行がベストエフォートの試行になります。pbind によって決定されたバインディングは排他的ではありません。つまり、プロセッサは自由にほかの LWP を実行することもできます。これは結果として、優先度の高いほかの LWP が同じプロセッサを占有している場合に、バインドされているスレッドが実行されなくなる可能性があることを意味します。

ターゲット CPU は、そのプロセッサ ID によって直接指定することも、そのプロセッサグループ (PG) または近傍性グループ (lgroup) ID によって間接的に指定することもできます。ユーザーは、負のアフィニティーを指定して、指定された CPU を回避すべきであることを示すこともできます。

特定の LWP のバインディングをクエリーする際、ユーザーは、結果となる CPU セットがその ID (それらが含まれるプロセッサグループまたは近傍性グループ) によって識別されるようにリクエストできます。同様に、特定のプロセッサのすべてのバインディングをクエリーまたは削除する際、ユーザーはその PG または lgroup ID によってそれを実行できます。

デフォルトでは、バインディングは exec(2)、fork(2)、および thr_create(3C) を介して継承されますが、ユーザーはそのようなアクションの 1 つまたは複数を通じて継承が行われないようにリクエストすることもできます。

pbind によって決定された実行時の動作が、指定された CPU の継続するオンライン状態や、ターゲット LWP と同じプロセッサセットへの所属の影響を受けやすいことに注意しておくことが大切です。これらのベースとなる条件が変わると、LWP は特定の CPU へのアフィニティーを失ってしまうため、条件が復元された時点で設定し直す必要があります。

スーパーユーザーは任意のプロセスまたは LWP をバインドまたはバインド解除できますが、ほかのユーザーは、自分がシグナルへのアクセス権を持っているプロセスまたは LWP (つまり、ユーザーと同じ実効ユーザー ID を持つプロセス) をバインドまたはバインド解除できます。

オプション

サポートしているオプションは、次のとおりです。

–b

このオプションは、1 つまたは複数の識別子とともに使用して、リクエストされたバインディングのターゲットとなる CPU、プロセッサグループ、または近傍性グループを示します。

有効なターゲットタイプとそれに対応する解釈は次のとおりです。

–c

CPU またはプロセッサ ID (デフォルト)。指定されたすべての CPU が存在し、オンラインになっている必要があります。target_list が存在し、オンラインであるかどうかを調べるには、psrinfo コマンドを使用します。詳細は、psrinfo(1M) を参照してください。

–g

プロセッサグループ ID。詳細は、pginfo(1M) を参照してください。

–l

近傍性グループ ID。指定された lgroup には、その操作を続行するためのオンラインの CPU が少なくとも 1 つ含まれている必要があります。詳細は、lgrpinfo(1M) を参照してください。

–n

指定されたターゲットプロセッサを回避すべきであることを示します。

–s

バインディングが強く強制されることを示す (デフォルト) ため、指定された LWP は所定のプロセッサでのみ実行されます。

–w

バインディングが弱く強制されることを示すため、指定された LWP は所定のプロセッサで実行されるのが望ましいですが、必要に応じてほかの場所でも実行できます。

–i idtype

このオプションは、idlist 引数とともに使用して、バインディングが適用される 1 つ以上のプロセスまたは LWP を指定します。idlist の解釈は idtype の値によって異なり、省略された場合はデフォルトで pid になります。

–i pid[/lwps]

idlist はプロセス ID のリストであり、各 ID のあとにスラッシュ (/) と、コンマで区切られた LWP ID のリストが続く可能性があります。LWP ID の範囲は、その範囲の開始と終了を - で区切って示すことができます。

–i ppid

idlist は親プロセス ID のリストです。バインディングコマンドは、親プロセス ID がそのリスト内にあるすべてのプロセスに適用されます。

–i pgid

idlist はプロセスグループ ID のリストです。バインディングコマンドは、指定されたプロセスグループ内のすべてのプロセスに適用されます。

–i uid

idlist はユーザー ID のリストです。バインディングコマンドは、実効ユーザー ID がリスト内の ID に等しいすべてのプロセスに適用されます。

–i gid

idlist はグループ ID のリストです。バインディングコマンドは、実効グループ ID がリスト内の ID に等しいすべてのプロセスに適用されます。

–i taskid

idlist はタスク ID のリストです。バインディングコマンドは、指定されたタスク内のすべてのプロセスに適用されます。

–i projid

idlist はプロジェクト ID のリストです。バインディングコマンドは、実効プロジェクト ID がリスト内の ID に等しいすべてのプロセスに適用されます。

–i zoneid

idlist はゾーン ID のリストです。バインディングコマンドは、実効ゾーン ID がリスト内の ID に等しいすべてのプロセスに適用されます。

P_MYID 識別子を上記のいずれかの ID タイプと組み合わせて使用すると、目的の ID が指定されたタイプの呼び出し側 LWP のそれになるよう指定できることに注意してください (たとえば、P_PIDP_MYID を組み合わせると、呼び出し側 LWP のプロセス ID になります)。

–x

exec(2) を介してアフィニティーを継承しません。

–f

fork(2) を介してアフィニティーを継承しません。

–t

thr_create(3C) を介してアフィニティーを継承しません。

–e

指定されたバインディングでコマンドを実行します。

–q

指定されたプロセスまたはすべてのプロセスの CPU バインディングを表示します。プロセスがバインディングの異なる複数の LWP で構成されていて、LWP が明示的に指定されていない場合は、バインドされている LWP のいずれか 1 つについてのみバインディングが表示されます。プロセス ID の後ろに「/lwpids」を付加することにより、一部の LWP のバインディングを表示できます。複数の LWP を選択するには、区切り記号「-」と「,」を使用します。

さらに、[–gl] オプションを含めると、指定された LWP がバインドされる CPU が含まれているプロセッサグループまたは近傍性グループがレポートに含まれるようにリクエストできます。デフォルトでは、プロセッサ ID が常に表示されます。

–Q

指定された一連の CPU、プロセッサグループ、または近傍性グループにバインドされている LWP、またはプロセッサバインディングを持つすべての LWP を表示します。複数の LWP で構成されているプロセスの場合は、個々の LWP のバインディングが表示されます。

–u

指定されたプロセスのすべてまたは一部の LWP のバインディングを削除し、それらを任意のオンラインプロセッサで実行できるようにします。

–U

指定された一連のプロセッサ、または引数が指定されていない場合は任意のプロセッサにバインドされているすべての LWP のバインディングを削除します。

戻り値

pbind は、正常終了時に 0 を返します。エラーが発生した場合は、結果となるエラー番号を示す正の整数が返されます。

エラー

pbind コマンドは、次の場合に失敗します。

ESRCH

指定されたプロセスまたは LWP が 1 つも存在しません。

EINVAL

指定された idtype または ID が存在しないか、ターゲットプロセッサがすべてオフラインまたは障害発生状態であるか、各種プロセッサセットの一部または指定されたオプションの組み合わせが無効です。

EPERM

{PRIV_PROC_OWNER} 特権が呼び出し側プロセスの実効セットで表明されず、その実ユーザーまたは実効ユーザー ID が、バインドされるどの LWP の実ユーザーまたは実効ユーザー ID とも一致しません。

使用例 1 プロセス 101048 を CPU 1 にバインドする同等の方法
# pbind -b 1 101048
pbind(1M): pid 101048 strongly bound to processor(s) 1.
# pbind -b -c 1 101048
pbind(1M): pid 101048 strongly bound to processor(s) 1.
# pbind -b -c 1 -i pid 101048
pbind(1M): pid 101048 strongly bound to processor(s) 1.
# pbind -b -c 1 -s -i pid 101048
pbind(1M): pid 101048 strongly bound to processor(s) 1.
使用例 2 プロセス 101048 を CPU 0-3 に再バインドする
# pbind -b -c 0-3 101048
pbind(1M): pid 101048 strongly bound to processor(s) 1.
pbind(1M): pid 101048 strongly bound to processor(s) 0 1 2 3.
使用例 3 プロセス 101048 をプロセッサグループ 1 の CPU に再バインドする
# pbind -b -g 1 101048
pbind(1M): pid 101048 strongly bound to Processor Group(s) 1 2.
pbind(1M): pid 101048 strongly bound to Processor Group(s) 1.
使用例 4 プロセス 101048 を近傍性グループ 2 の CPU に再バインドする
# pbind -b -l 2 101048
pbind(1M): pid 101048 strongly bound to Locality Group(s) 0 1.
pbind(1M): pid 101048 strongly bound to Locality Group(s) 0 2.
使用例 5 プロセス 101048 を CPU 2 に弱くバインドする
# pbind -b 2 -w 101048
pbind(1M): pid 101048 weakly bound to processor(s) 2.
使用例 6 プロセス 101048 を CPU 1 を除くすべての CPU にバインドする
# pbind -b 1 -n 101048
pbind(1M): pid 101048 strongly bound to processor(s) 0 2 3.
使用例 7 プロセス 101048 をプロセッサグループ 1 の CPU を除くすべての CPU に弱くバインドする
# pbind -b -g 1 -n -w 101048
pbind(1M): pid 101048 strongly bound to Processor Group(s) 1 2.
pbind(1M): pid 101048 weakly bound to Processor Group(s) 2
使用例 8 CPU、プロセッサグループ、および近傍性グループについて、プロセス 101048 のバインディングをクエリーする
# pbind -q 101048
pbind(1M): pid 101048 weakly bound to processor(s) 2 3.
# pbind -q -g 101048
pbind(1M): pid 101048 weakly bound to Processor Group(s) 2.
# pbind -q -l 101048
pbind(1M): pid 101048 weakly bound to Locality Group(s) 0 2.
使用例 9 プロセス 101048 のバインディングをクエリーする
# pbind -q -i pid 101048
pbind(1M): pid 101048 weakly bound to processor(s) 2 3.
使用例 10 プロセッサグループについて、プロセス 101048 のバインディングをクエリーする
# pbind -q -g -i pid 101048
pbind(1M): pid 101048 weakly bound to Processor Group(s) 2.
使用例 11 CPU 2 のすべてのバインディングをクエリーする
# pbind -Q 2
pbind(1M): LWP 101048/1 weakly bound to processor(s) 2 3.
pbind(1M): LWP 102122/1 weakly bound to processor(s) 2 3.
使用例 12 プロセス 101048 をバインド解除する
# pbind -u 101048
pbind(1M): pid 101048 successfully unbound.
使用例 13 CPU 1 からすべてのプロセスをバインド解除する
# pbind -U 1
使用例 14 近傍性グループ 2 からすべてのプロセスをバインド解除する
# pbind -U -l 2
使用例 15 特定のバインディングで ls(1) を実行する
# pbind -b -c 3 -e ls
file1  file2  file3  file4

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os

終了ステータス

次の終了ステータスが返されます。

0

正常終了。

>0

エラーが発生した。

関連項目

psrinfo(1M), psradm(1M), psrset(1M), pginfo(1M), lgrpinfo(1), processor_info(2), processor_bind(2), pset_create(2), pset_assign(2), pset_bind(2), pset_destroy(2), exec(2), fork(2), thr_create(3C), procset.h(3HEAD), attributes(5), privileges(5)

診断

pbind: cannot query pid 31: No such process

指定されたプロセスが存在しなかったか、終了しています。

pbind: cannot bind pid 31: Not owner

ユーザーに、そのプロセスをバインドする権限がありません。

pbind: cannot bind pid 31: Invalid argument

指定されたプロセッサがオンラインではありません。