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

第 5 章 er_print コマンド行パフォーマンス解析ツール

この章では、er_print ユーティリティーを使用してパフォーマンス解析を行う方法を説明します。er_print ユーティリティーは、パフォーマンスアナライザがサポートする各種の表示内容を ASCII 形式で出力します。これらの情報は、ファイルにリダイレクトしないかぎり、標準出力に書き込まれます。er_print ユーティリティーには、引数として、コレクタが生成した実験名または実験グループ名を指定する必要があります。

er_print ユーティリティーを使用して、関数や呼び出し元と呼び出し先のパフォーマンスメトリックス、ソースコードと逆アセンブリコードのリスト、標本収集情報、データ空間データ、スレッド解析データ、および実行統計情報を表示することができます。

er_print を、複数の実験または実験グループで起動した場合、デフォルトでは、実験データが集計されますが、実験を比較することもできます。詳細は、compare { on | off }を参照してください。

この章では、次の内容について説明します。

コレクタが収集するデータについては、第 2 章パフォーマンスデータを参照してください。

パフォーマンスアナライザを使用して情報をグラフィカル形式で表示する方法については、第 4 章パフォーマンスアナライザツールおよびオンラインヘルプを参照してください。

er_print の構文

er_print ユーティリティーのコマンド行構文は、次のとおりです。


er_print [ -script script | -command | - | -V ] experiment-list

er_print ユーティリティーのオプションは、次のとおりです。

-

キーボードから入力された er_print コマンドを読み取ります。

-script script

script ファイルからコマンドを読み取ります。script ファイルは、一連の er_print コマンドを含むファイルで、1 行に 1 つの er_print コマンドがあります。-script オプションを指定しない場合、er_print は、端末またはコマンド行からコマンドを読み取ります。

-command [argument]

指定されたコマンドを処理します。

-V

バージョン情報を表示して終了します。

er_print のコマンド行には、複数のオプションを指定できます。指定したオプションは、指定した順に処理されます。スクリプト、ハイフン、明示的なコマンドを任意の順序で組み合わせることができます。コマンドまたはスクリプトを何も指定しなかった場合、er_print はデフォルトで対話モードになり、キーボードからコマンドを入力します。対話モードを終了するには、quit と入力するか、Ctrl-D を押します。

それぞれのコマンドが処理されたあと、その処理から発生したエラーメッセージまたは警告メッセージがある場合は、出力されます。処理に関する統計情報の概要を出力するには、procstats コマンドを使用します。

er_print ユーティリティーで使用できるコマンドについては、以降の節で示します。

すべてのコマンドは、そのコマンドであることが明確なかぎり、短縮することができます。コマンドを複数の行に分割するには、行の末尾にバックスラッシュ \ を付けます。\ で終わる行は、その行の構文解析が行われる前に \ 文字が削除され、次の行の内容が追加されます。1 つのコマンドに使用できる行数は、利用可能なメモリー以外に制限はありません。

空白文字を含んでいる引数は、二重引用符で囲む必要があります。引用符の内部では、行をまたいでテキストを分割してもかまいません。

メトリックリスト

多くの er_print コマンドでは、メトリックキーワードのリストを使用します。リストの構文は次のとおりです。


metric-keyword-1[:metric-keyword2…]

測定されたデータに基づく動的メトリックスの場合、メトリックのキーワードは、メトリックフレーバー文字列、メトリック表示形式文字列、およびメトリック名文字列の 3 つの部分から構成されます。これらは、空白を入力せずに次のように続けて指定します。


flavorvisibilityname

実験内のロードオブジェクトの静的プロパティー (名前、アドレス、およびサイズ) に基づく静的メトリックスの場合、メトリックのキーワードは、メトリック名とその前に付加されるメトリック表示形式文字列 (省略可能) を空白なしに結合して構成されます。


[visibility]name

メトリックの flavor 文字列と visibility 文字列は、フレーバー文字と表示形式文字を使用して指定します。

指定可能なメトリックフレーバー文字を表 5–1 に示します。複数のフレーバー文字を含むメトリックキーワードが展開されて、メトリックキーワードリストになります。たとえば、ie.user は、展開されて i.user:e.user になります。

表 5–1 メトリックフレーバー文字

文字 

内容の説明  

e

排他的メトリック値を表示します。 

i

包括的メトリック値を表示します。 

a

属性メトリック値を表示します (呼び出し元 - 呼び出し先メトリックの場合のみ)。 

データ空間メトリック値を表示します (データ派生メトリックスの場合のみ)。 

指定可能なメトリック表示形式文字を表 5–2 に示します。指定可能なメトリック表示形式文字をTable 5–2 に示します。表示形式文字列の文字の順序は重要ではありません。対応するメトリックスの表示順序には影響しません。たとえば、i%.useri.%user はともに i.user:i%user と解釈されます。

表示形式だけが異なるメトリックスは、常に標準の順序で一緒に表示されます。表示形式だけが異なる 2 つのメトリックキーワードがほかのキーワードで区切られている場合は、標準の順序で 2 つのメトリックスの 1 つ目の位置にメトリックスが表示されます。

表 5–2 メトリック表示形式文字

文字 

内容の説明  

.

メトリックを時間で表示します。この指定は、サイクルカウントを計測する時間メトリックスとハードウェアカウンタメトリックスに適用されます。そのほかのメトリックスは「+」と解釈されます。

%

プログラム全体のメトリックを百分率で表示します。呼び出し元 - 呼び出し先リストの属性メトリックスの場合は、選択した関数の包括的メトリックにの割合が表示されます。 

+

メトリックを絶対値で表示します。ハードウェアカウンタの場合、この値はイベントの回数です。時間メトリックスの場合は「.」と解釈されます。

!

メトリック値を表示しません。ほかの表示形式文字と組み合わせることはできません。 

フレーバー文字列と可視文字列のそれぞれが複数の文字から構成されている場合は、フレーバー文字列が先に展開されます。すなわち、ie.%user は展開されて i.%user:e.%user になり、i.user:i%user:e.user:e%user と解釈されます。

静的メトリックスの場合、ソート順序の定義という観点からは、表示形式文字のピリオド (.)、正符号 (+)、パーセント記号 (%) は同等と見なされます。つまり、sort i%usersort i.usersort i+user はすべて、「どのような形式で表示するにせよ、包括的ユーザー CPU 時間を基準にソートする」ことを意味します。また、sort i!user は、「表示するかどうかに関係なく、包括的ユーザー CPU 時間を基準にソートする」という意味になります。

可視文字の感嘆符 (!) を使用すると、各フレーバーのメトリックに組み込みのデフォルト値を置き換えられます。

メトリックリスト内で同じメトリックを複数回表示した場合は、最初に出現したものだけが処理され、それ以後のものは無視されます。名前付きメトリックがリストにない場合は、そのメトリックがリストに付加されます。

表 5–3 に、時間メトリックス、同期遅延メトリックス、メモリー割り当てメトリックス、MPI トレースメトリックス、および 2 つの一般的なハードウェアカウンタメトリックスに指定可能な er_print メトリック名文字列を示します。ほかのハードウェアカウンタメトリックスの場合、メトリック名文字列はカウンタ名と同じです。読み込まれた実験に適用できるすべてのメトリック名文字列のリストは、metric_list コマンドで取得できます。カウンタ名は、collect コマンドを引数なしで使用することによって一覧表示できます。ハードウェアカウンタについての詳細は、「ハードウェアカウンタオーバーフローのプロファイルデータ」を参照してください。

表 5–3 メトリック名文字列

カテゴリ 

文字列 

内容の説明  

時間メトリックス 

user

ユーザー CPU 時間 

 

wall

実経過時間 

 

total

LWP 合計時間 

 

system

システム CPU 時間 

 

wait

CPU 待ち時間 

 

ulock

ユーザーロック時間 

 

text

テキストページフォルト時間 

 

data

データページフォルト時間 

 

owait

ほかの待ち時間 

時間ベースのプロファイルメトリックス 

mpiwork

MPI ランタイムで作業する (処理の要求やメッセージなど) 時間 

 

mpiwait

MPI ランタイムで、イベント、バッファー、またはメッセージを待っている時間 

 

ompwork

作業を直列または並列で実行する時間 

 

ompwait

OpenMP ランタイムが同期を待っている時間 

同期遅延メトリックス 

sync

同期待ち時間 

 

syncn

同期待ち回数 

MPI トレースメトリックス 

mpitime

MPI 呼び出しに費やされた時間 

 

mpisend

開始された MPI ポイントツーポイント送信数 

 

mpibytessent

MPI で送信されるバイト数 

 

mpireceive

完了した MPI ポイントツーポイント受信数 

 

mpibytesrecv

MPI で受信されるバイト数 

 

mpiother

その他の MPI 関数の呼び出し数 

メモリー割り当てメトリックス 

alloc

割り当て数 

 

balloc

割り当てバイト数 

 

leak

リーク数 

 

bleak

リークバイト数 

ハードウェアカウンタオーバーフローのメトリックス 

cycles

CPU サイクル 

 

insts

発行された命令 

スレッドアナライザのメトリックス 

raccesses

データ競合のアクセス 

 

deadlocks

デッドロック 

表 5–3 に示した名前文字列のほかに、2 つの名前文字列をデフォルトのメトリックスリスト内でのみ使用できます。この 2 つの文字列は、任意のハードウェアカウンタ名に一致する hwc と、任意のメトリック名文字列に一致する any です。また、cyclesinsts は、SPARC プラットフォームと x86 プラットフォームに共通のものですが、それ以外のアーキテクチャー固有のフレーバーも存在します。使用可能なすべてのカウンタを一覧表示するには、引数を指定せずに collect コマンドを使用します。

読み込んだ実験から使用可能なメトリックスを確認するには、metric_list コマンドを使用します。

関数リストを制御するコマンド

ここでは、関数情報の表示を制御するコマンドを説明します。

functions

現在選択されているメトリックスとともに関数リストを書き込みます。関数リストには、関数を表示するために選択されたロードオブジェクトに含まれているすべての関数、および object_select コマンドで非表示にされた関数を持つロードオブジェクトが含まれます。

書き込む行数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。

出力されるデフォルトのメトリックスは、排他的および包括的ユーザー CPU 時間で、秒数および全プログラムのメトリックの割合 (百分率) で示されます。表示する現行メトリックスを変更するには、metrics コマンドを使用します。これは、functions コマンドを発行する前に行う必要があります。また、.er.rc ファイル内の dmetrics コマンドを使用して、デフォルト値を変更することもできます。

Java プログラミング言語で書かれたアプリケーションの場合、表示される関数情報は表示モードがユーザー、上級、マシンのどれに設定されているかによって異なります。

3 つのモードすべてにおいて、データは、Java ターゲットによって呼び出された C、C++、または Fortran コードの通常の方法で報告されます。

metrics metric_spec

関数リストに表示するメトリックスを指定します。metric_spec には、キーワードの default (デフォルトのメトリック選択を復元します) またはコロンで区切ったメトリックキーワードのリストを指定できます。次に、メトリックリストの指定例を示します。


% metrics i.user:i%user:e.user:e%user

このコマンドを入力すると、er_print ユーティリティーは次のメトリックスを表示します。

デフォルトでは、「デフォルト値を設定するコマンド」の説明のように、.er.rc ファイルから処理された dmetrics コマンドに基づいたメトリック設定が使用されます。metrics コマンドで明示的に metric_specdefault に設定した場合は、記録するデータに適したデフォルト設定が復元されます。

メトリックスがリセットされると、新しいリスト内でデフォルトのソートメトリックが設定されます。

metric_spec を省略した場合は、現在のメトリックスの設定が表示されます。

metrics コマンドは、関数リスト用のメトリックスを設定するほか、呼び出し元 - 呼び出し先のメトリックスと、データ派生出力のメトリックスを同じ設定値に設定します。

metrics コマンドが処理されると、現在有効なメトリックを示すメッセージが表示されます。前述の例では、メッセージは次のようになります。


current: i.user:i%user:e.user:e%user:name

メトリックリストの構文については、「メトリックリスト」を参照してください。指定可能なメトリックスを一覧表示するには、metric_list コマンドを使用します。

metrics コマンドに誤りがあった場合、そのコマンドは警告とともに無視され、以前の設定が引き続き有効になります。

sort metric_spec

関数リストを metric_spec でソートします。メトリック名の中の visibility は、ソート順序に影響を及ぼしません。複数のメトリックが metric_spec の中で指定されている場合は、表示可能な最初のものが使用されます。指定されたメトリックスに表示可能なものがない場合は、コマンドが無視されます。metric_spec の前に負符号 (-) を付加することにより、逆順のソートを指定できます。

デフォルトでは、「デフォルト値を設定するコマンド」の説明のように、.er.rc ファイルから処理された dsort コマンドに基づいたメトリックソート設定が使用されます。sort コマンドで明示的に metric_specdefault に設定した場合は、デフォルトの設定が使用されます。

文字列 metric_spec は、「メトリックリスト」に示すメトリックキーワードのいずれか 1 つです。


% sort i.user

このコマンドは、er_print ユーティリティーに、関数リストを包括的ユーザー CPU 時間によってソートするよう指示します。指定したメトリックが読み込まれた実験に含まれていない場合は、警告メッセージが表示され、コマンドは無視されます。コマンドが終了すると、ソート基準メトリックが表示されます。

fsummary

関数リスト内の各関数について、概要パネルを出力します。出力するパネル数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。

概要メトリックスパネルには、関数またはロードオブジェクトの名前、アドレス、およびサイズのほか、関数についてはソースファイル、オブジェクトファイル、およびロードオブジェクトの名前、ならびに選択された関数やロードオブジェクトについて記録された排他的メトリックスと包括的メトリックスの値と百分率が表示されます。

fsingle function_name [N]

指定された関数の概要パネルを出力します。同じ名前を持つ関数が複数存在する場合には、省略可能なパラメータ N が必要です。指定の関数名を持つ N 番目の関数について、概要メトリックスパネルが出力されます。コマンド行でコマンドを入力する場合、N を必ず指定する必要があります。不要な場合は無視されます。N が必要であるときに N を使用しないでコマンドを対話的に入力すると、対応する N 値を持つ関数のリストが出力されます。

関数の概要メトリックスについては、fsummary コマンドの解説を参照してください。

呼び出し元 - 呼び出し先リストを管理するコマンド

ここでは、呼び出し元と呼び出し先の情報の表示を制御するコマンドを説明します。

callers-callees

それぞれの関数の呼び出し元 - 呼び出し先パネルを、関数ソートメトリック (sort) で指定された順序で出力します。

各呼び出し元 - 呼び出し先レポート内では、呼び出し元 - 呼び出し先のソートメトリックス (csort) に従って呼び出し元と呼び出し先がソートされます。出力するパネル数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。選択されている関数 (中央の関数) は、次のようにアスタリスクで示されます。


Attr.     Excl.     Incl.      Name
User CPU  User CPU  User CPU
 sec.      sec.       sec.
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_agpf_b を呼び出します。

csingle function_name [N]

指定された関数の呼び出し元 - 呼び出し先パネルを出力します。同じ名前を持つ関数が複数存在する場合には、省略可能なパラメータ N が必要です。指定の関数名を持つ N 番目の関数について、呼び出し元 - 呼び出し先パネルが出力されます。コマンド行でコマンドを入力する場合、N を必ず指定する必要があります。不要な場合は無視されます。N が必要であるときに N を使用しないでコマンドを対話的に入力すると、対応する N 値を持つ関数のリストが出力されます。

cprepend function-name [N | ADDR]

呼び出しスタックを構築する際、現在の呼び出しスタックフラグメントの先頭に名前付き関数を追加します。関数名があいまいな場合、オプションパラメータが必要になります。パラメータの指定方法についての詳細は、source|src { filename | function_name } [ N]を参照してください。

cappend function-name [N | ADDR]

呼び出しスタックを構築する際、現在の呼び出しスタックフラグメントの末尾に名前付き関数を追加します。関数名があいまいな場合、オプションパラメータが必要になります。パラメータの指定方法についての詳細は、source|src { filename | function_name } [ N]を参照してください。

crmfirst

呼び出しスタックを構築する際、呼び出しスタックセグメントから最初のフレームを削除します。

crmlast

呼び出しスタックを構築する際、呼び出しスタックセグメントから最後のフレームを削除します。

呼び出しツリーリストを制御するコマンド

ここでは、呼び出しツリー用のコマンドについて説明します。

calltree

実験から動的コールグラフを表示します。各レベルに履歴メトリックスが表示されます。

リークリストと割り当てリストを管理するコマンド

ここでは、メモリーの割り当てと割り当て解除に関するコマンドについて説明します。

leaks

共通呼び出しスタックによって集計されたメモリーリークのリストを表示します。各エントリは、リーク総数、および指定の呼び出しスタックでリークした総バイト数を示します。このリストは、リークしたバイト数を基準としてソートされます。

allocs

共通呼び出しスタックによって集計されたメモリー割り当てのリストを表示します。各エントリは、割り当ての数、および指定の呼び出しスタックに割り当てられた総バイト数を示します。このリストは、割り当てられたバイト数を基準としてソートされます。

ソースリストと逆アセンブリリストを管理するコマンド

ここでは、注釈付きソースおよび逆アセンブリコードの表示を制御するコマンドを説明します。

pcs

現在のソートメトリックで整列されたプログラムカウンタ (Program Counter、PC) と、そのメトリックスのリストを出力します。このリストには、object_select コマンドで関数を非表示にした各ロードオブジェクトのメトリックスを集計した行が含まれています。

psummary

PC リスト内の各 PC の概要メトリックスパネルを現在のソートメトリックスで指定された順序で出力します。

lines

現在のソートメトリックで整列されたソース行と、そのメトリックスのリストを出力します。このリストには、行番号情報を持っていない各関数またはソースファイルが未知である各関数のメトリックスを集計した行と、object_select コマンドで関数を非表示している各ロードオブジェクトのメトリックスを集計した行が含まれています。

lsummary

行リスト内の各行の概要メトリックスパネルを現在のソートメトリックで指定された順序で出力します。

source|src { filename | function_name } [ N]

指定したファイル、または指定した関数を含むファイルの注釈付きソースコードを出力します。いずれの場合も、指定したファイルはパスの通っているディレクトリに存在する必要があります。ソースが GNU Fortran コンパイラでコンパイルされている場合は、ソースに表示されるように、関数名のあとにアンダースコアを 2 つ追加する必要があります。

省略可能なパラメータ N (正の整数) は、ファイル名または関数名があいまいでない場合にだけ使用します。このパラメータを指定した場合は、N 番目の候補が使用されます。番号指定のないあいまいな名前が指定された場合、er_print ユーティリティーはオブジェクトファイル名の候補のリストを表示します。指定された名前が関数の場合は、その関数名がオブジェクトファイル名に追加され、そのオブジェクトファイルの N の値を表す番号も出力されます。

関数名は function"file" としても指定できます。この場合、file は、関数の代替ソースコンテキストを指定するために使用されます。最初の命令の直後にその関数のインデックス行が追加されます。インデックス行は、次の書式で山括弧内にテキストとして表示されます。

<Function: f_name>

関数のデフォルトソースコンテキストは、その関数の最初の命令が帰するソースファイルとして定義されます。これは通常、関数を含むオブジェクトモジュールを生成するためにコンパイルされたソースファイルです。代替ソースコンテキストは、関数に属する命令を含むほかのファイルから構成されます。このようなコンテキストには、インクルードファイルの命令と、指定の関数にインライン化された関数の命令が含まれます。代替のソースコンテキストが存在する場合、デフォルトのソースコンテキストの冒頭に、代替ソースコンテキストが置かれている場所を示す拡張インデックス行のリストを次の形式で組み込みます。

<Function: f, instructions from source file src.h>


注 –

コマンド行から er_print ユーティリティーを起動するときに -source 引数を使用する場合は、file の引用符の前にバックスラッシュのエスケープ文字を付加する必要があります。つまり、関数名の形式は、function\"file\" となります。er_print ユーティリティーが対話モードにあるときは、バックスラッシュは不要です。使用しないでください。


通常、デフォルトのソースコンテキストが使用された場合は、そのファイルに入っているすべての関数についてメトリックスが表示されます。ファイルを明示的に指定した場合は、指定した関数についてのみ、メトリックスが表示されます。

disasm|dis { filename | function_name } [ N]

指定したファイル、または指定した関数を含むファイルの注釈付き逆アセンブリコードを出力します。指定したファイルは、パスの通っているディレクトリに存在する必要があります。

省略可能なパラメータ N の意味は、source コマンドと同じです。

scc com_spec

注釈付きソースのリストに含めるコンパイラのコメントクラスを指定します。クラスリストはコロンで区切ったクラスのリストであり、次のメッセージクラスがゼロ個以上含まれています。

表 5–4 コンパイルコメントメッセージクラス

クラス 

意味  

b[asic]

基本的なレベルのメッセージを表示します。 

v[ersion]

ソースファイル名、最終修正日付、コンパイラコンポーネントのバージョン、コンパイル日付とオプションなどのバージョンメッセージを表示します。 

pa[rallel]

並列化に関するメッセージを表示します。 

q[uery]

最適化に影響するコードに関する問い合わせメッセージを表示します。 

l[oop]

ループの最適化と変換に関するメッセージを表示します。 

pi[pe]

ループのパイプライン化に関するメッセージを表示します。 

i[nline]

関数のインライン化に関するメッセージを表示します。 

m[emops]

ロード、ストア、プリフェッチなどのメモリー操作に関するメッセージを表示します。 

f[e]

フロントエンドのメッセージを表示します。 

co[degen]

コードジェネレータのメッセージを表示します。 

cf

ソースの下部にコンパイラのフラグを表示します。 

all

すべてのメッセージを表示します。 

none

メッセージを表示しません。 

all および none クラスは常に単独で指定します。

scc コマンドを省略した場合は、basic がデフォルトのクラスになります。class-list が空の状態で scc コマンドを入力した場合、コンパイラのコメントは出力されません。通常、scc コマンドは、.er.rc ファイルでのみ使用します。

sthresh value

注釈付きソースコードでのメトリックスの強調表示に使用するしきい値の百分率を指定します。ファイル内のソース行で、メトリック値が、そのメトリックの最大値の value % 以上である場合、そのメトリックが発生する行の先頭に ## が挿入されます。

dcc com_spec

注釈付き逆アセンブリリストに含めるコンパイラのコメントクラスを指定します。クラスリストは、コロンで区切られたクラスのリストです。利用可能なクラスのリストは、表 5–4に示す注釈付きソースコードリストのクラスリストと同じです。クラスリストには、次のオプションを追加できます。

表 5–5 dcc コマンドの追加オプション

オプション 

意味  

h[ex]

命令の 16 進値を示します。 

noh[ex]

命令の 16 進値を示しません。 

s[rc]

ソースリストと注釈付き逆アセンブリリストをインタリーブします。 

nos[rc]

ソースリストと注釈付き逆アセンブリリストをインタリーブしません。 

as[rc]

注釈付きソースコードと注釈付き逆アセンブリリストをインタリーブします。 

dthresh value

注釈付き逆アセンブリコードでのメトリックスの強調表示に使用するしきい値の百分率を指定します。ファイル内の命令行で、メトリック値が、そのメトリックの最大値の value % 以上である場合、そのメトリックが発生する行の先頭に ## が挿入されます。

cc com_spec

注釈付きのソースと逆アセンブリリストに含めるコンパイラのコメントクラスを指定します。クラスリストは、コロンで区切られたクラスのリストです。利用可能なクラスのリストは、表 5–4 に示す注釈付きソースコードリストのクラスリストと同じです。

setpath path_list

ソースファイルやオブジェクトファイルの検索に使用するパスを設定します。path_list は、コロンで区切られたディレクトリのリストです。ディレクトリ名にコロン文字がある場合は、バックスラッシュでコロンをエスケープします。特別なディレクトリ名 $expts は、現在の実験を読み込まれた順序で示します。これは、$ の 1 文字に短縮できます。

デフォルトの設定は、$expts:.. です。現在のパス設定の検索時にファイルが見つからなかった場合は、コンパイルされているフルパス名が使用されます。

引数のない setpath は、現在のパスを出力します。

addpath path_list

現在の setpath の設定に path_list を付加します。

pathmap old-prefix new-prefix

addpath または setpath で設定された path_list を使用してファイルが見つからなかった場合、pathmap コマンドを使用して、1 つまたは複数のパスの再マッピングを指定できます。ソースファイル、オブジェクトファイル、または共有オブジェクトのパス名が old-prefix で指定した接頭辞で始まる場合、古い接頭辞は new-prefix で指定した接頭辞に置き換えられます。結果のパスは、ファイルの検索に使用されます。複数の pathmap コマンドが提供されており、それぞれが、ファイルが見つかるまで試行されます。

ハードウェアカウンタデータ空間およびメモリーオブジェクトリストを制御するコマンド

ハードウェアカウンタプロファイリングおよびデータ空間プロファイリングにより収集される実験については、次のオブジェクトに関連するメトリックスを表示できます。

このデータは、SPARC アーキテクチャーの -xhwcprof コンパイラオプションでコンパイルされた Solaris オブジェクトでのみ収集できます。

これらのデータの種類についての詳細は、「ハードウェアカウンタオーバーフローのプロファイルデータ」を参照してください。ハードウェアカウンタオーバーフロープロファイリングの実行時に使用されるコマンド行については、-h counter_definition_1...[, counter_definition_n]を参照してください。

-xhwcprof オプションについては、『Oracle Solaris Studio 12.2: Fortran ユーザーズガイド』『Oracle Solaris Studio 12.2: C ユーザーガイド』、または『Oracle Solaris Studio 12.2: C++ ユーザーズガイド』を参照してください。

data_objects

データオブジェクトのリストを、それらのメトリックスとともに書き込みます。

data_single name [N]

指定されたデータオブジェクトの概要メトリックスパネルを書き込みます。オブジェクト名があいまいな場合には、省略可能なパラメータ N が必要です。指令がコマンド行にある場合には N は必要です。不要な場合は無視されます。

data_layout

データ派生メトリックデータを持つすべてのプログラミングデータオブジェクトについて、注釈付きのデータオブジェクトレイアウトを書き込みます。データは、各構造をひとまとめにして、現在のデータソートメトリック値によってソートされます。集合体データオブジェクトごとに、そのオブジェクトに加算される合計メトリックスが表示され、そのあとに、そのオブジェクトのすべての要素がオフセット順に表示されます。各要素には、そのメトリックスと、32 バイトブロックを基準にしたそのサイズと位置を示す情報が表示されます。

memobj mobj_type

所定のタイプのメモリーオブジェクトと現在のメトリックスのリストを出力します。メトリックスはデータ空間のリストとして、ソートされ表示されます。名前 mobj_type を直接、コマンドとして使用することもできます。

mobj_list

memobj コマンド内で mobj_type に使用する、既知のタイプのメモリーオブジェクトのリストを出力します。

mobj_define mobj_type index_exp

新しいタイプのメモリーオブジェクトを、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 indxobj_type

所定のタイプのインデックスオブジェクトとそのメトリックスのリストを出力します。インデックスオブジェクトのメトリックスとソートは、排他的メトリックスだけが含まれる点を除き、関数リストと同じです。名前 indxobj_type を直接、コマンドとして使用することもできます。

indxobj_list

indxobj コマンド内で indxobj_type に使用する、既知のタイプのインデックスオブジェクトのリストを書き込みます。

indxobj_define indxobj_type index_exp

新しいタイプのインデックスオブジェクトを、index_exp で指定されたオブジェクトへのパケットのマッピングを使用して定義します。式の構文については、「式の文法」に説明があります。

indxobj_type は、定義済みであってはいけません。その名前は、大文字と小文字が区別され、すべて英数字または「_」文字で構成されている必要があり、1 文字目は英字である必要があります。

index_exp の構文が正しくなかった場合は、エラーが返され、定義が無視されます。index_exp に空白文字が含まれる場合は、二重引用符 (") で囲む必要があります。

<Unknown> インデックスオブジェクトのインデックスは -1 です。また、新しいインデックスオブジェクトを定義するために使用する式は、<Unknown> の認識をサポートしている必要があります。

たとえば、仮想 PC また物理 PC に基づくインデックスオブジェクトの場合、式は次の形式になっている必要があります。


VIRTPC>0?VIRTPC:-1

OpenMP インデックスオブジェクトのコマンド

次のコマンドを使用して、OpenMP インデックスオブジェクトの情報を出力できます。

OMP_preg

実験で実行された OpenMP 並列領域とそれぞれのメトリックスのリストを出力します。このコマンドは、OpenMP 3.0 のパフォーマンスデータを使用した実験にのみ使用できます。

OMP_task

実験で実行された OpenMP タスクとそれぞれのメトリックスのリストを出力します。このコマンドは、OpenMP 3.0 のパフォーマンスデータを使用した実験にのみ使用できます。

スレッドアナライザ対応コマンド

次のコマンドはスレッドアナライザに対応しています。獲得されるデータや表示されるデータについての詳細は、『Oracle Solaris Studio 12.2: スレッドアナライザユーザーズガイド』を参照してください。

races

実験におけるすべてのデータ競合リストを書き出します。データ競合レポートは、データ競合検出データを使用した実験でのみ利用できます。

rdetail race_id

指定された race_id の詳細情報を書き出します。race_idall に設定した場合は、すべてのデータ競合の詳細情報が表示されます。データ競合レポートは、データ競合検出データのある実験からのみ取得できます。

deadlocks

実験で検出されたすべての実際のデッドロックと潜在的なデッドロックのリストを書き出します。デッドロックレポートは、デッドロック検出データを使用した実験でのみ利用できます。

ddetail deadlock_id

指定された deadlock_id の詳細情報を書き出します。deadlock_idall に設定した場合は、すべてのデッドロックの詳細情報が表示されます。デッドロックレポートは、デッドロック検出データを使用した実験でのみ利用できます。

実験、標本、スレッド、および LWP を一覧表示するコマンド

ここでは、実験、標本、スレッド、および LWP を一覧表示するコマンドについて説明します。

experiment_list

読み込まれている実験をそれぞれの ID 番号とともにすべて一覧表示します。各実験は、標本、スレッド、または LWP を選択する際に使用されるインデックス、および拡張フィルタリングに使用できる PID とともに一覧表示されます。

次に、実験リストの例を示します。


(er_print) experiment_list
ID Experiment
== ==========
1 test.1.er
2 test.6.er

sample_list

解析の対象として現在選択されている標本の一覧を表示します。

次に、標本リストの例を示します。


(er_print) sample_list
Exp Sel     Total
=== ======= =====
  1 1-6        31
  2 7-10,15    31

lwp_list

解析の対象として現在選択されている LWP の一覧を表示します。

thread_list

解析の対象として現在選択されているスレッドの一覧を表示します。

cpu_list

解析の対象として現在選択されている CPU の一覧を表示します。

実験データのフィルタリングを制御するコマンド

実験データのフィルタリングは、次の 2 つの方法で指定できます。

フィルタ式の指定

フィルタ式は filters コマンドで指定できます。

filters filter_exp

filter_exp は式であり、この式が真と評価されたデータレコードは含まれ、偽と評価されたデータレコードは含まれません。式の文法については、「式の文法」に説明があります。

フィルタ式のオペランドトークンの一覧表示

実験のフィルタ式で使用できるオペランドを一覧表示できます。

describe

フィルタ式の構築に使用できるトークンのリストを出力します。フィルタ式の一部のトークンと文法については、「式の文法」を参照してください。

フィルタリング用の標本、スレッド、LWP、および CPU の選択

選択リスト

次に、選択の構文の例を示します。この構文はコマンドの説明で使用されます。


[experiment-list:]selection-list[+[
experiment-list:]selection-list … ]

各選択リストの前には、空白なしの 1 つのコロンで区切って実験リストを指定できます。選択リストを正符号 (+) で結合して、複数の選択を指定することもできます。

実験リストと選択リストの構文は同じで、次の例に示すように、キーワード all、または空白なしのコンマで区切った番号または番号の範囲 (n-m) のリストを指定できます。


2,4,9-11,23-32,38,40

実験番号は experiment_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、標本、スレッド) のすべてに適用されます。

sample_select sample_spec

情報を表示する標本を選択します。コマンドが終了すると、選択された標本が一覧表示されます。

lwp_select lwp_spec

情報を表示する LWP を選択します。コマンドが終了すると、選択された LWP が一覧表示されます。

thread_select thread_spec

情報を表示するスレッドを選択します。コマンドが終了すると、選択されたスレッドが一覧表示されます。

cpu_select cpu_spec

情報を表示する CPU を選択します。コマンドが終了すると、選択された CPU が一覧表示されます。

ロードオブジェクトの展開と短縮を制御するコマンド

これらのコマンドは、er_print ユーティティーによるロードオブジェクトの表示方法を決定します。

object_list

すべてのロードオブジェクトの状態と名前を示す 2 列のリストを表示します。最初の列には各ロードオブジェクトの表示/非表示/API の状態が示され、2 番目の列にはオブジェクトの名前が示されます。各ロードオブジェクトの名前の前には、そのオブジェクトの関数が関数リストに表示される (展開される) ことを示す show、そのオブジェクトの関数が関数リストに表示されない (短縮される) ことを示す hide、またはロードオブジェクトへのエントリポイントを表す関数のみが表示される場合は API-only が付きます。短縮されたロードオブジェクトのすべての関数は、そのロードオブジェクト全体を表す関数リスト内の単一の項目へマップされます。

ロードオブジェクトリストの表示例を次に示します。


(er_print) object_list
Sel  Load Object
==== ==================
hide <Unknown>
show <Freeway>
show <libCstd_isa.so.1>
show <libnsl.so.1>
show <libmp.so.2>
show <libc.so.1>
show <libICE.so.6>
show <libSM.so.6>
show <libm.so.1>
show <libCstd.so.1>
show <libX11.so.4>
show <libXext.so.0>
show <libCrun.so.1>
show <libXt.so.4>
show <libXm.so.4>
show <libsocket.so.1>
show <libgen.so.1>
show <libcollector.so>
show <libc_psr.so.1>
show <ld.so.1>
show <liblayout.so.1>

object_show object1,object2,...

すべての名前付きロードオブジェクトを、それらのすべての関数が表示されるように設定します。オブジェクトの名前は、フルパス名またはベース名で指定できます。名前にコンマ文字が含まれている場合は、その名前を二重引用符で囲む必要があります。ロードオブジェクトの名前に「all」という文字列が使用されている場合は、すべてのロードオブジェクトの関数が表示されます。

object_hide object1,object2,...

すべての名前付きロードオブジェクトを、それらのすべての関数が表示されないように設定します。オブジェクトの名前は、フルパス名またはベース名で指定できます。名前にコンマ文字が含まれている場合は、その名前を二重引用符で囲む必要があります。ロードオブジェクトの名前に「all」という文字列が使用されている場合は、すべてのロードオブジェクトの関数が表示されます。

object_api object1,object2,...

すべての名前付きロードオブジェクトを、ライブラリへのエントリポイントを表す関数のみがすべて表示されるように設定します。オブジェクトの名前は、フルパス名またはベース名で指定できます。名前にコンマ文字が含まれている場合は、その名前を二重引用符で囲む必要があります。ロードオブジェクトの名前に「all」という文字列が使用されている場合は、すべてのロードオブジェクトの関数が表示されます。

objects_default

すべてのロードオブジェクトを、.er.rc に設定されている初期デフォルト値にしたがいます。

object_select object1,object2,...

関数の情報を表示するロードオブジェクトを選択します。すべての名前付きロードオブジェクトの関数が表示され、その他すべてのロードオブジェクトの関数は表示されません。object-list は、空白なしのコンマで区切ったロードオブジェクトのリストです。ロードオブジェクトの関数が表示される場合、ゼロではないメトリックスを保持するすべての関数が関数リストに表示されます。ロードオブジェクトの関数が表示されない場合、そのオブジェクトの関数は短縮され、そのロードオブジェクト全体のメトリックスが入った単一の行が表示され、個々の関数は表示されません。

ロードオブジェクト名は、フルパス名またはベース名で指定します。オブジェクト名そのものにコンマが含まれている場合は、名前を二重引用符で囲む必要があります。

メトリックスを一覧するコマンド

ここでは、現在選択されているメトリックスと使用可能なメトリックキーワードを一覧表示するコマンドを説明します。

metric_list

関数リストで現在選択されているメトリックスと、関数リスト内のさまざまな種類のメトリックスを参照する際にほかのコマンド (metricssort など) で使用可能なメトリックキーワードの一覧を表示します。

cmetric_list

現在選択されている呼び出し元 - 呼び出し先メトリックス、および呼び出し元 - 呼び出し先レポートのメトリックスとキーワード名のリストを表示します。metric_list 出力と同じ方法でリストを表示しますが、属性メトリックスも含みます。

data_metric_list

現在選択されているデータ派生メトリックス、およびすべてのデータ派生レポートのメトリックスとキーワード名のリストを表示します。metric_list コマンドの出力と同じ方法でリストを表示しますが、データ派生フレーバーを持つメトリックスと静的メトリックスだけを含めます。

indx_metric_list

現在選択されているインデックスオブジェクトメトリックス、およびすべてのインデックスオブジェクトレポートのメトリックスとキーワード名のリストを表示します。metric_list コマンドと同じ方法でリストを表示しますが、排他的フレーバーを持つメトリックスと静的メトリックスだけを含めます。

出力を制御するコマンド

ここでは、er_print の出力を制御するコマンドを説明します。

outfile { filename | - }

開いている出力ファイルを閉じ、以降の出力先として filename を開きます。filename を開くときに、既存のコンテンツを消去します。filename の代わりにハイフン (-) を指定した場合は、標準出力に出力されます。filename の代わりに 2 つのハイフン (--) を指定した場合は標準エラーへ出力されます。

appendfile filename

開いている出力ファイルを閉じ、filename を開きます。その際、既存のコンテンツがあれば残し、後続の出力がファイルの末尾に付加されるようにします。filename が存在しない場合、appendfile コマンドの機能は outfile コマンドと同じです。

limit n

出力をレポートの最初の n 個のエントリに制限します。n は符号なしの正の整数です。

name { long | short } [ :{ shared_object_name | no_shared_object_name } ]

長短どちらの形式の関数名を使用するかを指定します (C++ および Java のみ)。shared_object_name が指定された場合は、関数名に共有オブジェクト名を付加します。

viewmode { user| expert | machine }

モードを次のいずれかに設定します。

user (ユーザー)

Java 実験の場合は、Java スレッドの Java 呼び出しスタックを表示し、ハウスキーピングスレッドを表示しません。関数リストには、Java 以外のスレッドからの集計時間を表す関数 <JVM-System> が含まれます。JVM ソフトウェアが Java 呼び出しスタックを報告しない場合、時間は関数 <no Java callstack recorded> に報告されます。

OpenMP 実験の場合は、OpenMP を使用せずにプログラムがコンパイルされたときに取得されたものと同様の、再構築された呼び出しスタックが表示されます。また、OpenMP ランタイムが特定の操作を実行しているときは、<OMP-*> という形式の名前を持つ特殊関数を追加します。

expert (上級)

Java 実験の場合は、ユーザーの Java コードの実行中には Java スレッドの Java 呼び出しスタックを表示し、JVM コードの実行中または JVM ソフトウェアが Java 呼び出しスタックを報告しないときにはマシン呼び出しスタックを表示します。ハウスキーピングスレッドについてはマシン呼び出しスタックを表示します。

OpenMP 実験の場合は、コンパイラによって生成された関数を表示します。これらの関数は、ユーザー関数によってユーザーモードで集計される、並列化されたループやタスクなどを表します。また、OpenMP ランタイムが特定の操作を実行しているときは、<OMP-*> という形式の名前を持つ特殊関数を追加します。

machine (マシン)

Java 実験と OpenMP 実験の場合は、すべてのスレッドのマシン呼び出しスタックを表示します。

Java 実験と OpenMP 実験を除くすべての実験の場合は、3 つのモードすべてに同じデータを表示します。

compare { on | off }

比較モードをオンまたはオフに設定します。デフォルトでは、値はオフなので、同じ実行可能ファイルの複数の実験が読み込まれると、そのデータは集計されます。.er.rc ファイルで compare on と設定して比較モードを有効にした状態で、同じ実行可能ファイルの複数の実験が読み込まれると、各実験データについて、メトリックスが別々の列に表示されます。er_print compare コマンドを使って、実験を比較することもできます。

比較モードでは、実験または実験グループのデータは、「関数」リスト、「呼び出し元 - 呼び出し先」リスト、「ソース」リスト、および「逆アセンブリ」リストで、隣接列に表示されます。列は、実験または実験グループの読み込み順に表示され、追加のヘッダー行に実験名または実験グループ名が示されます。

その他の情報を出力するコマンド

次の er_print サブコマンドは、実験についてのその他の情報を表示します。

header exp_id

指定した実験に関する説明情報を表示します。exp_id は、exp_list コマンドを使用して取得することができます。exp_id として all を指定するか、exp_id を省略した場合は、読み込まれた実験すべての情報が表示されます。

エラーや警告が発生した場合には、各ヘッダーのあとに表示されます。各実験のヘッダーは、ハイフン (-) で区切られます。

実験ディレクトリに notes という名前のファイルがある場合は、このファイルの内容がヘッダー情報の先頭に付加されます。notes ファイルは、collect コマンドに -C "comment" 引数を付けて、手動で追加、編集、または指定できます。

exp_id はコマンド行では必要ですが、スクリプトや対話モードでは不要です。

ifreq

測定されたカウントデータから命令頻度のリストを書き込みます。命令頻度のレポートは、カウントデータからのみ生成できます。このコマンドは、Solaris OS を実行している SPARC プロセッサだけが対象です。

objects

パフォーマンス解析の目的でロードオブジェクトを使用した結果として生じるエラーメッセージや警告メッセージのないロードオブジェクトを一覧表示します。表示されるロードオブジェクトの数は、limit コマンドを使用して制限できます (「出力を制御するコマンド」を参照)。

overview exp_id

指定した実験の標本のうち、現在選択されている各標本の標本データを書き出します。exp_id は、exp_list コマンドを使用して取得することができます。exp_id として all を指定するか、または exp_id を省略した場合、すべての実験の標本データが表示されます。exp_id はコマンド行では必要ですが、スクリプトや対話モードでは不要です。

statistics exp_id

指定した実験の現在の標本セット全体にわたって集計された実行統計情報を書き出します。実行統計値の定義と意味については、getrusage(3C) と proc(4) のマニュアルページを参照してください。実行統計には、コレクタがデータをまったく収集しないシステムスレッドからの統計が含まれます。

exp_id は、experiment_list コマンドを使用して取得することができます。exp_id が指定されていない場合、各実験の標本セットを対象に集計された、すべての実験のデータの合計が表示されます。exp_idall である場合、各実験の合計と個々の統計が表示されます。

デフォルト値を設定するコマンド

.er.rc ファイルで次のコマンドを使用して、er_printer_src、およびパフォーマンスアナライザのデフォルト値を設定できます。これらのコマンドはデフォルト値を設定する目的でのみ使用できます。er_print ユーティリティーの入力として使用することはできません。これらのコマンドは、.er.rc という名前のデフォルト値ファイルにのみ組み込むことができます。パフォーマンスアナライザのデフォルト値にのみ適用できるコマンドについては、「パフォーマンスアナライザにのみデフォルト値を設定するコマンド」に説明があります。アナライザによる .er.rc ファイルの使用方法については、「アナライザのデフォルト設定」を参照してください。

.er.rc デフォルト値ファイルは、すべての実験のデフォルト値を設定するためにホームディレクトリに置くか、デフォルト値をローカルに設定するためにそれ以外のディレクトリに置くことができます。er_print ユーティリティー、 er_src ユーティリティー、パフォーマンスアナライザのいずれかを起動すると、現在のディレクトリとユーザーのホームディレクトリに .er.rc ファイルがあるかどうかが調べられ、存在する場合は、システムのデフォルト値ファイルとともに、そのファイルが読み取られます。ホームディレクトリの .er.rc ファイル内のデフォルト値はシステムのデフォルト値よりも優先され、現在のディレクトリの .er.rc ファイル内のデフォルト値は、ユーザーのホームおよびシステムのデフォルト値よりも優先されます。


注 –

実験が格納されているディレクトリからデフォルト値ファイルを読み取るには、そのディレクトリからパフォーマンスアナライザまたは er_print ユーティリティーを起動する必要があります。


デフォルト値ファイルには、scc sthreshdccdthresh ccsetpathaddpathpathmapnamemobj_defineobject_showobject_hideobject_api indxobj_definetabsrtabsviewmode の各コマンドを含めることもできます。dmetricsdsortaddpathpathmapmobj_defineindxobj_define の各コマンドは、1 つのデフォルト値ファイルに複数含めることができ、その場合、すべての .er.rc ファイル内のコマンドが連結されます。それ以外のすべてのコマンドの場合は、最初に出現するものが使用され、それ以後のものは無視されます。

dmetrics metric_spec

関数リストに表示または印刷するデフォルトのメトリックスを指定します。メトリックリストの構文と使用方法については、「メトリックリスト」で説明しています。メトリックスが出力される順序とアナライザの「メトリック」ダイアログボックスに表示されるメトリックの順序は、このリスト内のメトリックキーワードの順序によって決まります。

呼び出し元 - 呼び出し先リストのデフォルトのメトリックスは、このリスト内の各メトリック名の最初の名前の前に対応する属性メトリックを追加することによって得られます。

dsort metric_spec

関数リストの内容をソートするときの基準として、デフォルトで使用するメトリックを指定します。ソート基準メトリックは、このリスト内で、読み込まれている実験内のメトリックと一致する最初のメトリックです。このとき、次の条件が適用されます。

メトリックリストの構文と使用方法については、「メトリックリスト」で説明しています。

呼び出し元 - 呼び出し先リストのデフォルトソート基準メトリックは、関数リストのデフォルトソート基準メトリックに対応する属性メトリックです。

en_desc { on | off | =regexp }

派生実験を読み取るためのモードを on (すべての派生実験を有効にする) か off (すべての派生実験を無効にする) に設定します。=regexp を使用した場合、系統または実行可能ファイル名が正規表現と一致する実験のデータが有効になります。デフォルト設定は on で、すべての派生を追跡します。

パフォーマンスアナライザにのみデフォルト値を設定するコマンド

.er.rc ファイルで次のコマンドを使用して、パフォーマンスアナライザのデフォルト値を追加できます。

tabs tab_spec

アナライザで表示可能にするタブのデフォルトセットを設定します。各タブは、対応するレポートを生成する er_print コマンドによって指定されます。たとえば、メモリーオブジェクトのタブの場合は mobj_type、インデックスオブジェクトのタブの場合は indxobj_type になります。mpi_timeline は「MPI タイムライン」タブを、mpi_chart は「MPI グラフ」タブを、timeline は「タイムライン」タブを、headers は「実験」タブを指定します。

読み込まれた実験内のデータがサポートするタブだけが表示されます。

rtabs tab_spec

スレッドアナライザの実験を確認するために tha コマンドでアナライザを起動したときに表示可能にするタブのデフォルトセットを設定します。読み込まれた実験内のデータがサポートするタブだけが表示されます。

tlmode tl_mode

パフォーマンスアナライザの「タイムライン」タブの表示モードオプションを設定します。オプションのリストは、コロン区切りのリストです。使用できるオプションを次の表に示します。

表 5–6 タイムラインの表示モードのオプション

オプション 

意味  

lw[p]

LWP のイベントを表示する 

t[hread]

スレッドのイベントを表示する 

c[pu]

CPU のイベントを表示する 

r[oot]

ルートで呼び出しスタックを配置する 

le[af]

リーフで呼び出しスタックを配置する 

d[epth] nn

表示できる呼び出しスタックの最大深さを設定する 

lwpthreadcpu の各オプションは相互排他的です。rootleaf も相互排他的です。相互排他オプションの複数のセットをリストに含めた場合、最後のオプションだけが使用されます。

tldata tl_data

パフォーマンスアナライザの「タイムライン」タブに表示されるデフォルトのデータの種類を選択します。種類リストの種類はコロンで区切られます。使用できるタイプを次の表に示します。

表 5–7 タイムラインに表示するデータの種類

種類 

意味  

sa[mple]

標本データを表示する 

c[lock]

時間プロファイルデータを表示する 

hw[c]

ハードウェアカウンタプロファイルデータを表示する 

sy[nctrace]

スレッド同期トレースデータを表示する 

mp[itrace]

MPI トレースデータを表示する 

he[aptrace]

ヒープトレースデータを表示する 

その他のコマンド

次のコマンドにより、er_print ユーティリティーでさまざまなタスクが実行されます。

procstats

処理データから蓄積された統計を出力します。

script file

file に指定したスクリプトファイル内の追加コマンドを処理します。

version

現在の er_print ユーティリティーのバージョン情報を出力します。

quit

現在のスクリプトの処理を打ち切るか、対話モードを終了します。

help

er_print コマンドの一覧を表示します。

式の文法

フィルタを定義する式と、メモリーオブジェクトインデックスを算出するために使用される式には、共通の文法が使用されます。

その文法は、式を演算子とオペランドの組み合わせとして指定します。フィルタの場合は、式が真と評価されるとパケットが包含され、式が偽と評価されるとパケットが除外されます。メモリーオブジェクトまたはインデックスオブジェクトの場合、式は、パケット内で参照される特定のメモリーオブジェクトまたはインデックスオブジェクトを定義するインデックスへと評価されます。

式のオペランドは定数か、データレコード内のフィールドになります。describe コマンドで一覧表示できます。オペランドには、THRIDLWPIDCPUIDUSTACKXSTACKMSTACKLEAFVIRTPCPHYSPCVADDRPADDRDOBJTSTAMPSAMPLEEXPIDPID、またはメモリーオブジェクトの名前が含まれます。オペランドの名前は大文字と小文字が区別されません。

USTACKXSTACK、および MSTACK は、それぞれユーザー表示、上級表示、マシン表示の関数呼び出しスタックを表します。

VIRTPCPHYSPCVADDR、および PADDR は、ハードウェアカウンタプロファイリングまたは時間プロファイリングで「+」が指定された場合のみゼロ以外になります。さらに、VADDR は、実際の仮想アドレスが決定できなかった場合、256 未満になります。VADDR を決定できなかった場合、または、仮想アドレスを物理アドレスにマップできなかった場合、PADDR はゼロになります。同様に、バックトラッキングが失敗した場合、または要求されなかった場合、 VIRTPC はゼロになり、VIRTPC がゼロか、VIRTPC が物理アドレスにマップできなかった場合、PHYSPC はゼロになります。

演算子は、C の表記法と C の優先順位規則に従った通常の論理演算子と算術 (シフトを含む) 演算子、要素が集合に含まれるかどうかを決める演算子 (IN)、要素集合の一部または全部が 1 つの集合に含まれるかどうかを決める演算子 (それぞれ、SOME ININ) のいずれかです。追加の演算子 ORDERED IN は、左側のオペランドの全要素が、右側のオペランドに同じ順序で現れているかどうかを判断するためのものです。IN 演算子は、左側のオペランドの全要素が右側のオペランドに現れることを要求しますが、順序については強制しません。If-then-else 構造は、C のように ? 演算子と : 演算子で指定されます。すべての式が正しく構文解析されるよう、小括弧を使用してください。er_print のコマンド行では、複数の行にまたがって式を分割することはできません。スクリプト内またはコマンド行では、式に空白文字が含まれる場合、その式を二重引用符で囲む必要があります。

フィルタ式はブール値がパケットを包含する場合は真、除外する場合は偽と評価します。スレッド、LWP、CPU、実験 id、プロセス id、および標本のフィルタリングは、適切なキーワードと 1 つの整数を結び付ける関係式、または IN 演算子とコンマで区切った整数リストを使用した関係式に基づいて行われます。

時間フィルタリングを使用するには、TSTAMP と時間を結び付ける 1 つ以上の関係式を指定し、時間は、現在パケットが処理されている実験の開始以降のナノ秒数 (整数) で指定します。標本の時間を取得するには、overview コマンドを使用します。overview コマンドでは時間が秒単位で与えられるため、時間フィルタリングに使用するには、ナノ秒に変換する必要があります。時間は、アナライザの「タイムライン」表示から取得することもできます。

関数フィルタリングは、リーフ関数に基づいて行うか、スタック内の任意の関数に基づいて行うことができます。リーフ関数によるフィルタリングを指定するには、LEAF キーワードと整数の関数 id を結び付ける関係式を使用するか、IN 演算子と構造 FNAME(" regexp") を使用した関係式を使用します。ただし、regexpregexp(5) のマニュアルページで指定されているような正規表現です。現在の name の設定によって指定されている関数全体の名前が一致する必要があります。

呼び出しスタック内の任意の関数に基づいたフィルタリングは、構造 FNAME(“regexp ”) 内の任意の関数が、キーワード USTACK: (FNAME("myfunc") SOME IN USTACK) によって表された関数配列に含まれるかどうかを判定することによって指定されます。

データオブジェクトのフィルタリングは、スタック関数のフィルタリングに似ており、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 を返す必要があります。

フィルタ式の例

ここでは、er_print -filters コマンドまたはアナライザのフィルタダイアログボックスで使用できるフィルタ式の例を示します。

er_print -filters コマンドでは、フィルタ式は、次のように単一引用符で囲まれます。


er_print -filters 'FNAME("myfunc") SOME IN USTACK' -functions test.1.er

例 5–1 名前とスタックによる関数のフィルタリング

ユーザー関数スタックから myfunc という名前の関数をフィルタリングするには、次のようにします。

FNAME("myfunc") SOME IN USTACK



例 5–2 スレッドと CPU によるイベントのフィルタリング

CPU 2 上でのみ実行したスレッド 1 からのイベントを表示するには、次のようにします。

THRID == 1 && CPUID == 2



例 5–3 インデックスオブジェクトによるイベントのフィルタリング

インデックスオブジェクト THRCPUCPUID<<16|THRID として定義されている場合、次のフィルタは、上記の CPU 2 上で実行したスレッド 1 からのイベントを表示する場合のフィルタと等価です。

THRCPU == 0x10002



例 5–4 指定の時間内に発生したイベントのフィルタリング

5 秒と 9 秒の間に発生した実験 2 のイベントをフィルタリングするには、次のようにします。

EXPID==2 && TSTAMP >= 5000000000 && TSTAMP < 9000000000



例 5–5 特定の Java クラスのイベントのフィルタリング

スタック内の特定の Java クラスのメソッドを持つイベントをフィルタリングするには、次のようにします。(ユーザー表示モードの場合)

FNAME("myClass.*") SOME IN USTACK



例 5–6 内部関数 ID と呼び出し順序によるイベントのフィルタリング

関数 ID が既知である (アナライザに表示されている) 場合、マシン呼び出しスタック内の特定の呼び出し順序を含むイベントをフィルタリングするには、次のようにします。

(314,272) ORDERED IN MSTACK



例 5–7 状態または期間によるイベントのフィルタリング

describe コマンドにより、時間プロファイリング実験の次のプロパティが一覧表示された場合は、


MSTATE    UINT32  Thread state
NTICK     UINT32  Duration

次のフィルタを使用して、特定の状態のイベントを選択できます。

MSTATE == 1

または、次のフィルタを使用して、特定の状態にあり、期間が 1 クロック刻みより長いイベントを選択できます。

MSTATE == 1 && NTICK > 1


er_print コマンドの例

ここでは、er_print コマンドの使用例を示します。


例 5–8 関数にかかる時間の概要を表示


er_print -functions test.1.er


例 5–9 呼び出し元 - 呼び出し先関係を表示


er_print -callers-callees test.1.er


例 5–10 ホットなソース行を表示

ソース行情報は、コードのコンパイルとリンクで -g が指定されていることを前提にしています。Fortran の関数とルーチンの場合は、関数名の最後に下線を付けてください。関数名のあとの 1 は、myfunction の複数インスタンスを区別するためのものです。


er_print -source  myfunction 1 test.1.er


例 5–11 ユーザー関数スタックから myfunc という名前の関数をフィルタリング


er_print -filters 'FNAME("myfunc") SOME IN USTACK' -functions test.1.er


例 5–12 gprof に似た出力を生成

次の例は、実験から gprof 形式に似た一覧を生成します。出力は er_print.out というファイルで、先頭の 100 個の関数と、関数ごとの属性ユーザー時間でソートされた呼び出し元 - 呼び出し先データの一覧です。


er_print -outfile  er_print.out -metrics e.%user -sort e.user \
-limit 100 -func -callers-callees test.1.er

この例のコマンドを分解して、次の独立した 2 つのコマンドにすることもできます。ただし、大規模な実験またはアプリケーションでは、er_print の呼び出しのたびに、かなりの時間がかかることがありますので注意してください。


er_print -metrics  e.%user -limit 100  -functions test.1.er

er_print -metrics  e.%user -callers-callees test.1.er


例 5–13 コンパイラのコメントのみを表示

このコマンドを使用するためにプログラムを実行する必要はありません。


er_src -myfile.o


例 5–14 時計時間プロファイリングを使用して、関数および呼び出し元と呼び出し先を一覧表示


er_print -metrics  ei.%wall -functions test.1.er

er_print -metrics aei.%wall  -callers-callees test.1.er


例 5–15 er_print コマンドを含むスクリプトを実行


er_print -script myscriptfile test.1.er

myscriptfile スクリプトに er_print コマンドが含まれます。スクリプトファイルの例を次に示します。

## myscriptfile

## Send script output to standard output
outfile -

## Display descriptive information about the experiments
header

## Write out the sample data for all experiments
overview

## Write out execution statistics, aggregated over 
## the current sample set for all experiments
statistics

## List functions
functions

## Display status and names of available load objects
object_list


## Write out annotated disassembly code for systime, 
## to file disasm.out
outfile disasm.out
disasm systime


## Write out annotated source code for synprog.c 
## to file source.out
outfile source.out
source synprog.c

## Terminate processing of the script
quit