たとえば、マルチスレッドアプリは8コアのSolarisで実行されます。各スレッドとコア#の間のマッピングを一覧表示する方法はありますか?
ありがとう、
たとえば、マルチスレッドアプリは8コアのSolarisで実行されます。各スレッドとコア#の間のマッピングを一覧表示する方法はありますか?
ありがとう、
まず、C コードを記述して、プロセス内の各スレッドを照会し、そこを開いて、定義され/proc/[id]/lwp/[tid]/lwpsinfo
ている構造体にフェッチできますlwpsinfo_t
procfs.h
processorid_t pr_onpro; /* processor which last ran this lwp */
processorid_t pr_bindpro; /* processor to which lwp is bound */
気になるメンバーは二人。時間を無駄にする前に
多くの時間を無駄にする前に次の作業を行います (ゾーンを想定):
prctl -i zone {ZONENAME}
大域ゾーンでのみ root によって実行されます。次のような出力が得られます。
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
zone.max-swap
system 16.0EB max deny -
zone.max-locked-memory
system 16.0EB max deny -
zone.max-shm-memory
system 16.0EB max deny -
zone.max-shm-ids
system 16.8M max deny -
zone.max-sem-ids
system 16.8M max deny -
zone.max-msg-ids
system 16.8M max deny -
zone.max-lwps
system 2.15G max deny -
zone.cpu-cap
privileged 1.20K - deny -
system 4.29G inf deny -
zone.cpu-shares
privileged 1 - none -
system 65.5K max none -
zone.cpu-cap 1.20K は 1200 == パーセントを意味します。したがって、1200 は 12 CPU を意味します。私があなたの管理者だったら、DEV または TEST ゾーンに 64 個のコアがあるはずがありません。なので、まずはチェック。
さらに、あなたの仮定は間違っているようです。アフィニティ (プロセッサ セットなど) が有効でない限り、システムは現在有効なスケジューリング アルゴリズム (FSS など) を使用して CPU をスレッドに割り当てます。これは、スケジューラと負荷に応じて、任意のスレッドがいつでも使用可能な任意の CPU に移動できることを意味します。