パフォーマンスアナライザは、collect コマンド、IDE、または dbx で collector コマンドを使用したときに、コレクタが収集したパフォーマンスデータを解析するグラフィカルデータ解析ツールです。第 3 章「パフォーマンスデータの収集」で説明されているように、プロセスの実行中、コレクタはパフォーマンス情報を収集して実験を作成します。パフォーマンスアナライザは、これらの実験を読み取り、そのデータを解析して表やグラフの形式に表示します。アナライザは er_print ユーティリティーとしてコマンド行からも利用できます。これについては、第 6 章「 er_print コマンド行パフォーマンス解析ツール」を参照してください。
パフォーマンスアナライザを起動するには、コマンド行に次のように入力します。
% analyzer [control-options] [experiment-list] |
または、IDE の「エクスプローラ」を使って、実験に移動し、これを開きます。experiment-list コマンド引数には、実験名、実験グループ名、またはその両方を空白で区切って指定します。
複数の実験または実験グループをコマンド行に指定できます。その中に派生実験を持つ実験を指定すると、すべての派生実験が自動的に読み込まれますが、派生実験のデータは表示されません。個々の派生実験を読み込むには、それぞれの実験を明示的に指定するか、実験グループを作成する必要があります。
実験グループを作成するには、collect ユーティリティーの -g 引数を使用できます。実験グループを手動で作成するには、最初の行が次のようなプレーンテキストファイルを作成します。
#analyzer experiment group
このあとの行に実験の名前を追加します。ファイルの拡張子は、erg である必要があります。
また、「アナライザ」ウィンドウの「ファイル」メニューを使って、実験や実験グループを追加することもできます。ファイル選択用ダイアログではディレクトリとして実験を開くことはできないため、派生プロセスについて記録された実験を開くには、「実験を開く」ダイアログボックスまたは「実験を追加」ダイアログボックスにファイル名を入力する必要があります。
ただし、複数の実験の表示では、読み込み方法に関係なく、すべての実験のデータが集計されます。
「実験を開く」ダイアログボックスまたは「実験を追加」ダイアログボックスのいずれかで名前をシングルクリックすることで、読み込む実験や実験グループをプレビューできます。
また、次のようにコマンド行から、実験を記録するためにパフォーマンスアナライザを起動することもできます。
% analyzer [Java-options] [control-options] target [target-arguments] |
アナライザによってパフォーマンスツールの「収集」ウィンドウが開かれ、指定したターゲットとその引数、および実験を収集するための設定が表示されます。詳細は、「実験の記録」を参照してください。
これらのオプションはアナライザの動作を制御し、次の 3 つのグループに分類されます。
Java オプション
制御オプション
情報オプション
アナライザを実行するための JVM ソフトウェアへのパスを指定します。-j オプションを指定しなかった場合、JVM へのパスを示す環境変数、JDK_HOME と JAVA_PATH をこの順序で調べることによってデフォルトのパスが最初に取得されます。どちらの環境変数も設定されていない場合、デフォルトパスは Sun Studio インストーラによって JavaTM 2 Software Development Kit がインストールされたパスになります。SDK がインストールされていない場合は、ユーザーの PATH 上に見つかった JVM が使用されます。デフォルトのパスをすべて無効にするには、-j オプションを使用します。
JVM オプションを指定します。
アナライザ GUI で使用するフォントサイズを指定します。
起動する前にバージョン情報と Java 実行時引数を出力します。
これらのオプションではパフォーマンスアナライザ GUI は起動されず、analyzer についての情報が標準出力に出力されます。次に示すオプションはそれぞれスタンドアロンのオプションで、ほかの analyzer オプションと組み合わせたり、target または experiment-list 引数と組み合わせることはできません。
バージョン情報を出力して終了します。
使用方法に関する情報を出力して終了します。
アナライザは、.er.rc というリソースファイルを使用して、起動時の各種設定のデフォルト値を決定します。システム全体のデフォルトファイル er.rc が最初に読み取られ、次にユーザーのホームディレクトリにある er.rc ファイル (存在する場合)、そして現在のディレクトリの er.rc ファイルが読み取られます。ホームディレクトリの .er.rc ファイル内のデフォルト値はシステムのデフォルト値よりも優先し、現在のディレクトリの .er.rc ファイル内のデフォルト値は、ユーザーのホームおよびシステムのデフォルト値よりも優先します。.er.rc ファイルは、アナライザと er_print ユーティリティーによって使用されます。ソースおよび逆アセンブリのコンパイラのコメントに適用する .er.rc 内の設定は、er_src ユーティリティーによっても使用されます。
.er.rc ファイルの詳細については、「アナライザのデフォルト設定」の節を参照してください。er_print コマンドを使用したデフォルト設定については、「デフォルト値を設定するコマンド」と 「パフォーマンスアナライザにのみデフォルト値を設定するコマンド」を参照してください。
「アナライザ」ウィンドウは、メニューバー、ツールバー、および各種データ表示のためのタブを含む分割区画で構成されます。
メニューバーには、「ファイル」メニュー、「表示」メニュー、「タイムライン」メニュー、および「ヘルプ」メニューがあります。
「ファイル」メニューでは、実験や実験グループを開いたり、追加したり、ドロップしたりできます。「ファイル」メニューでは、パフォーマンスアナライザ GUI を使って実験のデータを収集できます。パフォーマンスアナライザを使ってデータを収集する方法については、「実験の記録」を参照してください。「ファイル」メニューでは、マップファイルを作成することもできます。マップファイルを使って、実行可能ファイルのサイズを最適化したり、その実効キャッシュ動作を最適化できます。マップファイルの詳細については、「マップファイルの生成と関数の順序の変更」を参照してください。
「タイムライン」メニューは、その名前が示すとおり、タイムライン表示の操作を支援します。これについては、「アナライザデータ表示」で説明します。
「ヘルプ」メニューは、パフォーマンスアナライザのオンラインヘルプを提供します。これには、新機能の概要を示し、クイックリファレンスとショートカットの説明、およびトラブルシューティングの説明が含まれます。
ツールバーは、ショートカットとして一連のアイコンを提供します。これには、各タブ内のテキストまたは強調表示された行を見つけるのに役立つ検索機能が含まれています。検索機能の詳細については、「テキストとデータの検索」を参照してください。
パフォーマンスアナライザは、分割ウィンドウを使って、表示されるデータを 2 つの区画に分割します。各区画にはタブが付けられており、同じ実験や実験グループに対して異なるデータ表示を選択できます。
左の区画には、主要なアナライザ表示のタブが次の順序で表示されます。
「競合」タブ
「デッドロック」タブ
「関数」タブ
「呼び出し元 - 呼び出し先」タブ
「デュアルソース」タブ
「ソース/逆アセンブリ」タブ
「ソース」タブ
「行」タブ
「逆アセンブリ」タブ
「PC」タブ
「タイムライン」タブ
「リーク一覧」タブ
「データオブジェクト」タブ
「データレイアウト」タブ
「命令頻度」タブ
「統計」タブ
「実験」タブ
各種のメモリーオブジェクトのタブ
各種のインデックスオブジェクトのタブ
ターゲットを指定せずにアナライザを起動すると、開く実験を入力するプロンプトが表示されます。
デフォルトでは、表示可能な最初のタブが選択されます。表示されるタブは、読み込まれた実験内のデータに適用できるタブだけです。
実験を開いたときに「アナライザ」ウィンドウの左の区画にタブが表示されるかどうかは、アナライザを起動したときに読み込まれた .er.rc ファイル内の tabs 指令と、そのタブを実験内のデータに適用できるかどうかによって決定されます。 「データ表示方法の設定」ダイアログボックスの「タブ」タブを (「「タブ」タブ」 を参照) 使用すると、実験について表示するタブを選択できます。
「競合」タブには、データ競合実験で検出されたすべてのデータ競合のリストが表示されます。詳細は、『Sun Studio 12: Thread Analyzer User’s Guide』を参照してください。
「デッドロック」タブには、デッドロック実験で検出されたデッドロックのリストが表示されます。詳細は、『Sun Studio 12: Thread Analyzer User’s Guide』を参照してください。
「関数」タブには、関数とそのメトリックのリストが表示されます。メトリックは、実験で収集されたデータから得られます。メトリックは、排他的または包括的になります。排他的メトリックは、関数自体の中での使用を表します。包括的メトリックは、関数とその関数が呼び出したすべての関数内での使用を表します。
収集されたそれぞれの種類のデータで使用できるメトリックのリストは、collect(1) のマニュアルページを参照してください。表示されるのは、メトリックがゼロ以外の関数だけです。
時間メトリックは秒数として表示され、ミリ秒の精度で示されます。百分率は 0.01 % の精度で示されます。メトリック値が正確にゼロの場合、その時間と百分率は「0」として表示されます。値が正確にゼロではなく、精度より小さい場合、その値は「0.000」、百分率は「0.00」として表示されます。丸めのため、百分率は合計が正確に 100 % にならない場合もあります。 カウントメトリックは整数カウントとして示されます。
初めに表示されるメトリックは、収集されたデータ、および各種 .er.rc ファイルから読み取られたデフォルト設定に基づいています。パフォーマンスアナライザを最初にインストールしたときのデフォルトは、次のようになります。
ハードウェアカウンタオーバーフローのプロファイリングでは、デフォルトセットは、包括的および排他的時間 (循環カウントのカウンタの場合) またはイベントカウント (ほかのカウンタの場合) から構成されます。
複数の種類のデータが収集された場合、各種類のデフォルトのメトリックが表示されます。
表示されるメトリックは、変更または再構成できます。詳細はオンラインヘルプを参照してください。
関数を検索するには、「検索」ツールを使用します。「検索」ツールの詳細については、「テキストとデータの検索」を参照してください。
単一の関数を選択するには、その関数をクリックします。
タブ内に隣接して表示された複数の関数を選択するには、グループの最初の関数を選択したあと、Shift キーを押したままグループの最後の関数をクリックします。
タブ内に表示された隣接していない複数の関数を選択するには、グループの最初の関数を選択したあと、Ctrl キーを押したまま、追加する関数を個々にクリックして選択します。
ツールバーの「フィルタ句を構成」ボタンをクリックすると、「フィルタ」ダイアログボックスが開き、その中で「詳細」タブが選択され、「フィルタ句」テキストボックスに「関数」タブで選択された項目を反映したフィルタ句が読み込まれます。
「呼び出し元 - 呼び出し先」タブの中央区画には選択された関数が表示され、上の区画にはその関数の呼び出し元が、下の区画には呼び出し先が表示されます。
このタブには、各関数の排他的メトリック値と包括的メトリック値のほか、属性メトリックも表示されます。選択された関数の属性メトリックは、その関数の排他的メトリックを表します。呼び出し先の場合、属性メトリックは、呼び出し先の包括的メトリックのうち、中央の関数からの呼び出しに起因する部分を示します。呼び出し先の属性メトリックと選択された関数の合計が、選択された関数の包括的メトリックになります。
呼び出し元の場合、関数の属性メトリックは、選択された関数の包括的メトリックのうち、呼び出し元からの呼び出しに起因する部分を示します。すべての呼び出し元の属性メトリックの合計が、選択された関数の包括的メトリックにもなるはずです。
「呼び出し元 - 呼び出し先」タブに表示されるメトリックは、変更または再構成できます。詳細はオンラインヘルプを参照してください。
呼び出し元または呼び出し先の区画の関数を 1 回クリックすると、その関数が選択され、ウィンドウの内容が再描画されて、選択された関数が中央区画に表示されます。
「デュアルソース」タブには、選択したデータ競合またはデッドロックに関わる 2 つのソースコンテキストが表示されます。このタブは、データ競合検出またはデッドロック実験が読み込まれている場合にのみ表示されます。
「ソース/逆アセンブリ」タブでは、上の区画に注釈付きソースが、下の区画には注釈付き逆アセンブリが表示されます。このタブはデフォルトでは表示されません。「ソース/逆アセンブリ」タブを追加するには、「表示」メニューの「データ表示方法の設定」オプションを使用します。
「ソース」タブには、選択された関数のソースコードが利用可能である場合に、そのソースコードを含むファイルが、各ソース行に対応するパフォーマンスメトリックの注釈付きで表示されます。ソースファイル、対応するオブジェクトファイル、およびロードオブジェクトの完全な名前が、ソースコードの見出しに示されます。まれに、1 つのソースファイルを使って複数のオブジェクトファイルがコンパイルされている場合は、選択された関数を含むオブジェクトファイルのパフォーマンスデータが「ソース」タブに表示されます。
アナライザは、実行可能ファイルに記録されているような絶対パス名で、選択された関数を含むファイルを探します。そのようなファイルが存在しない場合、アナライザは、現在の作業ディレクトリから同じベース名のファイルを探そうと試みます。ソースを移動した場合、また別のファイルシステムに実験が記録された場合は、注釈付きソースを表示するために、現在のディレクトリからそのソースの実際の場所へのシンボリックリンクを設定できます。
「関数」タブで関数を選択し、「ソース」タブを開いたとき、表示されるソースファイルは、その関数のデフォルトソースコンテキストです。関数のデフォルトソースコンテキストは、その関数の最初の命令 (C コードの場合は、開く中括弧) を含んでいるファイルです。注釈付きソースファイルでは、最初の命令の直後にその関数のインデックス行が追加されます。ソースウィンドウには、インデックス行が赤いイタリック体のテキストとして山括弧内に次の形式で表示されます。
<関数: f_name>
関数は、代替のソースコンテキストを持つ場合もあります。代替のソースコンテキストは、その関数に帰属する命令が入った別のファイルです。そのような命令は、インクルードファイルに入っているか、選択された関数内にインライン化された別の関数に入っている命令です。代替のソースコンテキストが存在する場合、デフォルトのソースコンテキストの先頭に、代替ソースコンテキストが置かれている場所を示す拡張インデックス行のリストが組み込まれます。
<関数: f, ソースファイル src.h から得られた命令>
別のソースコンテキストを参照するインデックス行をダブルクリックすると、そのソースコンテキストが入っているファイルが、インデックスで示された関数に関連した位置から開かれます。
移動に役立つよう、代替ソースコンテキストも、そのデフォルトソースコンテキストおよびほかの代替ソースコンテキスト内で定義された関数を逆に参照するインデックス行のリストで始まります。
ソースコードは、表示するように選択されたコンパイラのコメントとともにインタリーブされます。表示するコメントのクラスは、「データ表示方法の設定」ダイアログボックスで設定できます。デフォルトのクラスは、.er.rc デフォルト値ファイルで設定することができます。
「ソース」タブに表示されるメトリックは、変更または再構成できます。詳細はオンラインヘルプを参照してください。
ソースファイル内の任意の行のメトリックがその最大値のしきい値百分率と等しいかそれを超える行は、強調表示されるため、重要な行を容易に識別できます。しきい値は、「データ表示方法の設定」ダイアログボックスで設定できます。デフォルトのしきい値は、.er.rc デフォルト値ファイルで設定できます。ソースファイル内でしきい値を超えている行の位置に対応して、スクロールバーの横にティックマークが表示されます。たとえば、ソースファイルの末尾近くにしきい値を超えている行が 2 行ある場合は、ソースウィンドウの下部近くのスクロールバーの横に 2 つのティックマークが表示されます。ティックマークの横にスクロールバーを移動すると、それに対応するしきい値を超えた行が表示されるように、ソースウィンドウに表示されるソース行が位置付けられます。
「行」タブには、ソース行とそのメトリックのリストが表示されます。ソース行は、そのラベルとして、呼び出し元の関数、行番号、およびソースファイル名で示されます。関数の行番号情報が得られない場合、または関数のソースファイルが不明の場合は、その関数の全プログラムカウンタ (PC) が 1 つのエントリとしてまとめて表示されます。関数が非表示のロードオブジェクトにある関数の PC は、ロードオブジェクト別に「行」表示に 1 つのエントリにまとめて表示されます。「行」タブで行を選択すると、その行の全メトリックが「概要」タブに表示されます。「行」タブで行を選択してから「ソース」タブか「逆アセンブリ」タブを選択すると、適切な行に表示が位置付けられます。
「逆アセンブリ」タブには、選択した関数が入っているオブジェクトファイルの逆アセンブリリストが表示されます。各命令のパフォーマンスメトリックが注釈として付きます。
ソースコード情報が得られる場合、逆アセンブリリスト内にそのソースコードがインタリーブされて、任意のコンパイラのコメントが表示用に選択されます。「逆アセンブリ」タブでソースファイルを見つけるためのアルゴリズムは、「ソース」タブで使用されるアルゴリズムと同じです。
「ソース」タブと同様に、「逆アセンブリ」タブにはインデックス行が表示されます。しかし、「ソース」タブとは異なり、代替ソースコンテキストのインデックス行を移動の目的で直接使用することはできません。また、代替ソースコンテキストのインデックス行は、「逆アセンブリ」表示の先頭に単に一覧表示されるのではなく、#include またはインライン化されたコードの挿入位置の先頭に表示されます。#include またはほかのファイルからインライン化されたコードは、raw の逆アセンブリ命令として、ソースコードをインタリーブせずに示されます。ただし、これらの命令の 1 つにカーソルを置いて「ソース」タブを選択すると、#include またはインライン化されたコードを含むファイルが開きます。このファイルを表示した状態で「逆アセンブリ」タブを選択すると、新しいコンテキストで「逆アセンブリ」表示が開き、インタリーブされたソースコードと一緒に逆アセンブリコードが表示されます。
表示するコメントのクラスは、「データ表示方法の設定」ダイアログボックスで設定できます。デフォルトのクラスは、.er.rc デフォルト値ファイルで設定できます。
メトリックがメトリック固有のしきい値と等しいか、それを超える場合、アナライザによって行が強調表示されるため、重要な行を容易に識別できます。しきい値は、「データ表示方法の設定」ダイアログボックスで設定できます。デフォルトのしきい値は、.er.rc デフォルト値ファイルで設定できます。「ソース」タブの場合と同様に、逆アセンブリコード内のしきい値を超えている行の位置に対応して、スクロールバーの横にティックマークが表示されます。
「PC」タブには、プログラムカウンタ (PC) とそのメトリックのリストが表示されます。PC には、呼び出し元の関数、およびその関数内のオフセットが標識されます。関数が非表示のロードオブジェクトにある関数の PC は、ロードオブジェクト別に「PC」表示に 1 つのエントリにまとめて表示されます。「PC」タブで行を選択すると、その PC の全メトリックが「概要」タブに表示されます。「PC」タブで行を選択してから「ソース」タブか「逆アセンブリ」タブを選択すると、適切な行に表示が位置付けられます。
PC の詳細については、「呼び出しスタックとプログラムの実行」の節を参照してください。
「タイムライン」タブには、イベントのチャートとコレクタが記録した標本ポイントが、時間の関数として表示されます。データは、水平バーに表示されます。それぞれの実験について、標本データに対応するバーと、各 LWP に対応する一連のバーが表示されます。LWP のセットは、記録されたデータのタイプごとに 1 つのバーで構成されます。時間ベースのプロファイリング、ハードウェアカウンタオーバーフローのプロファイリング、同期トレース、ヒープトレース、MPI トレースなどがあります。
標本データを含むバーは、各標本の各マイクロステートで費やされた時間の色分け表現です。標本ポイントのデータは、そのポイントと前のポイントの間で費やされた時間を表すため、標本は時間として表示されます。標本をクリックすると、その標本のデータが「イベント」タブに表示されます。
プロファイルデータまたはトレースデータのバーには、記録される各イベントのイベントマーカーが表示されます。イベントマーカーは、イベントで記録された呼び出しスタックの色分けされた表現 (色付きの長方形が積み重ねられたもの) からなります。イベントマーカー内の色付き長方形をクリックすると、対応する関数と PC が選択され、そのイベントと関数のデータが「イベント」タブに表示されます。選択された項目は「イベント」タブと「凡例」タブの両方で強調表示され、「ソース」タブまたは「逆アセンブリ」タブを選択すると、呼び出しスタック内のそのフレームに対応する行にタブ表示が位置付けられます。
ある種のデータでは、イベントが重なって見えない場合があります。まったく同じ位置に複数のイベントが表示される場合は、常に 1 つだけが描画されます。1 〜 2 ピクセル以内に複数のイベントがある場合、すべてが描画されますが、見た目には判別できない可能性があります。いずれの場合も、描画されたイベントの下に小さな灰色のティックマークが表示され、重なっていることが示されます。
「データ表示方法の設定」ダイアログボックスの「タイムライン」タブでは、表示するイベント固有データの種類を変更したり、スレッド、LWP、または CPU に関するイベント固有データの表示を選択したり、ルートまたはリーフでの呼び出しスタックの表示の配置を選択したり、表示する呼び出しスタックのレベル数を選択したりできます。
「タイムライン」タブに表示するイベント固有データの種類や、選択された関数にマップする色も変更できます。「タイムライン」タブの使い方の詳細は、オンラインヘルプを参照してください。
「リーク一覧」タブには 2 つの行が表示され、上の行はリークを表し、下の行は割り当てを示します。それぞれには、「タイムライン」タブで表示されているものと同じような呼び出しスタックが中央に表示され、その上にはリークまたは割り当てられたバイト数に比例するバーが、その下にはリークまたは割り当ての数に比例するバーが表示されます。
リークまたは割り当てを選択すると、選択されたリークや割り当てのデータが「リーク」タブに表示され、「タイムライン」タブの場合と同様に呼び出しスタックのフレームが選択されます。
「リーク一覧」タブを表示するには、「データ表示方法の設定」ダイアログボックスの「タブ」タブ (「「タブ」タブ」を参照) で、そのタブを選択します。「リーク一覧」タブを表示可能にできるのは、1 つ以上の読み込まれた実験の中に、ヒープトレースデータが含まれている場合だけです。
「データオブジェクト」タブには、データオブジェクトおよびそのメトリックのリストが表示されます。このタブは、積極的なバックトラッキングオプションを有効にしたハードウェアカウンタオーバーフローの実験と、C コンパイラで xhwcprof オプションを使ってコンパイルされたソースファイルにのみ適用できます。-
タブを表示するには、「データ表示方法の設定」ダイアログボックスの「タブ」タブ (「「タブ」タブ」を参照) で、そのタブを選択します。「データオブジェクト」タブを表示可能にできるのは、1 つ以上の読み込まれた実験に、データ空間プロファイルが含まれている場合だけです。
このタブには、プログラムのさまざまなデータ構造体と変数に対するハードウェアカウンタのメモリー演算のメトリックが示されます。
単一のデータオブジェクトを選択するには、そのオブジェクトをクリックします。
タブ内に隣接して表示された複数のオブジェクトを選択するには、最初のオブジェクトを選択したあと、Shift キーを押したまま最後のオブジェクトを選択します。
タブ内に表示された隣接していない複数のオブジェクトを選択するには、最初のオブジェクトを選択したあと、Ctrl キーを押したまま、追加するオブジェクトを個々にクリックして選択します。
ツールバーの「フィルタ句を構成」ボタンをクリックすると、「フィルタ」ダイアログボックスが開き、その中で「詳細」タブが選択され、「フィルタ句」テキストボックスに「データオブジェクト」タブで選択された項目を反映したフィルタ句が読み込まれます。
「データレイアウト」タブには、すべてのプログラムデータオブジェクトの注釈付きデータオブジェクトレイアウトが、データ派生メトリックデータと一緒に表示されます。各レイアウトは、構造全体のデータソートメトリック値によってソートされた状態で、タブ内に表示されます。このタブには、集合体データオブジェクトごとに、そのオブジェクトに帰属する合計メトリックが表示され、そのあとに、そのデータオブジェクトのすべての要素がオフセット順に表示されます。各要素には、そのメトリックと、32 バイトブロックでそのサイズと位置を示す指示子があります。
「データレイアウト」タブを表示するには、「データ表示方法の設定」ダイアログボックスの「タブ」タブ (「「タブ」タブ」を参照) で、そのタブを選択します。 「データオブジェクト」タブの場合と同様に、「データレイアウト」タブを表示可能にできるのは、1 つ以上の読み込まれた実験に、データ空間プロファイルが含まれている場合だけです。
単一のデータオブジェクトを選択するには、そのオブジェクトをクリックします。
タブ内に隣接して表示された複数のオブジェクトを選択するには、最初のオブジェクトを選択したあと、Shift キーを押したまま最後のオブジェクトを選択します。
タブ内に表示された隣接していない複数のオブジェクトを選択するには、最初のオブジェクトを選択したあと、Ctrl キーを押したまま、追加するオブジェクトを個々にクリックして選択します。
ツールバーの「フィルタ句を構成」ボタンをクリックすると、「フィルタ」ダイアログボックスが開き、その中で「詳細」タブが選択され、「フィルタ句」テキストボックスに「データレイアウト」タブで選択された項目を反映したフィルタ句が読み込まれます。
「命令頻度」タブには、カウントデータ実験で各種類の命令が実行された頻度の概要を示します。また、ロード、ストア、浮動小数点の各命令の実行頻度に関するデータも示します。無効になった命令や、分岐遅延スロット内の命令に関する情報も表示されます。
「統計」タブには、選択した実験と標本について集計されたさまざまなシステム統計の合計値が表示されます。合計値のあとには、それぞれの実験について選択した標本の統計値が表示されます。表示される統計値については、getrusage(3C) と proc (4) のマニュアルページを参照してください。
「実験」タブは 2 つのパネルに分割されます。上のパネルにはツリーが入っており、このツリーには、読み込まれたすべての実験に含まれるロードオブジェクトのノード、およびそれぞれの実験読み込みのノードが含まれています。「ロードオブジェクト」ノードを展開すると、すべてのロードオブジェクトのリストが、それらの処理に関するさまざまなメッセージと一緒に表示されます。実験のノードを展開すると、「注記」と「情報」という 2 つの領域が表示されます。
「注記」領域には、実験内の notes ファイルの内容が表示されます。「注記」領域に直接入力することにより、注記を編集できます。「注記」領域には独自のツールバーが組み込まれており、注記の保存や破棄のほか、前回の保存以降の編集内容の取り消しや再実行を行うためのボタンがあります。
「情報」領域には、収集した実験と収集ターゲットがアクセスしたロードオブジェクトに関する情報が入っており、それには、実験またはロードオブジェクトの処理中に出力されたエラーメッセージや警告メッセージも含まれます。
下のパネルには、アナライザセッションから出力されたエラーメッセージと警告メッセージが表示されます。
各インデックスタブには、スレッド、CPU、秒など、さまざまなインデックスオブジェクトに帰属するデータのメトリック値が表示されます。インデックスオブジェクトは階層構造ではないので、包括的メトリックと排他的メトリックは表示されません。各種類の単一のメトリックだけが表示されます。
事前定義されているいくつかのインデックスタブは、スレッド、CPU、標本、および秒です。カスタムインデックスオブジェクトを定義するには、「データ表示方法の設定」ダイアログボックスで「「カスタムインデックス」タブを追加」ボタンをクリックし、「インデックスオブジェクトを追加」ダイアログボックスを開きます。
各インデックスタブの上部のラジオボタンを使用して、テキスト表示とグラフィカル表示を切り替えることができます。テキスト表示は「データオブジェクト」タブ内の表示によく似ており、同じメトリックの設定を使用します。グラフィカル表示では、各インデックスオブジェクトの相対値が、データソートメトリックによってソートされた各メトリックごとの個別のヒストグラムを使用してグラフィカル表示されます。
ツールバーの「データをフィルタ」ボタンをクリックすると、「データをフィルタ」ダイアログボックスが開きます。「詳細」タブをクリックすると、「インデックスオブジェクト」タブで選択された項目を反映したフィルタ句が「フィルタ句」に読み込まれます。
各メモリーオブジェクトのタブには、ページなど、さまざまなメモリーオブジェクトに帰属するデータ空間メトリックのメトリック値が表示されます。1 つ以上の読み込まれた実験にデータ空間プロファイルが含まれている場合は、「データ表示方法の設定」ダイアログボックスの「タブ」タブで、タブを表示するメモリーオブジェクトを選択できます。メモリーオブジェクトタブは、いくつでも表示できます。
さまざまなメモリーオブジェクトタブが事前定義されています。カスタムメモリーオブジェクトを定義するには、「データ表示方法の設定」ダイアログボックスで「カスタムオブジェクトを追加」ボタンをクリックし、「メモリーオブジェクトを追加」ダイアログボックスを開きます。
各メモリーオブジェクトタブのラジオボタンを使用して、テキスト表示とグラフィカル表示を切り替えることができます。テキスト表示は「データオブジェクト」タブ内の表示に似ており、同じメトリックの設定を使用します。グラフィカル表示では、各メモリーオブジェクトの相対値が、データソートメトリックによってソートされた各メトリックごとの個別のヒストグラムを使用してグラフィカル表示されます。
ツールバーの「フィルタ句を構成」ボタンをクリックすると、「フィルタ」ダイアログボックスが開き、その中で「詳細」タブが選択され、「フィルタ句」テキストボックスにメモリーオブジェクトタブで選択された項目を反映したフィルタ句が読み込まれます。
右の区画には、「概要」タブ、「イベント」タブ、「競合の詳細」タブ、「デッドロックの詳細」タブ、および「リーク」タブがあります。デフォルトでは、「概要」タブが表示されます。
「概要」タブには、選択した関数やロードオブジェクトについて記録されたすべてのメトリック (値と百分率)、および選択した関数やロードオブジェクトについての情報が表示されます。「概要」タブは、任意のタブで新しく関数やロードオブジェクトを選択するたびに更新されます。
「イベント」タブには、イベントタイプ、リーフ関数、LWP ID、スレッド ID、および CPU ID など、「タイムライン」タブで選択されたイベントに関する詳細データが表示されます。データパネルの下に、スタック内の関数ごとに色分けされて呼び出しスタックが表示されます。呼び出しスタック内の関数をクリックすると、その関数が選択されます。
「タイムライン」タブで標本を選択すると、その標本番号、標本の開始時間と終了時間、および各マイクロステートで費やされた時間を示す色別のマイクロステートが「イベント」タブに表示されます。
「リーク」タブには、「リーク一覧」タブ内で選択したリークまたは割り当ての詳細データが表示されます。「リーク」タブのデータパネルの下には、選択したリークまたは割り当てが検出されたときの呼び出しスタックが表示されます。呼び出しスタック内の関数をクリックすると、その関数が選択されます。
「競合の詳細」タブには、「競合」タブ内で選択したデータ競合の詳細データが表示されます。詳細は、『Sun Studio 12: Thread Analyzer User’s Guide』を参照してください。
「デッドロックの詳細」タブには、「デッドロック」タブ内で選択したデッドロックの詳細データが表示されます。詳細は、『Sun Studio 12: Thread Analyzer User’s Guide』を参照してください。
データの表示は、「データ表示方法の設定」ダイアログボックスで制御できます。このダイアログボックスは、ツールバーの「データ表示方法の設定」ボタンをクリックするか、「表示」->「データ表示方法の設定」を選択することで、開くことができます。
「データ表示方法の設定」ダイアログボックスには、次のタブを持つタブ区画が含まれています。
メトリック
ソート
ソース/逆アセンブリ
書式
タイムライン
検索パス
パスマップ
タブ
このダイアログボックスの「保存」ボタンを使用すると、カスタム定義したメモリーオブジェクトも含め、現在の設定を保存できます。
アナライザ、er_print ユーティリティー、および er_src ユーティリティーのデフォルト値は、共通の .er.rc ファイルによって設定されるので、アナライザの「データ表示方法の設定」ダイアログボックスでの変更を保存すると、er_print ユーティリティーおよび er_src ユーティリティーからの出力に影響します。
「メトリック」タブには、使用できるすべてのメトリックが表示されます。各メトリックの 1 つ以上の列には、メトリックの種類に応じて「時間」、「値」、および「%」というラベルの付いたチェックボックスが表示されます。別の方法として、個々のメトリックを設定する代わりに、ダイアログボックスの下部の行にある複数のチェックボックスをオンまたはオフにしてから「すべてのメトリックに適用」ボタンをクリックすることにより、すべてのメトリックを一度に設定できます。
「ソート」タブには、メトリックが表示される順序と、ソート基準のメトリックが表示されます。
「ソース/逆アセンブリ」タブには、次のような表示情報を選択するためのチェックボックスのリストが表示されます。
ソースリストと逆アセンブリリストに含めるコンパイラのコメント
ソースリストと逆アセンブリリストで重要な行を強調表示するためのしきい値
逆アセンブリリストにおけるソースコードのインタリーブ
逆アセンブリリストにおけるソース行のメトリック
逆アセンブリリストにおける 16 進での命令の表示
「書式」タブでは、C++ 関数名と Java メソッド名に、長い形式、短い形式、または符号化された形式のいずれかを使用することを選択できます。「関数名に SO 名を付加」チェックボックスをオンにすると、その関数またはメソッドを含んでいる共有オブジェクトの名前が関数名またはメソッド名に付加されます。
また、「書式」タブでは、「ユーザー」、「上級」、「マシン」のいずれかの表示モードも選択できます。「表示モード」の設定は、Java 実験と OpenMP 実験の処理を制御します。
Java 実験の場合 :
「ユーザー」モードでは、Java スレッドの Java 呼び出しスタックが表示されますが、ハウスキーピングスレッドは表示されません。
「上級」モードでは、ユーザーの Java コードの実行中には Java スレッドの Java 呼び出しスタックが表示され、JVM コードの実行中または JVM ソフトウェアが Java 呼び出しスタックを報告しないときにはマシン呼び出しスタックが表示されます。このモードでは、ハウスキーピングスレッドのマシン呼び出しスタックが表示されます。
「マシン」モードでは、すべてのスレッドのマシン呼び出しスタックが表示されます。
OpenMP 実験の場合 :
「ユーザー」モードおよび「上級」モードでは、マスタースレッド呼び出しスタックとスレーブスレッド呼び出しスタックが調整されて表示されます。また、OpenMP ランタイムが特定の操作を実行しているときは、<OMP-*> という形式の名前を持つ特殊関数が追加されます。
「マシン」モードでは、すべてのスレッドのマシン呼び出しスタックが表示されます。
それ以外のすべての実験では、3 つのモードのすべてで同じデータが表示されます。
「タイムライン」タブでは、表示するイベント固有のデータの種類を選択したり、スレッド、LWP、または CPU に関するイベント固有のデータを表示したり、ルートまたはリーフでの呼び出しスタックの表示の配置を選択したり、表示する呼び出しスタックのレベル数を選択することができます。
「パスを検索」タブでは、ソースおよびオブジェクトファイルを検索するためのディレクトリリストを管理できます。特別な名前「$expts」は読み込まれている実験を参照しており、ほかのすべての名前はファイルシステム内のパスを示しているはずです。
「パスマップ」タブでは、ファイルパスの先頭部分を別の位置にマップできます。接頭辞の組のセット、つまり元の接頭辞と新しい接頭辞を設定できます。そのあと、パスは元の接頭辞から新しい接頭辞にマップされます。パスマップは複数指定でき、ファイルの検索時にはそれぞれが順番に試されます。
「データ表示方法の設定」ダイアログボックスの「タブ」タブを使用すると、「アナライザ」ウィンドウに表示するタブを選択できます。
「タブ」タブには、現在の実験に適用できるタブが一覧表示されます。標準のタブは左の列に表示されます。インデックスタブが中央の列に表示され、定義されたメモリータブが右の列に表示されます。
左の列で各チェックボックスをクリックし、標準のタブを表示用に選択または選択解除します。
中央の列で各チェックボックスをクリックし、インデックスタブを表示用に選択または選択解除します。事前定義されているインデックスタブは、スレッド、CPU、標本、および秒です。別のインデックスオブジェクト用のタブを追加するには、「「カスタムインデックス」タブを追加」ボタンをクリックして「インデックスオブジェクトを追加」ダイアログボックスを開きます。「オブジェクト名」テキストボックスに、新しいオブジェクトの名前を入力します。「式」テキストボックスに、記録された物理アドレスまたは仮想アドレスをオブジェクトインデックスにマップするために使用するインデックス式を入力します。インデックス式の規則については、「indxobj_define indxobj_type index_exp」を参照してください。
右の列で各チェックボックスをクリックし、メモリーオブジェクトタブを表示用に選択または選択解除します。カスタムオブジェクトを追加するには、「カスタムオブジェクトを追加」ボタンをクリックして「メモリーオブジェクトを追加」ダイアログボックスを開きます。「オブジェクト名」テキストボックスに、新しいカスタムメモリーオブジェクトの名前を入力します。「式」テキストボックスに、記録された物理アドレスまたは仮想アドレスをオブジェクトインデックスへマップするために使用するインデックス式を入力します。インデックス式の規則については、「mobj_define mobj_type index_exp」を参照してください。
カスタムインデックスオブジェクトまたはメモリーオブジェクトを追加したときに、そのオブジェクトのチェックボックスが「タブ」タブに追加され、デフォルトで選択されます。
「データ表示方法の設定」ダイアログボックスの「保存」ボタンを使用して、現在の設定を保存できます。
アナライザ、er_print ユーティリティー、および er_src ユーティリティーのデフォルト値は、共通の .er.rc ファイルによって設定されるので、「データ表示方法の設定」ダイアログボックスでの変更を保存すると、er_print ユーティリティーおよび er_src ユーティリティーからの出力に影響します。
アナライザのツールバーには「検索」ツールが装備され、コンボボックスには指定された検索ターゲット用に 2 つのオプションがあります。「関数」タブや「呼び出し元 - 呼び出し先」タブの「名前」列のテキストや、「ソース」タブや「逆アセンブリ」タブの「コード」列のテキストを検索できます。また、「ソース」タブや「逆アセンブリ」タブの高メトリック項目を検索できます。高メトリック項目を含む行のメトリック値は、緑色に強調表示されます。「検索」フィールドの隣りの矢印ボタンを使用すると、上または下に検索できます。
デフォルトでは、「関数」タブと「呼び出し元 - 呼び出し先」タブに各ロードオブジェクトの全関数が表示されます。「関数の表示/非表示」ダイアログボックスを使って、ロードオブジェクトの全関数を非表示にすることができます。詳細はオンラインヘルプを参照してください。
ロードオブジェクトの関数を非表示にすると、「関数」タブと「呼び出し元 - 呼び出し先」タブに、ロードオブジェクトの全関数の集合体を表す 1 つのエントリが表示されます。同様に、「行」タブと「PC」タブには、ロードオブジェクトの全関数の全 PC を集合体化した 1 つのエントリが表示されます。
フィルタリングとは対照的に、非表示となっている関数に対応するメトリックは、すべての表示で何らかの形で示されます。
デフォルトでは、各タブのデータは、すべての実験、すべての標本、すべてのスレッド、すべての LWP、およびすべての CPU について表示されます。「データをフィルタ」ダイアログボックスを使用して、データのサブセットを選択できます。
「データをフィルタ」ダイアログボックスには、「基本」タブと「詳細」タブがあります。「基本」タブでは、フィルタするデータの実験を選択できます。その後、メトリックを表示する標本、スレッド、LWP、および CPU を指定できます。「詳細」タブではフィルタ式を指定でき、そのフィルタ式が真と評価されたデータレコードは、表示に組み込まれます。フィルタ式で使用する文法については、「式の文法」を参照してください。
アナライザの「関数」タブ、「データレイアウト」タブ、「データオブジェクト」タブ、または「メモリーオブジェクト」タブで選択を行なった場合、ツールバーの「フィルタ句を構成」ボタンをクリックすると「データをフィルタ」ダイアログボックスの「詳細」タブが開き、「フィルタ句」テキストボックスに、選択した項目を反映した句が読み込まれます。
「データをフィルタ」ダイアログボックスの使い方の詳細は、オンラインヘルプを参照してください。
アナライザでは、複数の実験が読み込まれているときに、実験によってフィルタリングできます。実験は個々に読み込むことも、実験グループを名前で指定することもできます。
標本には 1 〜 N の番号が付けられ、任意の標本セットを選択できます。選択する標本は、標本番号をコンマで区切ったリストで指定するか、または 1 – 5 のように範囲を指定します。 す。
スレッドには 1 〜 N の番号が付けられ、任意のスレッドセットを選択できます。選択するスレッドは、スレッド番号をコンマで区切ったリストで指定するか、または範囲を指定します。 スレッドのプロファイルデータは、LWP 上でスレッドが実際にスケジュールされている実行部分のみをカバーします。
LWP には 1 〜 N の番号が付けられ、任意の LWP セットを選択できます。選択する LWP は、LWP 番号をコンマで区切ったリストで指定するか、または範囲を指定します。同期データが記録されている場合は、報告される LWP は、同期イベントの入口の LWP になり、これは同期イベントの出口の LWP とは異なる場合があります。
Linux システムでは、スレッドと LWP は同義です。
CPU 情報が記録されている場合は (Solaris OS)、任意の CPU セットを選択できます。選択する CPU は、CPU 番号をコンマで区切ったリストで指定するか、または範囲で指定します。
ターゲット名とターゲット引数を指定してアナライザを起動すると、アナライザによってパフォーマンスツールの「収集」ウィンドウが開かれます。このウィンドウでは、指定したターゲットに実験を記録できます。引数を指定せずに、または実験リストを指定してアナライザを起動した場合、新規の実験を記録するには、「ファイル」->「実験を収集」を選択してパフォーマンスツールの「収集」ウィンドウを開きます。
パフォーマンスツールの「収集」ウィンドウの「実験を収集」タブには、ターゲットとその引数、および実験の実行に使用する各種パラメータを指定できるパネルがあります。これらは、第 3 章「パフォーマンスデータの収集」で説明されている collect コマンドで使用できるオプションに対応します。
このパネルのすぐ下には、「プレビューコマンド」ボタンとテキストフィールドがあります。このボタンをクリックすると、テキストフィールドに、「実行」ボタンをクリックしたときに使用される collect コマンドが取り込まれます。
「収集するデータ」タブでは、収集するデータの種類を選択できます。
「入力/出力」タブには 2 つのパネルがあります。コレクタ自体からの出力を受け取るパネルと、プロセスからの出力を受け取るパネルです。
一連のボタンを使って、次の操作を実行できます。
実験を実行する
実行を終了する
実行中に「一時停止」、「再開」、および「標本」シグナルをプロセスへ送信する (対応するシグナルが指定されている場合に有効)
ウィンドウを閉じる
実験の進行中にウィンドウを閉じても、実験は続行されます。ウィンドウを再度開くと、実行中にパネルが開いたままであったかのように、実行中の実験が表示されます。実験の実行中にアナライザを終了しようとすると、実行を終了するか継続するかを確認するダイアログボックスが表示されます。
アナライザでは、データの解析のほか、関数の順序を変更できます。アナライザでは、実験のデータに基づいて、マップファイルを生成できます。このマップファイルを使用して、静的リンカー (ld) でアプリケーションを再リンクすることによって、作成する実行可能ファイルのワーキングセットサイズの縮小や I キャッシュ動作の効率化を図ることができます。
マップファイルに記録される関数の順序と、実行可能ファイルにおける関数の順序の変更に使用される関数の順序は、関数リストのソートに使用されるメトリックで決まります。マップファイルの生成には、通常、排他的ユーザー CPU 時間または排他的 CPU サイクル時間が使用されます。同期遅延やヒープトレースなどのメトリック、または名前やアドレスを使っても、マップファイルに意味ある順序付けを行うことはできません。
アナライザは、現在のディレクトリに .er.rc ファイルがある場合はその指令を、ユーザーのホームディレクトリに .er.rc ファイルがある場合はその指令を、そしてシステム全体の .er.rc ファイルの指令を処理します。これらのファイルには、実験をアナライザに読み込んだときに表示するタブのデフォルトの設定が含まれている場合があります。各タブには、「実験」タブと「タイムライン」タブを除く、対応するレポートの er_print コマンドによって名前が付けられます。
それぞれの .er.rc ファイルには、メトリックとソートのデフォルト設定のほか、コンパイラのコメントオプションの指定、ソースと逆アセンブリ出力のしきい値の強調表示に関するデフォルト設定も含まれていることがあります。また、これらのファイルは、「タイムライン」タブ、名前の書式指定、および表示モードの設定に関するデフォルト設定値も指定します。さらに、ソースファイルとオブジェクトファイルの検索パスまたはパスマップを制御する指令も含まれ手いる場合があります。
.er.rc ファイルには、カスタムのメモリーオブジェクトやインデックスオブジェクトの定義が含まれる場合もあります。
.er.rc ファイルには、親実験が読み込まれたときに派生実験も選択して読み込むかどうかを制御するための、en_desc モードの設定が含まれている場合もあります。en_desc の設定は、on、off、または =regexp のいずれかです。on はすべての派生の読み取りと読み込みを指定し、off は派生の読み取りと読み込みを行わないことを指定し、=regexp は、系統または実行可能ファイルの名前が指定した正規表現と一致する派生の読み取りと読み込みを指定します。
アナライザの GUI で .er.rc ファイルを保存するには、「表示」メニューから開くことができる「データ表示方法の設定」ダイアログボックスで「保存」ボタンをクリックします。「データ表示方法の設定」ダイアログボックスから .er.rc ファイルを保存すると、それ以後のアナライザの呼び出しに影響が出るだけでなく、er_print ユーティリティーと er_src ユーティリティーにも影響が及びます。