この章では、er_print ユーティリティーを使用してパフォーマンス解析を行う方法を説明します。er_print ユーティリティーは、パフォーマンスアナライザがサポートする各種の表示内容を ASCII 形式で出力します。これらの情報は、ファイルにリダイレクトしないかぎり、標準出力に書き込まれます。er_print には、引数として、コレクタが生成した実験名または実験グループ名を指定する必要があります。er_print ユーティリティーを使用して、関数や呼び出し元と呼び出し先のパフォーマンスメトリック、ソースコードと逆アセンブリコードのリスト、標本収集情報、データ空間データ、実行統計情報を表示することができます。
この章では、次の内容について説明します。
コレクタが収集するデータについては、第 2 章「パフォーマンスデータ」を参照してください。
パフォーマンスアナライザを使用して情報をグラフィカル形式で表示する方法については、第 4 章「パフォーマンスアナライザツール」およびオンラインヘルプを参照してください。
er_print ユーティリティーのコマンド行構文は、次のとおりです。
er_print [ -script script | -command | - | -V ] experiment-list |
er_print ユーティリティーのオプションは、次のとおりです。
キーボードから入力された er_print コマンドを読み取ります。
script ファイルからコマンドを読み取ります。script ファイルは、一連の er_print コマンドを含むファイルで、1 行に 1 つの er_print コマンドがあります。-script オプションが存在しなかった場合、er_print は、端末またはコマンド行からコマンドを読み取ります。
指定されたコマンドを処理します。
バージョン情報を表示して終了します。
er_print のコマンド行には、複数のオプションを指定できます。指定したオプションは、指定した順に処理されます。スクリプト、ハイフン、明示的なコマンドを任意の順序で組み合わせることができます。コマンドまたはスクリプトを何も指定しなかった場合、er_print はデフォルトで対話モードになり、キーボードからコマンドを入力します。対話モードを終了するには、quit と入力するか、Ctrl-D を押します。
それぞれのコマンドが処理されたあと、その処理から発生したエラーメッセージまたは警告メッセージがある場合は、出力されます。処理に関する統計情報の概要を出力するには、procstats コマンドを使用します。
er_print ユーティリティーで使用可能なコマンドについては、以降の節で示します。
すべてのコマンドは、そのコマンドであることが明確なかぎり、短縮することができます。コマンドを複数の行に分割するには、行の末尾にバックスラッシュ \ を付けます。\ で終わる行は、その行の構文解析が行われる前に \ 文字が削除され、次の行の内容が付加されます。1 つのコマンドに使用できる行数は、利用可能なメモリー以外に制限はありません。
空白文字を含んでいる引数は、二重引用符で囲む必要があります。引用符の内部では、行をまたいでテキストを分割してもかまいません。
多くの er_print コマンドでは、メトリックキーワードのリストを使用します。リストの構文は次のとおりです。
metric-keyword-1[:metric-keyword2…] |
測定されたデータに基づく動的メトリックの場合、メトリックのキーワードは、メトリックフレーバー文字列、メトリック表示形式文字列、およびメトリック名文字列の 3 つの部分から構成されます。これらは、空白を入力せずに次のように続けて指定します。
flavorvisibilityname |
実験内のロードオブジェクトの静的プロパティー (名前、アドレス、およびサイズ) に基づく静的メトリックの場合、メトリックのキーワードは、メトリック名とその前に付加されるメトリック表示形式文字列 (省略可能) を空白なしに結合して構成されます。
[visibility]name |
メトリックの flavor 文字列と visibility 文字列は、フレーバー文字と表示形式文字を使用して指定します。
指定可能なメトリックフレーバー文字を表 6–1 にまとめます。複数のフレーバー文字を含むメトリックキーワードが展開されて、メトリックキーワードリストになります。たとえば、ie.user は、展開されて i.user:e.user になります。
表 6–1 メトリックフレーバー文字
文字 |
内容の説明 |
---|---|
e |
排他的メトリック値を表示します。 |
i |
包括的メトリック値を表示します。 |
a |
属性メトリック値を表示します (呼び出し元 - 呼び出し先メトリックの場合のみ)。 |
d |
動的メトリック値を表示します (データ派生メトリックの場合のみ)。 |
指定可能なメトリック表示形式文字を表 6–2 にまとめます。表示形式文字列を構成する文字の順序は重要ではありません。対応するメトリックの表示順序が、この指定順序の影響を受けることはありません。たとえば、i%.user と i.%user はともに i.user:i%user と解釈されます。
表示形式だけが異なるメトリックは、常に標準の順序で一緒に表示されます。表示形式だけが異なる 2 つのメトリックキーワードがほかのキーワードで区切られている場合は、標準の順序で 2 つのメトリックの 1 つ目の位置にメトリックが表示されます。
表 6–2 メトリック表示形式文字
文字 |
内容の説明 |
---|---|
. |
メトリックを時間で表示します。この指定は、サイクルカウントを計測する時間メトリックとハードウェアカウンタメトリックに適用されます。その他のメトリックは「+」と解釈されます。 |
% |
プログラム全体のメトリックを百分率で表示します。呼び出し元 - 呼び出し先リストの属性メトリックの場合は、選択した関数の包括的メトリックにの割合が表示されます。 |
+ |
メトリックを絶対値で表示します。ハードウェアカウンタの場合、この値はイベントの回数です。時間メトリックの場合は「.」と解釈されます。 |
! |
メトリック値を表示しません。ほかの表示形式文字と組み合わせることはできません。 |
フレーバー文字列と可視文字列のそれぞれが複数の文字から構成されている場合は、フレーバー文字列が先に展開されます。すなわち、ie.%user は展開されて i.%user:e.%user になり、i.user:i%user:e.user:e%user と解釈されます。
静的メトリックの場合、ソート順序の定義という観点からは、表示形式文字のピリオド (.)、正符号 (+)、パーセント記号 (%) は同等と見なされます。つまり、sort i%user、sort i.user、sort i+user はすべて、「どのような形式で表示するにせよ、包括的ユーザー CPU 時間を基準にソートする」ことを意味します。 また、sort i!user は、「表示するかどうかに関係なく、包括的ユーザー CPU 時間を基準にソートする」という意味になります。
可視文字の感嘆符 (!) を使用すると、各フレーバーのメトリックに組み込みのデフォルト値を置き換えられます。
メトリックリスト内で同じメトリックを複数回表示した場合は、最初に出現したものだけが処理され、それ以後のものは無視されます。名前付きメトリックがリストにない場合は、そのメトリックがリストに付加されます。
表 6–3 に、タイミングメトリック、同期遅延メトリック、メモリー割り当てメトリック、MPI トレースメトリック、および 2 つの一般的なハードウェアカウンタメトリックに指定可能な er_print メトリック名文字列をまとめます。ほかのハードウェアカウンタメトリックの場合、メトリック名文字列はカウンタ名と同じです。読み込まれた実験に適用できるすべてのメトリック名文字列のリストは、metric_list コマンドで取得できます。カウンタ名は、collect コマンドを引数なしで使用することによって一覧表示できます。ハードウェアカウンタについての詳細は、「ハードウェアカウンタオーバーフローのプロファイルデータ」を参照してください。
表 6–3 メトリック名文字列
カテゴリ |
文字列 |
内容の説明 |
---|---|---|
時間メトリック |
user |
ユーザー CPU 時間 |
wall |
時計時間 |
|
total |
LWP 合計時間 |
|
system |
システム CPU 時間 |
|
wait |
CPU 待ち時間 |
|
ulock |
ユーザーロック時間 |
|
text |
テキストページフォルト時間 |
|
data |
データページフォルト時間 |
|
owait |
ほかの待ち時間 |
|
同期遅延メトリック |
sync |
同期待ち時間 |
syncn |
同期待ち回数 |
|
MPI トレースメトリック |
mpitime |
MPI 呼び出しに費やされた時間 |
mpisend |
MPI 送信関数の数 |
|
mpibytessent |
MPI 送信関数で送信したバイト数 |
|
mpireceive |
MPI 受信関数の数 |
|
mpibytesrecv |
MPI 受信関数で受信したバイト数 |
|
mpiother |
その他の MPI 関数の呼び出し数 |
|
メモリー割り当てメトリック |
alloc |
割り当て数 |
balloc |
割り当てバイト数 |
|
leak |
リーク数 |
|
bleak |
リークバイト数 |
|
ハードウェアカウンタオーバーフローのメトリック |
cycles |
CPU サイクル |
insts |
発行された命令 |
|
スレッドアナライザのメトリック |
raccesses |
データ競合のアクセス |
deadlocks |
デッドロック |
表 6–3 にリストした名前文字列のほかに、2 つの名前文字列をデフォルトメトリックリスト内でのみ使用できます。この 2 つの文字列は、任意のハードウェアカウンタ名に一致する hwc と、任意のメトリック名文字列に一致する any です。また、cycles と insts は、SPARC® プラットフォームと x86 プラットフォームに共通のものですが、それ以外のアーキテクチャー固有のフレーバーも存在します。使用可能なすべてのカウンタを一覧表示するには、引数を指定せずに collect コマンドを使用します。
読み込んだ実験から使用可能なメトリックを確認するには、metric_list コマンドを使用します。
ここでは、関数情報の表示を制御するコマンドを説明します。
現在選択されているメトリックとともに関数リストを書き込みます。関数リストには、関数を表示するために選択されたロードオブジェクトに含まれているすべての関数、および object_select コマンドで非表示にされた関数を持つロードオブジェクトが含まれます。
書き込む行数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。
出力されるデフォルトのメトリックは、排他的および包括的ユーザー CPU 時間で、秒数および全プログラムのメトリックの割合 (百分率) で示されます。表示する現行メトリックを変更するには、metrics コマンドを使用します。これは、functions コマンドを発行する前に行う必要があります。また、.er.rc ファイル内の dmetrics コマンドを使用して、デフォルト値を変更することもできます。
Java プログラミング言語で書かれたアプリケーションの場合、表示される関数情報は表示モードがユーザー、上級、マシンのどれに設定されているかによって異なります。
「ユーザー」モードでは、各メソッドが名前によって示され、インタプリタされたメソッドと HotSpot でコンパイルされたメソッドのデータがまとめて集計されます。また、非ユーザー Java スレッドのデータは抑止されます。
「上級」モードでは、HotSpot でコンパイルされたメソッドがインタプリタされたメソッドから分離され、非ユーザー Java スレッドは抑止されません。
「マシン」モードでは、Java 仮想マシン (JVM) ソフトウェアと突き合わせてインタプリタされた Java メソッドのデータがインタプリタの進行と同時に表示される一方、指定されたメソッドについて、Java HotSpot 仮想マシンでコンパイルされたメソッドのデータが報告されます。すべてのスレッドが表示されます。
3 つのモードすべてにおいて、データは、Java ターゲットによって呼び出された C、C++、または Fortran コードの通常の方法で報告されます。
関数リストに表示するメトリックを指定します。metric_spec には、キーワードの default (一群のデフォルトのメトリックが復元される) またはコロンで区切ったメトリックキーワードのリストを指定できます。次に、メトリックリストの指定例を示します。
% metrics i.user:i%user:e.user:e%user |
このコマンドを入力すると、er_print ユーティリティーは次のメトリックを表示します。
包括的ユーザー CPU 時間 (秒単位)
包括的ユーザー CPU 時間 (百分率)
排他的ユーザー CPU 時間 (秒単位)
排他的ユーザー CPU 時間 (百分率)
デフォルトでは、「デフォルト値を設定するコマンド」の説明のように、.er.rc ファイルから処理された dmetrics コマンドに基づいたメトリック設定が使用されます。metrics コマンドで明示的に metric_spec を default に設定した場合は、記録するデータに適したデフォルト設定が復元されます。
メトリックがリセットされると、新しいリスト内でデフォルトのソートメトリックが設定されます。
metric_spec を省略した場合は、現在のメトリックの設定が表示されます。
metrics コマンドは、関数リスト用のメトリックを設定するほか、呼び出し元 - 呼び出し先のメトリックと、データ派生出力のメトリックを同じ設定値に設定します。詳細は、「cmetrics metric_spec」および 「data_metrics metric_spec」を参照してください。
metrics コマンドが処理されると、現在有効なメトリックを示すメッセージが表示されます。上記の例では、メッセージは次のようになります。
current: i.user:i%user:e.user:e%user:name |
メトリックリストの構文については、「メトリックリスト」を参照してください。指定可能なメトリックを一覧表示するには、metric_list コマンドを使用します。
metrics コマンドに誤りがあった場合、そのコマンドは警告とともに無視され、以前の設定が引き続き有効になります。
関数リストを metric_spec によってソートします。メトリック名の中の visibility は、ソート順序に影響を及ぼしません。複数のメトリックが metric_spec の中で指定されている場合は、表示可能な最初のものが使用されます。指定されたメトリックに表示可能なものがない場合は、コマンドが無視されます。metric_spec の前に負符号 (-) を付加することにより、逆のソートを指定できます。
デフォルトでは、「デフォルト値を設定するコマンド」の説明のように、.er.rc ファイルから処理された dsort コマンドに基づいたソート設定が使用されます。sort コマンドで明示的に metric_spec default に設定した場合は、デフォルトの設定が使用されます。
文字列 metric_spec は、「メトリックリスト」に示すメトリックキーワードのいずれか 1 つです。
% sort i.user |
このコマンドは、er_print ユーティリティーに、関数リストを包括的ユーザー CPU 時間によってソートするよう指示します。指定したメトリックが読み込まれた実験に含まれていない場合は、警告メッセージが表示され、コマンドは無視されます。コマンドが終了すると、ソート基準メトリックが表示されます。
関数リスト内の各関数について、概要パネルを出力します。出力するパネル数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。
概要メトリックパネルには、関数またはロードオブジェクトの名前、アドレス、およびサイズのほか、関数についてはソースファイル、オブジェクトファイル、およびロードオブジェクトの名前、ならびに選択された関数やロードオブジェクトについて記録された排他的メトリックと包括的メトリックの値と百分率が表示されます。
指定された関数の概要パネルを出力します。同じ名前を持つ関数が複数存在する場合には、省略可能なパラメータ N が必要です。指定の関数名を持つ N 番目の関数について、概要メトリックパネルが出力されます。コマンド行でコマンドを指定する場合、N は必須です。不要な場合は無視されます。N が必要であるときに N を使用しないでコマンドを対話的に使用すると、対応する N 値を持つ関数のリストが出力されます。
関数の概要メトリックについては、fsummary コマンドの解説を参照してください。
ここでは、呼び出し元と呼び出し先の情報の表示を制御するコマンドを説明します。
それぞれの関数の呼び出し元 - 呼び出し先パネルを、関数ソートメトリック (sort) で指定された順序で出力します。
各呼び出し元 - 呼び出し先レポート内では、呼び出し元 - 呼び出し先のソートメトリック (csort) に従って呼び出し元と呼び出し先がソートされます。出力するパネル数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。選択されている関数 (中央の関数) は、次のようにアスタリスクで示されます。
属性 排他的 包括的 名前 ユーザー CPU ユーザー CPU ユーザー CPU 秒 秒 秒 4.440 0. 42.910 commandline 0. 0. 4.440 *gpf 4.080 0. 4.080 gpf_b 0.360 0. 0.360 gpf_a |
この例では、関数 gpf が選択されています。 この関数は commandline によって呼び出され、gpf_a と gpf_b を呼び出します。
呼び出し元 - 呼び出し先メトリックを指定します。デフォルトでは、呼び出し元 - 呼び出し先メトリックは、関数リストメトリックが変更されたときに必ず、関数リストメトリックに一致するよう設定されます。metric_spec を省略した場合は、現在の呼び出し元 - 呼び出し先メトリックの設定が表示されます。
文字列 metric_spec は、「メトリックリスト」に示すメトリックキーワードのいずれか 1 つです。
% cmetrics i.%user:a.%user |
このコマンドを入力すると、er_print は次のメトリックを表示します。
包括的ユーザー CPU 時間 (秒単位)
包括的ユーザー CPU 時間 (百分率)
属性ユーザー CPU 時間 (秒単位)
属性ユーザー CPU 時間 (百分率)
cmetrics コマンドが終了すると、現在有効なメトリックを示すメッセージが表示されます。前述の例では、メッセージは次のようになります。
current: i.%user:a.%user:name |
デフォルトでは、呼び出し元 - 呼び出し先メトリックは、関数リストメトリックが変更されたときに必ず、関数リストメトリックに一致するよう設定されます。
呼び出し元 - 呼び出し先の属性メトリックは、対応する排他的メトリックおよび包括的メトリックの前に挿入され、visibility はこの 2 つの visibility 設定の論理和に対応します。静的メトリック設定は、呼び出し元 - 呼び出し先メトリックへコピーされます。リストにない metric-name は、リストに付加されます。
読み込まれた実験の、入手できるすべての metric-name 値のリストは、cmetric_list コマンドで取得できます。
cmetrics コマンドに誤りがあった場合、そのコマンドは警告とともに無視され、前回の設定が引き続き有効になります。
指定された関数の呼び出し元 - 呼び出し先パネルを出力します。同じ名前を持つ関数が複数存在する場合には、省略可能なパラメータ N が必要です。指定の関数名を持つ N 番目の関数について、呼び出し元 - 呼び出し先パネルが出力されます。コマンド行でコマンドを指定する場合、N は必須です。不要な場合は無視されます。N が必要であるときに N を使用しないでコマンドを対話的に使用すると、対応する N 値を持つ関数のリストが出力されます。
指定したメトリックを基準に呼び出し元 - 呼び出し先の内容をソートします。文字列 metric_spec は、「メトリックリスト」に示すメトリックキーワードのいずれか 1 つです。
% csort a.user |
metric-spec を省略した場合は、現在の呼び出し元 - 呼び出し先ソートメトリックが表示されます。
csort メトリックは、属性メトリックまたは静的メトリックである必要があります。複数のメトリックを指定した場合は、適合する最初の表示可能メトリックによってソートされます。
明示的に、またはデフォルトでメトリックが設定されている場合、次のように関数メトリックに基づいて呼び出し元 - 呼び出し先メトリックが設定されます。
包括的と排他的のどちらでも、動的メトリックによってソートされる場合は、対応する属性メトリックによってソートされます。
ソートが静的メトリックによるものである場合は、それによってソートされます。
このコマンドが入力されると、er_print ユーティリティーは属性ユーザー CPU 時間を基準に呼び出し元 - 呼び出し先の内容をソートします。コマンドが終了すると、ソート基準メトリックが表示されます。
ここでは、メモリーの割り当てと割り当て解除に関するコマンドについて説明します。
共通呼び出しスタックによって集計されたメモリーリークのリストを表示します。各エントリは、リーク総数、および指定の呼び出しスタックでリークした総バイト数を示します。このリストは、リークしたバイト数を基準としてソートされます。
共通呼び出しスタックによって集計されたメモリー割り当てのリストを表示します。各エントリは、割り当ての数、および指定の呼び出しスタックに割り当てられた総バイト数を示します。このリストは、割り当てられたバイト数を基準としてソートされます。
ここでは、注釈付きソースおよび逆アセンブリコードの表示を制御するコマンドを説明します。
現在のソートメトリックで整列されたプログラムカウンタ (PC) と、そのメトリックのリストを出力します。このリストには、object_select コマンドで関数を非表示にした各ロードオブジェクトのメトリックを集計した行が含まれています。
PC リスト内の各 PC の概要メトリックパネルを現在のソートメトリックで指定された順序で出力します。
現在のソートメトリックで整列されたソース行と、そのメトリックのリストを出力します。このリストには、行番号情報を持っていない各関数またはソースファイルが未知である各関数のメトリックを集計した行と、object_select コマンドで関数を非表示している各ロードオブジェクトのメトリックを集計した行が含まれています。
行リスト内の各行の概要メトリックパネルを現在のソートメトリックで指定された順序で出力します。
指定したファイル、または指定した関数を含むファイルの注釈付きソースコードを出力します。いずれの場合も、指定したファイルはパスの通っているディレクトリに存在する必要があります。 GNU Fortran コンパイラを使用してソースをコンパイルした場合、ソース内の関数名のあとに下線を 2 つ追加する必要があります。
省略可能なパラメータ N (正の整数) は、ファイル名または関数名があいまいでない場合にだけ使用します。 このパラメータを指定した場合は、N 番目の候補が使用されます。番号指定 (N) のないあいまいな名前が指定された場合、er_print ユーティリティーはオブジェクトファイル名の候補を表示します。 指定された名前が関数の場合は、その関数名がオブジェクトファイル名に付けられ、そのオブジェクトファイルの N の値を表す番号も表示されます。
関数名は function”file” としても指定できます。この場合、file は、関数の代替ソースコンテキストを指定するために使用されます。最初の命令の直後に、関数用のインデックス行が追加されます。インデックス行は、山括弧内のテキストとして次の形式で表示されます。
<関数: f_name>
関数のデフォルトソースコンテキストは、その関数の最初の命令が帰するソースファイルとして定義されます。これは通常、関数を含むオブジェクトモジュールを生成するためにコンパイルされたソースファイルです。代替ソースコンテキストは、関数に属する命令を含むほかのファイルから構成されます。このようなコンテキストには、インクルードファイルの命令と、指定の関数にインライン化された関数の命令が含まれます。代替のソースコンテキストが存在する場合、デフォルトのソースコンテキストの冒頭に、代替ソースコンテキストが置かれている場所を示す拡張インデックス行のリストを次の形式で組み込みます。
<関数: f, ソースファイル src.h から得られた命令>
コマンド行から er_print ユーティリティーを起動するときに -source 引数を使用する場合は、file の引用符の前にバックスラッシュのエスケープ文字を付加する必要があります。つまり、関数名の形式は、function\”file\” となります。er_print ユーティリティーが対話モードにあるときは、バックスラッシュは不要です。使用しないでください。
通常、デフォルトのソースコンテキストが使用された場合は、そのファイルに入っているすべての関数についてメトリックが表示されます。ファイルを明示的に指定した場合は、指定した関数についてのみ、メトリックが表示されます。
指定したファイル、または指定した関数を含むファイルの注釈付き逆アセンブリコードを出力します。指定したファイルは、パスの通っているディレクトリに存在する必要があります。
省略可能なパラメータ N の意味は、source コマンドと同じです。
注釈付きソースのリストに含めるコンパイラのコメントクラスを指定します。クラスリストはコロンで区切ったクラスのリストであり、次のメッセージクラスがゼロ個以上含まれています。
表 6–4 コンパイルコメントメッセージクラス
クラス |
意味 |
---|---|
b[asic] |
基本的なレベルのメッセージを表示します。 |
v[ersion] |
ソースファイル名、最終修正日付、コンパイラコンポーネントのバージョン、コンパイル日付とオプションなどのバージョンメッセージを表示します。 |
pa[rallel] |
並列化に関するメッセージを表示します。 |
q[uery] |
最適化に影響するコードに関する問い合わせメッセージを表示します。 |
l[oop] |
ループの最適化と変換に関するメッセージを表示します。 |
pi[pe] |
ループのパイプライン化に関するメッセージを表示します。 |
i[nline] |
関数のインライン化に関するメッセージを表示します。 |
m[emops] |
ロード、ストア、プリフェッチなどのメモリー操作に関するメッセージを表示します。 |
f[e] |
フロントエンドメッセージを表示します。 |
all |
すべてのメッセージを表示します。 |
none |
メッセージを表示しません。 |
all および none クラスは常に単独で指定します。
scc コマンドを省略した場合は、basic がデフォルトのクラスになります。class-list が空の scc コマンドを入力した場合、コンパイラのコメントは出力されません。通常、scc コマンドは、.er.rc ファイルでのみ使用します。
注釈付きソースコードでのメトリックの強調表示に使用するしきい値の百分率を指定します。ファイル内のソース行で、メトリック値が、そのメトリックの最大値の value % 以上である場合、そのメトリックが発生する行の先頭に ## が挿入されます。
注釈付き逆アセンブリリストに含めるコンパイラのコメントクラスを指定します。クラスリストは、コロンで区切られたクラスのリストです。利用可能なクラスのリストは、表 6–4 に示す注釈付きソースコードリストのクラスリストと同じです。クラスリストには、次のオプションを追加できます。
表 6–5 dcc コマンドの追加オプション
オプション |
意味 |
---|---|
h[ex] |
命令の 16 進値を示します。 |
noh[ex] |
命令の 16 進値を示しません。 |
s[rc] |
ソースリストと注釈付き逆アセンブリリストをインタリーブします。 |
nos[rc] |
ソースリストと注釈付き逆アセンブリリストをインタリーブしません。 |
as[rc] |
注釈付きソースコードと注釈付き逆アセンブリリストをインタリーブします。 |
注釈付き逆アセンブリコードでのメトリックの強調表示に使用するしきい値の百分率を指定します。ファイル内の命令行で、メトリック値が、そのメトリックの最大値の value % 以上である場合、そのメトリックが発生する行の先頭に ## が挿入されます。
注釈付きのソースと逆アセンブリリストに含めるコンパイラのコメントクラスを指定します。クラスリストは、コロンで区切られたクラスのリストです。利用可能なクラスのリストは、表 6–4 に示す注釈付きソースコードリストのクラスリストと同じです。
ソース、オブジェクトなどのファイルを検索するためのパスを設定します。path_list は、ディレクトリのコロン区切りのリストです。ディレクトリ名にコロン文字がある場合は、バックスラッシュでコロンをエスケープします。特別なディレクトリ名 $expts は、現在の実験を読み込まれた順序で示します。これは、$ の 1 文字に短縮できます。
デフォルトの設定は、$expts:.. です。現在のパス設定の検索時にファイルが見つからなかった場合は、コンパイルされているフルパス名が使用されます。
引数のない setpath は、現在のパスを出力します。
現在の setpath の設定に path_list を付加します。
addpath または setpath で設定された path_list を使用してファイルが見つからなかった場合、pathmap コマンドを使用して、1 つまたは複数のパスの再マッピングを指定できます。old-prefix で指定した接頭辞ではじまるソースファイル、オブジェクトファイル、または共有オブジェクトのパス名で、この古い接頭辞が、new-prefix で指定した接頭辞に置き換えられます。新しいパスを使用してファイルが検索されます。pathmap コマンドは複数指定できます。その場合、ファイルが見つかるまで各コマンドが試行されます。
データ空間コマンドの適用対象となるのは、積極的なバックトラッキングが指定されたハードウェアカウンタの実験と、SPARC プラットフォームで使用できる -xhwcprof オプションを指定してコンパイルされたファイル内のオブジェクトだけです。詳細は、『Sun Studio 12: Fortran User’s Guide』、『Sun Studio 12: C User’s Guide』、または『Sun Studio 12: C++ User’s Guide』を参照してください。
データオブジェクトのリストを、それらのメトリックとともに書き込みます。
指定されたデータオブジェクトの概要メトリックパネルを書き込みます。オブジェクト名があいまいな場合には、省略可能なパラメータ N が必要です。指令がコマンド行にある場合には N は必要です。不要な場合は無視されます。
データ派生メトリックデータを持つすべてのプログラミングデータオブジェクトについて、注釈付きのデータオブジェクトレイアウトを書き込みます。データは、各構造をひとまとめにして、現在のデータソートメトリック値によってソートされます。集合体データオブジェクトごとに、そのオブジェクトに加算される合計メトリックが表示され、そのあとに、そのオブジェクトのすべての要素がオフセット順に表示されます。各要素には、そのメトリックと、32 バイトブロックを基準にしたそのサイズと位置を示す情報が表示されます。
データ派生メトリックを設定します。metric_spec は、「メトリックリスト」で定義されています。
デフォルトでは、データ派生メトリックは、関数リストメトリックが変更されたときに必ず、関数リストメトリックに一致するよう設定されます。データ派生フレーバーを持つ表示可能な排他的メトリックまたは包括的メトリックに対応するデータ派生メトリックには、この 2 つの visibility 設定の論理和に対応する visibility が設定されます。
静的メトリック設定は、データ派生メトリックへコピーされます。リストにないメトリック名は、リストに付加されます。
metric_spec を省略した場合は、現在のデータ派生メトリックの設定が表示されます。
読み込まれた実験の、入手できるすべての metric-name 値のリストは、data_metric_list コマンドで取得できます。
誤りがある metric_spec は無視され、データ派生メトリックは変更されません。
データオブジェクトのソートメトリックを設定します。動的メトリックには接頭辞 d が必要ですが、静的メトリックでは、これを省略できます。data_sort メトリックは、データ派生メトリックまたは静的メトリックである必要があります。
複数のメトリックを指定した場合は、適合する最初の表示可能メトリックによってソートされます。明示的に、またはデフォルトでメトリックが設定されている場合、次のように関数メトリックに基づいてデータ派生ソートメトリックが設定されます。
ソートが、包括的または排他的のいずれでも、対応するデータ派生フレーバーを持つ動的メトリックによるものである場合は、対応するデータ派生メトリックによってソートされます。
ソートが、データ派生フレーバーを持たない包括的または排他的メトリックによるものである場合は、表示可能な最初のデータ派生メトリックによってソートされます。
ソートが静的メトリックによるものである場合は、それによってソートされます。
メモリーオブジェクトコマンドの適用対象となるのは、積極的なバックトラッキングが指定されたハードウェアカウンタの実験と、SPARC プラットフォームで使用できる -xhwcprof オプションを指定してコンパイルされたファイル内のオブジェクトだけです。詳細は、『Sun Studio 12: Fortran User’s Guide』、『Sun Studio 12: C User’s Guide』、または『Sun Studio 12: C++ User’s Guide』を参照してください。
メモリーオブジェクトは、キャッシュ行、ページ、およびメモリーバンクなど、メモリーサブシステム内のコンポーネントです。このオブジェクトは、記録された仮想アドレスまたは物理アドレスから計算されたインデックスから決定されます。メモリーオブジェクトは、仮想ページおよび物理ページについて 8K バイト、64K バイト、512K バイト、および 4M バイトのサイズで事前定義されています。それ以外は、mobj_define コマンドで定義できます。
次のコマンドは、メモリーオブジェクトのリストを制御します。
所定のタイプのメモリーオブジェクトと現在のメトリックのリストを出力します。メトリックはデータ空間のリストとして、ソートされ表示されます。名前 mobj_type を直接、コマンドとして使用することもできます。
memobj コマンド内で mobj_type に使用する、既知のタイプのメモリーオブジェクトのリストを出力します。
新しいタイプのメモリーオブジェクトを、index_exp で指定されたオブジェクトへの VA/PA のマッピングを使用して定義します。式の構文については、「式の文法」に説明があります。
mobj_type は、定義済みであってはいけません。その名前は、全体が英数字または「_」文字から構成されている必要があり、1 文字目は英字である必要があります。
index_exp は、構文的に正しくなければいけません。構文的に正しくない場合はエラーが返され、定義は無視されます。
<Unknown> メモリーオブジェクトのインデックスは -1 です。また、新しいメモリーオブジェクトを定義するために使用する式は、<Unknown> の認識をサポートしている必要があります。たとえば、VADDR ベースのオブジェクトの場合、式は次の形式になっている必要があります。
VADDR>255?expression :-1
また、PADDR ベースのオブジェクトの場合、式は次の形式になっている必要があります。
PADDR>0?expression:-1
インデックスオブジェクトのコマンドは、すべての実験に使用できます。インデックスオブジェクトリストは、記録されたデータからインデックスを計算できるオブジェクトのリストです。スレッド、CPU、標本、および秒のインデックスオブジェクトが事前に定義されています。その他のインデックスオブジェクトは、indxobj_define コマンドで定義できます。
次のコマンドは、インデックスオブジェクトのリストを制御します。
所定のタイプのインデックスオブジェクトとそのメトリックのリストを出力します。インデックスオブジェクトのメトリックとソートは、排他的メトリックだけが含まれる点を除き、関数リストと同じです。名前 indxobj_type を直接、コマンドとして使用することもできます。
indxobj コマンド内で indxobj_type に使用する、既知のタイプのインデックスオブジェクトのリストを書き込みます。
新しいタイプのインデックスオブジェクトを、index_exp で指定されたオブジェクトへのパケットのマッピングを使用して定義します。式の構文については、「式の文法」に説明があります。
indxobj_type は、定義済みであってはいけません。その名前は、大文字と小文字が区別され、全体が英数字または「_」文字から構成されている必要があり、1 文字目は英字である必要があります。
index_exp の構文が正しくなかった場合は、エラーが返され、定義が無視されます。index_exp に空白文字が含まれる場合は、二重引用符 (") で囲む必要があります。
<Unknown> インデックスオブジェクトのインデックスは -1 です。また、新しいインデックスオブジェクトを定義するために使用する式は、<Unknown> の認識をサポートしている必要があります。
たとえば、仮想 PC または物理 PC に基づくインデックスオブジェクトの場合、式は次の形式になっている必要があります。
VIRTPC>0?VIRTPC:-1 |
インデックスオブジェクトに表示するメトリックを指定します。インデックスオブジェクトは階層構造ではないので、metric_spec には排他的メトリックと静的メトリックだけを含めることができます。
メトリックリストの構文については、「メトリックリスト」を参照してください。指定可能なメトリックを一覧表示するには、metric_list コマンドを使用します。
指定したメトリックを基準にインデックスオブジェクトのリストをソートします。indxobj_sort メトリックは、排他的メトリックまたは静的メトリックである必要があります。複数のメトリックを指定した場合は、適合する最初の表示可能メトリックによってソートされます。
スレッドアナライザをサポートするコマンドは、次のとおりです。取得され、表示されるデータについては、『Sun Studio 12: Thread Analyzer User’s Guide』を参照してください。
実験内のすべてのデータ競合のリストを出力します。データ競合レポートは、データ競合検出データがある実験についてのみ表示できます。
指定する race_id に詳細情報を出力します。race_id を all に設定すると、すべてのデータ競合に関する詳細情報が表示されます。データ競合レポートは、データ競合検出データがある実験についてのみ表示できます。
実験内で検出された実際のデッドロックと潜在的デッドロックのリストを出力します。デッドロックのレポートは、デッドロック検出データがある実験についてのみ表示できます。
指定する deadlock_id に関する詳細情報を出力します。deadlock_id を all に設定すると、すべてのデッドロックに関する詳細情報が表示されます。デッドロックのレポートは、デッドロック検出データがある実験についてのみ表示できます。
ここでは、実験、標本、スレッド、および LWP を一覧表示するコマンドについて説明します。
読み込まれているすべての実験をその ID 番号とともに一覧表示します。それぞれの実験は、標本、スレッド、または LWP を選択するときに使用されるインデックス、および拡張フィルタリングに使用できる PID と一緒に示されます。
実験リストの例を次に示します。
(er_print) experiment_list ID 実験 == ========== 1 test.1.er 2 test.6.er |
解析対象として選択されている標本を一覧表示します。
標本リストの例を次に示します。
(er_print) sample_list Exp Sel 合計 === ======= ===== 1 1-6 31 2 7-10,15 31 |
解析対象として選択されている LWP を一覧表示します。
解析対象として選択されているスレッドを一覧表示します。
解析対象として選択されている CPU を一覧表示します。
実験データのフィルタリングは、次の 2 つの方法で指定できます。
フィルタ式を指定します。このフィルタ式は各データレコードについて評価され、そのレコードを含めるかどうかを決めます。
フィルタリング用に、実験、標本、スレッド、CPU、および LWP を選択します。
フィルタ式は、filters コマンドで指定できます。
filter_exp は式であり、この式が真と評価されたデータレコードは含まれ、偽のレコードは含まれません。式の文法については、「式の文法」に説明があります。
選択リストの構文は、次の例に示すとおりです。この節では、この構文を使用してコマンドを説明しています。
[experiment-list:]selection-list[+[ experiment-list:]selection-list … ] |
各選択リストの前には、空白なしの 1 つのコロンで区切って実験リストを指定できます。選択リストを + 符号でつなぐことによって、複数の選択リストを指定することもできます。
実験リストおよび選択リストの構文は同じで、all キーワード、または空白なしのコロンで区切った番号または番号範囲 (n-m) リストを指定できます。
2,4,9-11,23-32,38,40 |
実験番号は、exp_list コマンドを使用して調べることができます。
次に選択リストの例を示します。
1:1-4+2:5,6 all:1,3-6 |
1 つ目の例では、実験 1 からオブジェクト 1 〜 4、実験 2 からオブジェクト 5 〜 6 を選択しています。2 つ目の例では、すべての実験からオブジェクト 1 と 3 〜 6 を選択しています。オブジェクトは、LWP、スレッド、または標本のいずれかです。
LWP、標本、CPU、およびスレッドを選択するためのコマンドは相互に依存しています。コマンドの実験リストの内容が、直前のコマンドのリストの内容と異なる場合は、最新のコマンドの実験リストの内容が、次のようにして 3 つのタイプの選択ターゲット (LWP、標本、スレッド) のすべてに適用されます。
最新の実験リストにない実験に対する既存の選択内容は無効になります。
最新の実験リストに含まれている実験に対する既存の選択内容は維持されます。
選択が行われていないターゲットに対しては all が適用されます。
情報を表示する標本を選択します。コマンドが終了すると、選択された標本が一覧表示されます。
情報を表示する LWP を選択します。コマンドが終了すると、選択された LWP が一覧表示されます。
情報を表示するスレッドを選択します。コマンドが終了すると、選択されたスレッドが一覧表示されます。
情報を表示する CPU を選択します。コマンドが終了すると、選択された CPU が一覧表示されます。
利用可能なロードオブジェクトの状態と名前を示す 2 列のリストを表示します。各ロードオブジェクトの展開状態は最初の列に示され、オブジェクトの名前は 2 番目の列に示されます。各ロードオブジェクト名の前には、そのオブジェクトの関数が関数リスト内に表示される (展開される) ことを示す「はい」か、そのオブジェクトの関数が関数リスト内に表示されない (短縮される) ことを示す「いいえ」が付きます。短縮されたロードオブジェクトのすべての関数は、そのロードオブジェクト全体を表す関数リスト内の単一の項目へマップされます。
ロードオブジェクトリストの表示例を次に示します。
(er_print) object_list Sel ロードオブジェクト === ================== いいえ <Unknown> はい <Freeway> はい <libCstd_isa.so.1> はい <libnsl.so.1> はい <libmp.so.2> はい <libc.so.1> はい <libICE.so.6> はい <libSM.so.6> はい <libm.so.1> はい <libCstd.so.1> はい <libX11.so.4> はい <libXext.so.0> はい <libCrun.so.1> はい <libXt.so.4> はい <libXm.so.4> はい <libsocket.so.1> はい <libgen.so.1> はい <libcollector.so> はい <libc_psr.so.1> はい <ld.so.1> はい <liblayout.so.1> |
関数の情報を表示するロードオブジェクトを選択します。object-list は、空白なしのコンマで区切ったロードオブジェクトのリストです。ロードオブジェクトを選択すると、そのオブジェクトの関数が展開され、ゼロ以外のメトリックを持つすべての関数が関数リストに表示されます。ロードオブジェクトを選択しないと、そのオブジェクトの関数は短縮され、そのロードオブジェクト全体のメトリックが入った単一の行が表示され、個々の関数は表示されません。
ロードオブジェクト名は、フルパス名またはベース名で指定します。オブジェクト名そのものにコンマが含まれている場合は、名前を二重引用符で囲む必要があります。
ここでは、現在選択されているメトリックと使用可能なメトリックキーワードを一覧表示するコマンドを説明します。
関数リストで現在選択されているメトリックと、関数リスト内のさまざまな種類のメトリックを参照するときに、ほかのコマンド (metrics、sort など) で使用可能なメトリックキーワードの一覧を表示します。
呼び出し元 - 呼び出し先リストで現在選択されているメトリックと、呼び出し元 - 呼び出し先リスト内のさまざまな種類のメトリックを参照するときに、ほかのコマンド (cmetrics、csort など) で使用可能なメトリックキーワードの一覧を表示します。
属性メトリックを表示用に指定するには、cmetrics コマンドだけを使用でき、metrics コマンドや data_metrics コマンドは使用できません。また、属性メトリックを表示するには、callers-callees コマンドだけを使用でき、functions コマンドや data_objects コマンドは使用できません。
現在選択されているデータ派生メトリック、およびすべてのデータ派生レポートのメトリックとキーワード名のリストを表示します。metric_list コマンドの出力と同じ方法でリストを表示しますが、データ派生フレーバーを持つメトリックと静的メトリックだけを含めます。
データ派生メトリックを表示用に指定するには、data_metrics コマンドだけを使用でき、metrics コマンドや cmetrics コマンドは使用できません。また、属性メトリックを表示するには、data_objects コマンドだけを使用でき、functions コマンドや callers-callees コマンドは使用できません。
現在選択されているインデックスオブジェクトのメトリックを表示します。metric_list コマンドと同じ方法でリストを表示しますが、排他的フレーバーを持つメトリックと静的メトリックだけを含めます。
ここでは、er_print の出力を制御するコマンドを説明します。
開いている出力ファイルを閉じ、以降の出力先として filename を開きます。filename を開くときに、既存のコンテンツを消去します。filename の代わりにハイフン (-) を指定した場合は、標準出力に出力されます。filename の代わりに 2 つのハイフン (--) を指定した場合は標準エラーへ出力されます。
開いている出力ファイルを閉じ、filename を開きます。その際、既存のコンテンツがあれば残し、後続の出力がファイルの末尾に付加されるようにします。filename が存在しない場合、appendfile コマンドの機能は outfile コマンドと同じです。
出力をレポートの最初の n 個のエントリだけに制限します。n は、符号なしの正の整数です。
長短どちらの形式の関数名を使用するかを指定します (C++ および Java のみ)。shared_object_name が指定された場合は、関数名に共有オブジェクト名を付加します。
モードを次のいずれかに設定します。
Java 実験の場合は、Java スレッドの Java 呼び出しスタックを表示し、ハウスキーピングスレッドを表示しません。関数リストには、Java 以外のスレッドからの集計時間を表す関数 <JVM システム> が含まれます。JVM ソフトウェアが Java 呼び出しスタックを報告しない場合、時間は関数 <Java 呼び出しスタックが記録されていません> に報告されます。
OpenMP 実験の場合は、マスタースレッド呼び出しスタックとスレーブスレッド呼び出しスタックを調整して表示します。また、OpenMP ランタイムが特定の操作を実行しているときは、<OMP-*> という形式の名前を持つ特殊関数を追加します。
Java 実験の場合は、ユーザーの Java コードの実行中には Java スレッドの Java 呼び出しスタックを表示し、JVM コードの実行中または JVM ソフトウェアが Java 呼び出しスタックを報告しないときにはマシン呼び出しスタックを表示します。ハウスキーピングスレッドについてはマシン呼び出しスタックを表示します。
OpenMP 実験の場合は、user モードと同じ情報を表示します。
Java 実験と OpenMP 実験の場合は、すべてのスレッドのマシン呼び出しスタックを表示します。
Java 実験と OpenMP 実験を除くすべての実験の場合は、3 つのモードすべてに同じデータを表示します。
指定した実験に関する説明情報を表示します。exp_id は、exp_list コマンドを使用して調べることができます。exp_id として all を指定するか、exp_id を省略した場合は、読み込まれた実験すべての情報が表示されます。
エラーや警告が発生した場合には、各ヘッダーのあとに表示されます。各実験のヘッダーは、ハイフン (-) で区切られます。
実験ディレクトリに notes という名前のファイルがある場合は、このファイルの内容がヘッダー情報の先頭に付加されます。notes ファイルは、collect コマンドに -C “ comment” 引数を付けて、手動で追加、編集、または指定できます。
exp_id はコマンド行では必要ですが、スクリプトや対話モードでは不要です。
測定されたカウントデータから命令頻度のリストを書き込みます。命令頻度のレポートは、カウントデータからのみ生成できます。このコマンドは、Solaris OS を実行している SPARC プロセッサだけが対象です。
パフォーマンス解析の目的でロードオブジェクトを使用した結果として生じるエラーメッセージや警告メッセージのないロードオブジェクトを一覧表示します。表示されるロードオブジェクトの数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。
指定した実験の標本のうち、現在選択されている各標本の標本データを書き出します。exp_id は、exp_list コマンドを使用して調べることができます。exp_id として all を指定するか、または exp_id を省略した場合、すべての実験の標本データが表示されます。exp_id はコマンド行では必要ですが、スクリプトや対話モードでは不要です。
指定した実験の現在の標本セット全体にわたって集計された実行統計情報を書き出します。実行統計値の定義と意味については、getrusage(3C) と proc(4) のマニュアルページを参照してください。実行統計には、コレクタがデータをまったく収集しないシステムスレッドからの統計が含まれます。
exp_id は、experiment_list コマンドを使用して調べることができます。exp_id が指定されていない場合、各実験の標本セットを対象に集計された、すべての実験のデータの合計が表示されます。exp_id が all である場合、各実験の合計と個々の統計が表示されます。
次のコマンドを使用して、er_print およびアナライザに対するデフォルト値を設定することができます。これらのコマンドは、デフォルトを設定するためにのみ使用できます。er_print ユーティリティーの入力としては使用できません。これらのコマンドは、.er.rc という名前のデフォルト値ファイルに組み込むことができます。パフォーマンスアナライザのデフォルト値にのみ適用できるコマンドについては、「パフォーマンスアナライザにのみデフォルト値を設定するコマンド」に説明があります。
デフォルト値ファイルは、すべての実験のデフォルト値を設定するためにホームディレクトリに置くか、デフォルト値をローカルに設定するためにそれ以外のディレクトリに置くことができます。er_print ユーティリティー、er_src ユーティリティー、パフォーマンスアナライザのいずれかを起動すると、現在のディレクトリとユーザーのホームディレクトリにデフォルト値ファイルがあるかどうかが調べられ、存在する場合は、システムのデフォルト値ファイルとともに、そのファイルが読み取られます。ホームディレクトリの .er.rc ファイル内のデフォルト値はシステムのデフォルト値よりも優先し、現在のディレクトリの .er.rc ファイル内のデフォルト値は、ユーザーのホームおよびシステムのデフォルト値よりも優先します。
実験が格納されているディレクトリからデフォルト値ファイルを読み取るには、そのディレクトリからパフォーマンスアナライザまたは er_print ユーティリティーを起動する必要があります。
デフォルト値ファイルには、scc、sthresh、dcc、dthresh、cc、setpath、addpath、pathmap、name、mobj_define、indxobj_define、tabs、rtabs、viewmode の各コマンドを含めることもできます。dmetrics、dsort、addpath、pathmap、mobj_define、indxobj_define の各コマンドは、1 つのデフォルト値ファイルに複数含めることができ、その場合、すべての .er.rc ファイル内のコマンドが連結されます。それ以外のすべてのコマンドの場合は、最初に出現するものが使用され、それ以後のものは無視されます。
関数リストに表示または印刷するデフォルトのメトリックを指定します。メトリックリストの構文と使用方法については、「メトリックリスト」で説明しています。メトリックが出力される順序とアナライザの「メトリック」ダイアログボックスに表示されるメトリックの順序は、このリスト内のメトリックキーワードの順序によって決まります。
呼び出し元 - 呼び出し先リストのデフォルトのメトリックは、このリスト内の各メトリック名の最初の名前の前に対応する属性メトリックを追加することによって得られます。
関数リストの内容をソートするときの基準として、デフォルトで使用するメトリックを指定します。ソート基準メトリックは、このリスト内で、読み込まれている実験内のメトリックと一致する最初のメトリックです。このとき、次の条件が適用されます。
metric_spec のエントリに表示文字列の感嘆符「!」が含まれている場合、表示されているかどうかに関係なく、一致する名前を持つメトリックの中で最初のメトリックが使用されます。
metric_spec のエントリにほかの表示文字列が含まれている場合、一致する名前を持つメトリックの中の最初の表示メトリックが使用されます。
メトリックリストの構文と使用方法については、「メトリックリスト」で説明しています。
呼び出し元 - 呼び出し先リストのデフォルトソート基準メトリックは、関数リストのデフォルトソート基準メトリックに対応する属性メトリックです。
派生実験を読み取るためのモードを on (すべての派生実験を有効にする) か off (すべての派生実験を無効にする) に設定します。 =regexp を使用した場合、系統または実行可能ファイル名が正規表現と一致する実験のデータが有効になります。
アナライザで表示可能にするタブのデフォルトセットを設定します。各タブは、対応するレポートを生成する er_print コマンドによって指定されます。たとえば、メモリーオブジェクトのタブの場合は mobj_type、インデックスオブジェクトのタブの場合は indxobj_type になります。timeline は「タイムライン」タブを指定し、headers は「実験」タブを指定します。
読み込まれた実験内のデータがサポートするタブだけが表示されます。
スレッドアナライザの実験を確認するために tha コマンドでアナライザを起動したときに表示可能にするタブのデフォルトセットを設定します。読み込まれた実験内のデータがサポートするタブだけが表示されます。
パフォーマンスアナライザの「タイムライン」タブの表示モードオプションを設定します。オプションのリストは、コロン区切りのリストです。使用できるオプションを次の表に示します。
表 6–6 タイムラインの表示モードのオプション
オプション |
意味 |
---|---|
lw[p] |
LWP のイベントを表示する |
t[hread] |
スレッドのイベントを表示する |
c[pu] |
CPU のイベントを表示する |
r[oot] |
ルートで呼び出しスタックを配置する |
le[af] |
リーフで呼び出しスタックを配置する |
d[epth] nn |
表示できる呼び出しスタックの最大深さを設定する |
lwp、thread、 cpu の各オプションは相互排他的です。root と leaf も相互排他的です。相互排他オプションの複数のセットをリストに含めた場合、最後のオプションだけが使用されます。
パフォーマンスアナライザの「タイムライン」タブに表示されるデフォルトのデータの種類を選択します。種類リストの種類はコロンで区切られます。使用できるタイプを次の表に示します。
表 6–7 タイムラインに表示するデータの種類
種類 |
意味 |
---|---|
sa[mple] |
標本データを表示する |
c[lock] |
時間プロファイルデータを表示する |
hw[c] |
ハードウェアカウンタプロファイルデータを表示する |
sy[nctrace] |
スレッド同期トレースデータを表示する |
mp[itrace] |
MPI トレースデータを表示する |
he[aptrace] |
ヒープトレースデータを表示する |
指定したロードオブジェクトのマップファイルを、mapfilename で指定したファイルに書き込みます。mapfilename の代わりにハイフン (-) を指定した場合は、標準出力に出力されます。
処理データから蓄積された統計を出力します。
file に指定したスクリプトファイル内の追加コマンドを処理します。
現在の er_print ユーティリティーのバージョン情報を表示します。
現在のスクリプトの処理を打ち切るか、対話モードを終了します。
er_print コマンドの一覧を表示します。
フィルタを定義する式と、メモリーオブジェクトインデックスを算出するために使用される式には、共通の文法が使用されます。
その文法は、式を演算子とオペランドの組み合わせとして指定します。フィルタの場合は、式が真と評価されるとパケットが包含され、式が偽と評価されるとパケットが除外されます。メモリーオブジェクトまたはインデックスオブジェクトの場合、式は、パケット内で参照される特定のメモリーオブジェクトまたはインデックスオブジェクトを定義するインデックスへと評価されます。
式の中のオペランドは、定数、データレコード内のフィールド (THRID、LWPID、CPUID、STACK、LEAF、VIRTPC、 PHYSPC、VADDR、PADDR、DOBJ、TSTAMP、SAMPLE、EXPID、 PID)、またはメモリーオブジェクトの名前です。演算子は、C の表記法と C の優先順位規則に従った通常の論理演算子と算術 (シフトを含む) 演算子、要素が集合に含まれるかどうかを決める演算子 (IN)、要素集合の一部または全部が 1 つの集合に含まれるかどうかを決める演算子 (それぞれ、SOME IN か IN) のいずれかです。If-then-else 構造は、C のように ? 演算子と : 演算子で指定されます。すべての式が正しく構文解析されるよう、小括弧を使用してください。er_print のコマンド行では、複数の行にまたがって式を分割することはできません。スクリプト内またはコマンド行では、式に空白文字が含まれる場合、その式を二重引用符で囲む必要があります。
フィルタ式はブール値がパケットを包含する場合は真、除外する場合は偽と評価します。スレッド、LWP、CPU、実験 id、プロセス id、および標本のフィルタリングは、適切なキーワードと 1 つの整数を結び付ける関係式、または IN 演算子とコンマで区切った整数リストを使用した関係式に基づいて行われます。
時間フィルタリングを使用するには、TSTAMP と時間を結び付ける 1 つ以上の関係式を指定し、時間は、現在パケットが処理されている実験の開始以降のナノ秒数 (整数) で指定します。標本の時間を取得するには、overview コマンドを使用します。overview コマンドでは時間が秒単位で与えられるため、時間フィルタリングに使用するには、ナノ秒に変換する必要があります。時間は、アナライザの「タイムライン」表示から取得することもできます。
関数フィルタリングは、リーフ関数に基づいて行うか、スタック内の任意の関数に基づいて行うことができます。リーフ関数によるフィルタリングを指定するには、LEAF キーワードと整数の関数 id を結び付ける関係式を使用するか、IN 演算子と構造 FNAME(“ regexp”) を使用した関係式を使用します。ただし、regexp は regexp(5) のマニュアルページで指定されているような正規表現です。現在の name の設定によって指定されている関数全体の名前が一致する必要があります。
呼び出しスタック内の任意の関数に基づいたフィルタリングは、構造 FNAME(“regexp ”) 内の任意の関数が、キーワード STACK: (FNAME(“myfunc”) SOME IN STACK) によって表された関数配列に含まれるかどうかを判定することによって指定されます。
データオブジェクトのフィルタリングは、スタック関数のフィルタリングに似ており、DOBJ キーワードと構造 DNAME(“ regexp”) を小括弧で囲んで使用します。
メモリーオブジェクトのフィルタリングを指定するには、mobj_list コマンドに示すようなメモリーオブジェクトの名前とオブジェクトの整数インデックス、または一連のオブジェクトのインデックスを使用します。<Unknown> メモリーオブジェクトのインデックスは、-1 になります。
インデックスオブジェクトのフィルタリングを指定するには、indxobj_list コマンドに示すようなインデックスオブジェクトの名前とオブジェクトの整数インデックス、または一連のオブジェクトのインデックスを使用します。<Unknown> インデックスオブジェクトのインデックスは、-1 になります。
データオブジェクトのフィルタリングとメモリーオブジェクトのフィルタリングは、データ空間データを持つハードウェアカウンタパケットについてのみ意味があり、ほかのすべてのパケットは、そのようなフィルタリングでは除外されます。
仮想アドレスまたは物理アドレスの直接フィルタリングを指定するには、VADDR または PADDR とアドレスの間の関係式を使用します。
メモリーオブジェクトの定義 (「mobj_define mobj_type index_exp」 を参照) では、1 つの整数インデックスへと評価される式が使用され、VADDR キーワードまたは PADDR キーワードが使用されます。それらの定義は、メモリーカウンタとデータ空間データについてのハードウェアカウンタパケットにのみ適用されます。式は整数を返すか、<Unknown> メモリーオブジェクトについては -1 を返す必要があります。
インデックスオブジェクトの定義 (「indxobj_define indxobj_type index_exp」 を参照) では、1 つの整数インデックスへと評価される式が使用されます。式は整数を返すか、<Unknown> インデックスオブジェクトについては -1 を返す必要があります。
次の例は、実験から gprof 形式に似た一覧を生成します。出力は er_print.out というファイルで、先頭の 100 個の関数と、関数ごとの属性ユーザー時間でソートされた呼び出し元 - 呼び出し先データの一覧です。
er_print -outfile er_print.out -metrics e.%user \ -sort e.user -limit 100 -functions -cmetrics a.user \ -csort a.user -callers-callees test.1.er |
この例のコマンドを分解して、次の独立した 2 つのコマンドにすることもできます。ただし、大規模な実験またはアプリケーションでは、er_print の呼び出しのたびに、かなりの時間がかかることがありますので注意してください。
er_print -metrics e.%user -sort e.user \ -limit 100 -functions test.1.er |
er_print -cmetrics a.%user -csort a.user \ -callers-callees test.1.er |
この例は、関数での時間の消費のされ方に関する概要情報を示します。
er_print -functions test.*.er |
この例は、呼び出し元と呼び出し先の関係を示します。
er_print -callers-callees test.*.er |
この例は、着目したいソース行を表示します。ソース行情報は、コードのコンパイルとリンクで -g が指定されていることを前提にしています。Fortran の関数とルーチンの場合は、関数名の最後に下線を付けてください。関数名のあとの 1 は、myfunction の複数インスタンスを区別するためのものです。
er_print -source myfunction 1 test.*.er |
この例は、コンパイラのコメントのみ表示します。このコマンドを使用するためにプログラムを実行する必要はありません。
er_src -myfile.o |
次の例では、時計時間プロファイルを使用して、関数および呼び出し元と呼び出し先を一覧表示しています。
er_print -metrics ei.%wall -functions test.*.er |
er_print -cmetrics aei.%wall -callers-callees test.*.er |
この例は、er_print コマンドを含むスクリプトを実行する方法を示します。
er_print -script myscriptfile test.1.er |
myscriptfile スクリプトに er_print コマンドが含まれます。スクリプトファイルの例を次に示します。
## myscriptfile ## スクリプトの出力先を標準出力に設定 outfile - ## 実験に関する説明を表示 header ## すべての実験の標本データを出力 overview ## 指定した実験の現在の標本セット全体にわたって ## 集計された実行統計情報を出力 statistics ## 関数を一覧表示 functions ## 利用可能なロードオブジェクトの状態と名前を表示 object_list ## systime の注釈付き逆アセンブリコードを ## disasm.out ファイルに出力 outfile disasm.out disasm systime ## synprog.c の注釈付きソースコードを ## source.out ファイルに出力 outfile source.out source synprog.c ## スクリプトの処理を終了 quit |
次の例は、高度な MPI 関数を表示します。MPI には多数の内部ソフトウェア層がありますが、この例では、エントリポイントだけを表示する 1 つの方法を示します。シンボルが重複する場合もありますが、それらは無視してかまいません。
er_print -functions test.*.er | grep PMPI_ |