Sun Studio 12: パフォーマンスアナライザ

式の文法

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

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

式の中のオペランドは、定数、データレコード内のフィールド (THRIDLWPIDCPUIDSTACKLEAFVIRTPC PHYSPCVADDRPADDRDOBJTSTAMPSAMPLEEXPID PID)、またはメモリーオブジェクトの名前です。演算子は、C の表記法と C の優先順位規則に従った通常の論理演算子と算術 (シフトを含む) 演算子、要素が集合に含まれるかどうかを決める演算子 (IN)、要素集合の一部または全部が 1 つの集合に含まれるかどうかを決める演算子 (それぞれ、SOME ININ) のいずれかです。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 ”) 内の任意の関数が、キーワード 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 を返す必要があります。