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

印刷ビューの終了

更新: 2015 年 1 月
 
 

実験の形式

    すべての実験には、次の 3 つのファイルが含まれています。

  • ログファイル (log.xml)。収集されたデータの種類、各種コンポーネントのバージョン、ターゲットが存続している間の各種イベントのレコード、およびターゲットのワードサイズに関する情報が含まれている XML ファイル。

  • マップファイル (map.xml)。ターゲットのアドレス空間にどのようなロードオブジェクトがロードされたかに関する時間依存の情報、およびそれらのロードオブジェクトがロードまたはアンロードされた時間を記録した XML ファイル。

  • 概要ファイル。実験内のあらゆる標本ポイントで記録された使用情報を含むバイナリファイル。

また、実験にはプロセスが存続している間のプロファイルイベントを表すバイナリデータファイルがあります。パフォーマンスメトリックの解釈で説明されているように、各データファイルには一連のイベントが含まれています。データの種類ごとに個別のファイルが使用されますが、各ファイルはターゲット内のすべてのスレッドで共有されます。

クロックプロファイリングまたはハードウェアカウンタオーバーフロープロファイリングの場合、データは、クロックティックまたはカウンタオーバーフローによって呼び出されたシグナルハンドラで書き込まれます。同期トレース、ヒープトレース、I/O トレース、MPI トレース、または OpenMP トレースの場合、データは、通常ユーザーによって呼び出されたルーチンで LD_PRELOAD 環境変数によって割り込まれた libcollector ルーチンから書き込まれます。そのような割り込み処理ルーチンは部分的にデータレコードを記入したあと、通常のユーザー呼び出しルーチンを呼び出し、ルーチンが復帰したときにデータレコードの残りの部分を記入し、データファイルにレコードを書き込みます。

すべてのデータファイルはメモリーマップされ、ブロック単位で書き込まれます。レコードは常に有効なレコード構造を持つように記入されるので、実験は書き込み中に読み取ることができます。このバッファー管理の方針は、スレッド間の競合や直列化を最小限に抑えるように設計されています。

オプションで、notes という名前の ASCII ファイルを実験に含めることができます。このファイルは、collect コマンドに -C comment 引数を使用すると、自動的に作成されます。実験の作成後、ファイルを手動で編集または作成できます。ファイルの内容は、実験のヘッダーの先頭に付加されます。

archives ディレクトリ

各実験には archives ディレクトリがあり、このディレクトリには、map.xml ファイル内で参照されている各ロードオブジェクトについて記述したバイナリファイルがあります。これらのファイルは、データ収集の終了時に実行される er_archive ユーティリティーによって作成されます。プロセスが異常終了すると、er_archive ユーティリティーが呼び出されないことがあります。その場合は、er_print ユーティリティーまたはパフォーマンスアナライザが、その実験で最初に呼び出されたときにアーカイブファイルを書き込みます。

アーカイブディレクトリにはまた、実験をアーカイブするために使用されるオプションに応じて、共有オブジェクトまたはソースファイルのコピーを含めることもできます。

サブ実験

サブ実験は、派生プロセスをたどったり、MPI 実験を収集したり、ユーザープロセスでカーネルをプロファイルしたりする場合など、複数のプロセスがプロファイルされるときに作成されます。

    派生プロセスは、その実験を親実験のディレクトリ内のサブディレクトリに書き込みます。これらの新しいサブ実験には、次のように、その系統を示す名前が付けられます。

  • 作成者の実験名にアンダースコアが付加される。

  • fork には f、exec には x、そのほかの派生実験には c のコード文字が追加される。Linux では、Cclone(2) によって生成された子孫に使用されます。

  • コード文字のあとに、fork または exec のインデックスを示す数字が追加される。

  • 実験接尾辞 .er を付加して実験名が完成する。

ユーザープロセスでは、親プロセスの実験名が test.1.er である場合、その 3 番目の fork によって作成された派生プロセスの実験は test.1.er/_f3.er になります。その派生プロセスが新しいイメージを実行した場合、対応する実験名は test.1.er/_f3_x1.er になります。派生実験は親の実験と同じファイルから構成されていますが、派生実験を持たず (すべての派生は親の実験内のサブディレクトリで表される)、アーカイブサブディレクトリを持っていません (すべてのアーカイブが親の実験内へ行われる)。

カーネル上の実験には、デフォルトでは test.1.er ではなく、ktest.1.er という名前が付けられます。データがユーザープロセスでも収集されるときは、カーネル実験には後続のユーザープロセスごとのサブ実験が含まれます。カーネルサブ実験には、_process-name_PID_process-id.1.er の形式を使用して名前が付けられます。たとえば、プロセス ID 1264 で実行されている sshd プロセス上で実行される実験には、ktest.1.er/_sshd_PID_1264.1.er という名前が付けられます。

MPI プログラムのデータはデフォルトでは test.1.er に収集され、MPI プロセスからのすべてのデータはサブ実験に収集されます (ランクごとに 1 つ)。コレクタは、MPI ランクを使用して、M_rm.er の形式のサブ実験名を構築します。ここで、m は MPI ランクです。たとえば、MPI ランク 1 の実験データは、test.1.er/M_r1.er ディレクトリ内に記録されます。

動的関数

ターゲットが動的関数を作成する実験では、map.xml ファイル内にこれらの関数を記述した追加レコードが存在します。追加ファイル dyntext には、動的関数の実際の命令のコピーが含まれています。動的な関数の注釈付き逆アセンブリを生成するには、このコピーが必要です。

Java 実験

Java 実験では、map.xml ファイル内には、その内部処理用に JVM ソフトウェアで作成された動的関数用と、ターゲット Java メソッドの動的にコンパイルされた (HotSpot) バージョン用の追加レコードがあります。

さらに、Java 実験には、ユーザーの呼び出されたすべての Java クラスに関する情報を含む JAVA_CLASSES ファイルが含まれています。

Java トレースデータは、libcollector.so の一部である JVMTI エージェントを使用して記録されます。エージェントは、記録されたトレースイベントへマップされるイベントを受け取ります。このエージェントはまた、JAVA_CLASSES ファイルの書き込みや、Java でコンパイルされたメソッドレコードの map.xml ファイルへの書き込みに使用される、クラスのロードや HotSpot コンパイルのためのイベントも受信します。