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