0

たとえば、マルチスレッドアプリは8コアのSolarisで実行されます。各スレッドとコア#の間のマッピングを一覧表示する方法はありますか?

ありがとう、

4

1 に答える 1

1

まず、C コードを記述して、プロセス内の各スレッドを照会し、そこを開いて、定義され/proc/[id]/lwp/[tid]/lwpsinfo ている構造体にフェッチできますlwpsinfo_tprocfs.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 に移動できることを意味します。

于 2013-03-01T21:56:40.040 に答える