Sun Studio 12: パフォーマンスアナライザ

dbx による動作中のプロセスからのデータの収集

コレクタでは、動作中のプロセスからデータを収集できます。プロセスがすでに dbx の制御下にある場合は、プロセスを一時停止し、これまでに説明した方法を使用してデータ収集を有効にすることができます。

プロセスが dbx の制御下にない場合は、collect –P pid コマンドを使用して、実行中のプロセスからデータを収集できます。詳細は、collect ユーティリティーによる動作中のプロセスからのデータの収集」を参照してください。プロセスに dbx を接続し、パフォーマンスデータを収集し、プロセスから切り離して、プロセスの実行を継続することもできます。選択した派生プロセスのパフォーマンスデータを収集するには、各プロセスに dbx を接続する必要があります。

Proceduredbx の制御下にない動作中のプロセスからデータを収集する

  1. プログラムのプロセス ID (PID) を調べます。

    コマンド行からプログラムを起動していて、バックグラウンドで実行している場合は、シェルによってその PID が標準出力に出力されます。その他の場合は、次のように入力してプログラムの PID を調べることができます。


    % ps -ef | grep program-name
    
  2. プロセスに接続します。

    dbx から、次のように入力します。


    (dbx) attach program-name pid
    

    dbx をまだ実行していない場合は、次のように入力します。


    % dbx program-name pid
    

    実行中のプロセスに接続すると、そのプロセスが一時停止します。

    プロセスへの接続については、『Sun Studio 12: Debugging a Program With dbx』を参照してください。

  3. データの収集を開始します。

    dbx から、collector コマンドを使用してデータ収集パラメータを設定し、cont コマンドを使用してプロセスを再開します。

  4. プロセスから切り離します。

    データの収集を完了したら、プログラムを一時停止し、dbx からプロセスを切り離します。

    dbx から、次のように入力します。


    (dbx) detach
    

動作中のプロセスからのトレースデータの収集

トレースデータを収集する場合は、プログラムを実行する前に、コレクタライブラリの libcollector.so を事前に読み込んでおく必要があります。 これは、このライブラリによって、データの収集を可能にする実関数にラッパーが提供されるためです。また、コレクタは、ほかのシステムライブラリの呼び出しにもラッパー関数を追加し、それによって完全なパフォーマンスデータを確保できます。コレクタライブラリを事前に読み込まなかった場合、ラッパー関数は挿入できません。コレクタがシステムライブラリ関数に割り込む方法の詳細については、「システムライブラリの使用」を参照してください。

libcollector.so を事前に読み込むには、次の表に示すように、環境変数を使用してライブラリ名とライブラリパスの両方を設定する必要があります。ライブラリ名を設定するには、環境変数 LD_PRELOAD を使用します。ライブラリのパスを設定するには、環境変数 LD_LIBRARY_PATHLD_LIBRARY_PATH_32、または LD_LIBRARY_PATH_64 を使用します。LD_LIBRARY_PATH は、_32_64 バリアントが定義されていない場合に使用します。これらの環境変数をすでに定義している場合は、新しい値を追加してください。

表 3–2 libcollector.so ライブラリを事前に読み込むための環境変数の設定

環境変数 

値 

LD_PRELOAD

libcollector.so

LD_LIBRARY_PATH

/opt/SUNWspro/prod/lib/dbxruntime

LD_LIBRARY_PATH_32

/opt/SUNWspro/prod/lib/dbxruntime

LD_LIBRARY_PATH_64

/opt/SUNWspro/prod/lib/v9/dbxruntime

LD_LIBRARY_PATH_64

/opt/SUNWspro/prod/lib/amd64/dbxruntime

Sun Studio ソフトウェアが /opt/SUNWspro 以外にインストールされている場合は、システム管理者に正しいパスを確認してください。LD_PRELOAD にフルパスを設定することもできますが、そのようにすると、SPARC V9 の 64 ビットアーキテクチャーを使用するときに問題が発生する可能性があります。


注 –

実行が終了したら、LD_PRELOADLD_LIBRARY_PATH の設定を削除し、同じシェルから起動されるほかのプログラムが設定の影響を受けないようにしてください。


すでに実行中の MPI プログラムからデータを収集する場合は、プロセスごとに 1 つの dbx インスタンスを接続し、それらのプロセスごとにコレクタを有効にする必要があります。MPI ジョブのプロセスに dbx を接続すると、各プロセスが停止され、別々の時間に再起動されます。この時間差によって MPI プロセス間のインタラクションに変化が生じ、収集するパフォーマンスデータに影響を及ぼす可能性があります。この問題の影響を最小限にするための 1 つの方法に、 pstop(1) コマンドを使用してすべてのプロセスを停止することがあります。ただし、プロセスを一度 dbx に接続すると、dbx からそれらのプロセスを再開する必要があり、そのときに時間的な遅延が発生して、MPI プロセスの同期に影響が出ることがあります。「MPI プログラムからのデータの収集」も参照してください。