Go to main content

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

印刷ビューの終了

更新: 2018年8月8日
 
 

pbind(8)

名前

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

形式

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

説明

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

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

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

init プロセス (プロセス ID は 1) は特殊なケースです。pbind コマンドが init プロセスで動作するには、idtypepid である必要があり、idlist は 1 のみで構成される必要があります。

特定の 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(8) を参照してください。

–r

コア ID。

–g

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

–l

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

–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 に等しいすべてのプロセスに適用されます。プロジェクト ID の代わりにプロジェクト名もサポートされています。

–i zoneid

idlist はゾーン ID のリストです。バインディングコマンドは、実効ゾーン 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 つも存在しません。

ERANGE

1 つ以上のターゲット CPU、プロセッサグループ、または近傍性グループが、現在のシステムに存在しません。

EINVAL

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

EPERM

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

使用例 1 プロセス 200 および 201 をプロセッサ 2 にバインドする

次の例では、プロセス 200 および 201 をプロセッサ 2 にバインドします。

$ pbind -b 2 200 201
	process id 200: was not bound, now 2
	process id 201: was not bound, now 2
使用例 2 プロセス 201 および 202 を CPU 2、5、6、および 7 にバインドする

次の例では、プロセス 201 および 202 を CPU 2、5、6、および 7 にバインドします。

$ pbind -b -c 2,5-7 201 202
	process id 201: was bound to CPU(s) 2, now bound to CPU(s) 2, 5-7
	process id 223: was bound to CPU(s) 2, now bound to CPU(s) 2, 5-7
使用例 3 プロセス 200 をプロセッサグループ 3 および 12 にバインドする

次の例では、プロセス 200 をプロセッサグループ 3 および 12 にバインドします。

$ pbind -b -g 3 12 200
	process id 204: was 2, now bound to Processor Group 3 (Socket) and 12 (Cache).
使用例 4 プロセス 200 を lgroup 5 にバインドする

次の例では、プロセス 200 を lgroup 5 にバインドします。

$ pbind -b -l 5 -i pid 200
	process id 204: was bound to Processor Group(s) 3 (Cache) and 12 (FPU),
	now bound to lgroup 5.
使用例 5 プロセス 205 を、プロセッサグループ 11 に含まれている CPU に弱くバインドする

次の例では、プロセス 205 を、プロセッサグループ 11 に含まれている CPU に弱くバインドします。

$ pbind -b -w -g 11 205
	process id 205: was not bound, now bound to Processor Group 11 (FPU).
使用例 6 プロセス 210 を、8 基のプロセッサが搭載されたシステム上のプロセッサ 0 - 3 を除くすべての CPU にバインドする

次の例では、プロセス 210 を、8 基のプロセッサが搭載されたシステム上のプロセッサ 0 - 3 を除くすべての CPU にバインドします。

$ pbind -b -n 0-3 210
	process id 205: was not bound, now bound to CPUs 4-7
使用例 7 プロジェクト名を指定してプロジェクト testing を CPU 1 にバインドする

次の例では、プロジェクト testing の名前を指定することによってプロジェクトを CPU 1 にバインドします。

$ pbind -b 1 -i projid testing
     process id 205: was not bound, now bound to CPUs 4-7
     pbind(1M): pid 101438 strongly bound to processor(s) 1.
     pbind(1M): pid 101447 strongly bound to processor(s) 1.
使用例 8 プロセス 204 をバインド解除する

次の例では、プロセス 204 をバインド解除します。

$ pbind -u 204
	process id 204: was 1, now not bound

使用例 9 ユーザーのすべての 606 LWP をバインド解除する

次の例では、ユーザーのすべての 606 LWP をバインド解除します。

$ pbind -u -i uid 606
	user id 204: had bindings to CPUs 3, 5 and 6, now not bound
使用例 10 プロセス 1、149、および 101 のバインディングをクエリーする

次の例では、プロセス 1、149、および 101 のバインディングをクエリーします。

$ pbind -q 1 149 101
	process id 1: 0
	process id 149: 3
	process id 101: not bound
使用例 11 対象となる近傍性グループを含め、ゾーン 2 内にある LWP のすべてのバインディングをクエリーする

次の例では、対象となる近傍性グループを含め、ゾーン 2 内にある LWP のすべてのバインディングをクエリーします。

$ pbind -q -l -i zoneid 2
	process id 1011: bound to CPU(s) in lgroup 4
	process id 1518: bound to CPU(s) in lgroup 8
使用例 12 プロセス 149 の LWP 1 および 2 のバインディングをクエリーする

次の例では、プロセス 149 の LWP 1 および 2 のバインディングをクエリーします。

$ pbind -q 149/1-2
	lwp id 149/1: 3
	lwp id 149/2: not bound

pid idtype を明示的に指定することで、同じ操作を実行できます。

$ pbind -q -i pid 149/1-2
	lwp id 149/1: 3
	lwp id 149/2: not bound
使用例 13 対象となるプロセッサグループを含め、プロセス 210 のバインディングをクエリーする

次の例では、対象となるプロセッサグループを含め、プロセス 210 のバインディングをクエリーします。

$ pbind -q -g -i pid 210
	lwp id 149/1: bound to CPU(s) in Processor Group 12 (Cache)
	lwp id 149/2: not bound

使用例 14 CPU 2 のバインディングをクエリーする

次の例では、CPU 2 のバインディングをクエリーします。

$ pbind -Q 2
	lwp id 149/4: 2
	lwp id 149/5: 2

次の同等の例では、CPU ID に基づいてアフィニティーをクエリーしていることを明示的に指定します。

$ pbind -Q -c 2
	lwp id 149/4: 2
	lwp id 149/5: 2
使用例 15 lgroup 2 に含まれている CPU のバインディングをクエリーする

次の例では、lgroup 2 に含まれている CPU のバインディングをクエリーします。

$ pbind -Q -l 2
	lwp id 149/4: bound to CPUs in lgroup 2
	lwp id 149/5: bound to CPUs in lgroup 2
使用例 16 プロセス 101048 をコア ID 0 にバインドする

次の例では、プロセス 101048 をコア ID 0 にバインドします。

# pbind -b -r 0 -i pid 101048 
pbind(1M): pid 101048 strongly bound to Core(s) 0.
使用例 17 プロセス 101048 をコア ID 0-3 に再バインドする

次の例では、プロセス 101048 をコア 0、1、2、3 に再バインドします。

# pbind -b -r 1 -i pid 101048 
pbind(1M): pid 101048 strongly bound to Core(s) 0. 
pbind(1M): pid 101048 strongly bound to Core(s) 0 1 2 3.
使用例 18 コア ID 1 からすべてのプロセスをバインド解除する

次の例では、コア ID 1 からすべてのプロセスをバインド解除します。

# pbind -U -r 1

属性

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

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

関連項目

processor_bind(2)processor_info(2)sysconf(3C)attributes(7)resource-management(7)、psradm(8)psrinfo(8)psrset(8)