JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.2: パフォーマンスアナライザ
search filter icon
search icon

ドキュメントの情報

はじめに

1.  パフォーマンスアナライザの概要

2.  パフォーマンスデータ

3.  パフォーマンスデータの収集

4.  パフォーマンスアナライザツール

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

er_print の構文

メトリックリスト

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

functions

metrics metric_spec

sort metric_spec

fsummary

fsingle function_name [N]

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

callers-callees

csingle function_name [N]

cprepend function-name [N | ADDR]

cappend function-name [N | ADDR]

crmfirst

crmlast

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

calltree

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

leaks

allocs

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

pcs

psummary

lines

lsummary

source|src { filename | function_name } [ N]

disasm|dis { filename | function_name } [ N]

scc com_spec

sthresh value

dcc com_spec

dthresh value

cc com_spec

setpath path_list

addpath path_list

pathmap old-prefix new-prefix

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

data_objects

data_single name [N]

data_layout

memobj mobj_type

mobj_list

mobj_define mobj_type index_exp

インデックスオブジェクトリストを制御するコマンド

indxobj indxobj_type

indxobj_list

indxobj_define indxobj_type index_exp

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

OMP_preg

OMP_task

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

races

rdetail race_id

deadlocks

ddetail deadlock_id

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

experiment_list

sample_list

lwp_list

thread_list

cpu_list

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

フィルタ式の指定

filters filter_exp

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

describe

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

選択リスト

選択用のコマンド

sample_select sample_spec

lwp_select lwp_spec

thread_select thread_spec

cpu_select cpu_spec

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

object_list

object_show object1,object2,...

object_hide object1,object2,...

object_api object1,object2,...

objects_default

object_select object1,object2,...

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

metric_list

cmetric_list

data_metric_list

indx_metric_list

出力を制御するコマンド

outfile { filename | - }

appendfile filename

limit n

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

viewmode { user| expert | machine }

compare { on | off }

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

header exp_id

ifreq

objects

overview exp_id

statistics exp_id

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

dmetrics metric_spec

dsort metric_spec

en_desc { on | off | =regexp }

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

tabs tab_spec

rtabs tab_spec

tlmode tl_mode

tldata tl_data

その他のコマンド

procstats

script file

version

quit

help

式の文法

フィルタ式の例

er_print コマンドの例

6.  パフォーマンスアナライザとそのデータについて

7.  注釈付きソースと逆アセンブリデータについて

8.  実験の操作

9.  カーネルプロファイリング

索引

式の文法

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

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

式のオペランドは定数か、データレコード内のフィールドになります。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