Oracle® Solaris Studio 12.4: パフォーマンスアナライザ

印刷ビューの終了

更新: 2015 年 1 月
 
 

実験の記録

    ユーザーモードのターゲット上の実験は、次の 3 種類の方法で記録できます。

  • collect コマンド

  • dbx によるプロセスの生成

  • dbx による実行中のプロセスからの実験の作成

パフォーマンスアナライザの「アプリケーションのプロファイル」ダイアログでは、collect 実験を実行します。

collect 実験

collect コマンドを使用して実験を記録する場合、collect ユーティリティーは実験ディレクトリを作成して LD_PRELOAD 環境変数を設定することにより、libcollector.so やその他の libcollector モジュールが確実にターゲットのアドレス空間に事前にロードされるようにします。collect ユーティリティーは、その後、libcollector.so に実験名を知らせるための環境変数とデータ収集オプションを設定し、ターゲットをその上で実行します。

libcollector.so および関連モジュールが、すべての実験ファイルを書き込みます。

プロセスを作成する dbx 実験

データ収集を有効にした状態で dbx を使用してプロセスを起動すると、dbx は実験ディレクトリも作成し、libcollector.so が事前に読み込まれるようにします。dbx は最初の命令の前のブレークポイントでプロセスを停止し、次にデータ収集を開始するために libcollector.so 内の初期化ルーチンを呼び出します。

dbx はデバッグに Java Virtual Machine Debug Interface (JVMDI) エージェントを使用するため、dbx では Java 実験を収集できません。そのエージェントは、データ収集に必要な Java Virtual Machine Tools Interface (JVMTI) エージェントと共存できません。

実行中プロセス上の dbx 実験

dbx は実行中プロセスでの実験開始に使用すると実験ディレクトリを作成しますが、LD_PRELOAD 環境変数は使用できません。dbx はターゲットへの対話式関数呼び出しを行なって libcollector.so を開いたあと、プロセスを作成する場合と同様に libcollector.so の初期化ルーチンを呼び出します。データは、collect による実験の場合と同様に libcollector.so とそのモジュールによって書き込まれます。

このプロセスが開始されたときに libcollector.so はターゲットのアドレス空間に存在しなかったため、ユーザー呼び出し可能関数に対する割り込みに依存するデータ収集 (同期トレース、ヒープトレース、MPI トレース) はどれも機能しない可能性があります。一般に、シンボルは基盤となる関数にすでに解決されているため、割り込み処理は行えません。さらに、派生プロセスの次も割り込み処理に依存し、実行中プロセスで dbx により作成された実験に対して適切に機能しません。

dbx でプロセスを開始する前、または dbx を使用して実行中プロセスに接続する前に明示的に libcollector.so を事前ロードしている場合は、トレースデータを収集できます。