Vue 関数

Vue 関数は多くの数が用意されています。例えば、Vue 関数を使用すれば、リストに値を追加したり、ランタイム・スタック・トレースを生成したり、リストにあるすべてのエレメントの合計を返したりできます。

Vue 言語は、次の関数をサポートします。

機能 説明
add_range 文字列範囲データ型を初期化します。
append 値をリストに追加します。
atoi 文字列の整数値を戻します。
avg リスト内のすべてのエレメントの平均を戻します。
commitdiscard 一時トレース・バッファーのデータをコミットまたは廃棄します。
convert_ip4_addr IPv4 アドレス (データ) を ProbeVue データ型の ip_addr_t 形式に変換します。
convert_ip6_addr IPv6 アドレス (データ) を ProbeVue データ型の ip_addr_t 形式に変換します。
copy_kdata データを、カーネル・メモリーから Vue スクリプト変数にコピーします。
copy_userdata データを、ユーザー・メモリーから Vue スクリプト変数にコピーします。
count リスト内のすべてのエレメントの数を戻します。
diff_time 2 つのタイム・スタンプの時間差を戻します。
eprintf データをフォーマットして標準エラーに印刷します。
exit Vue スクリプトを終了します。
fd_fname 特定のファイル・ディスクリプターのファイル名を取得します。
fd_fstype 特定のファイル・ディスクリプターのファイルシステム・タイプを取得します。
fd_ftype 特定のファイル・ディスクリプターのファイル・タイプを取得します。
fd_inodeid 特定のファイル・ディスクリプターの i ノード ID を取得します。
fd_mpath 特定ファイル・ディスクリプターのファイルシステムのマウント・パスを取得します。
fd_path 特定のファイル・ディスクリプターの絶対ファイル・パスを取得します。
fpath_inodeid 特定のファイル・パスの i ノード ID を取得します。
get_function プローブされている関数の名前を戻します。
get_kstring データを、カーネル・メモリーから String 変数にコピーします。
get_location_point 現在のプローブ・ロケーション・ポイントを戻します。
get_probe 現在のプローブ・ポイント指定を戻します。
get_stktrace ランタイム・スタック・トレースを返します。
get_kbytes 多くとも指定されたバイト数までのデータを、カーネル・メモリーから Vue スクリプト変数にコピーします。
get_ubytes 多くとも指定されたバイト数までのデータを、ユーザー・メモリーから Vue スクリプト変数にコピーします。
get_userstring ユーザー・メモリーからのデータをコピーします。
list 新しい空リストを作成して戻します。
group_output_start その関数が属している節の出力グループ化を開始します。
group_output_end その関数が属している節の出力グループ化を終了します。
lquantize 連想配列の値を対数として量子化し、キーと値の対をグラフィカル形式で出力します。
max リスト内のすべてのエレメントの最大を戻します。
min リスト内のすべてのエレメントの最小を戻します。
args プローブしている関数の名前とその引数を表示します。
print 連想アレイ内のキーと値の対を出力します。
printf データをフォーマットしてトレース・バッファーにコピーします。
ptree プローブしているプロセスのプロセス・ツリーを表示します。
quantize 連想配列の値を線形に量子化し、キーと値の対をグラフィカル形式で出力します。
qrange 範囲のスロット番号を検索して、連想配列に追加します。
round_trip_time 指定されたソケット・ディスクリプターについて、TCP 接続の平滑化された往復時間を取得します。
set_aso_print_options sort-type、sort-by、および list-value のフラグを指定します。
set_date_format 日付形式を更新します。
set_range 線形および累乗の範囲型を初期化します。
sockfd_netinfo 特定のソケット・ディスクリプターに関する、ローカルおよびリモートのポートと IP アドレスの情報を取得します。
startend_tentative 一時トレース・セクションの開始と終了を示します。
stktrace ランタイム・スタック・トレースを生成して印刷します。
strstr 別の文字列内の文字列を戻します。
sum リスト内のすべてのエレメントの合計を戻します。
timestamp 現在のタイム・スタンプを戻します。
trace ロー・データを 16 進文字としてトレース・バッファーにコピーします。

add_range

目的:

文字列範囲データ型を初期化し、文字列をスロットに追加します。

構文:

add_range(range_t range_data, String S1, String S2, ..., String Sn);

説明:

このルーチンは、range_data を文字列範囲データ型として初期化します。また、引数として渡されたすべての文字列を 1 つのスロットのルーチンに追加します。ある範囲データ型についてこのルーチンが初めて呼び出された場合、文字列は最初のスロットに追加されます。それ以外の場合、文字列は次のスロットに追加されます。

パラメーター:

range_data
range_t データ型。
S1, S2,...
range_data パラメーターに追加される文字列。

append

目的

値をリストに追加します。

構文

void append ( List listvar, long long val );

説明

append 関数は、Vue で使用できる唯一のリスト連結関数です。 この関数は、最初のパラメーターで指定されたリスト変数に、2 番目のパラメーターで指定された値を追加します。 append 関数への呼び出しごとに、リスト変数に既に保存されている値のセットに新しい値が追加され、リスト変数のサイズが大きくなります。 また、append 関数は別のリストを引数として受け入れるため、2 つのリストを結合することもできます。

注: リストに追加する値は、整数またはリスト型のパラメーターでなければなりません。それ以外の場合は、構文エラーが発生します。 ProbeVue コンパイラーでは、符号付きと符号なしの両方の整数型を含む、C-89 整数データ型をもつパラメーターを受け入れます。 キャストは必要ありません。

append 関数には戻り値がありません。

リスト・データ型の詳細については、リスト型を参照してください。 前セクションの list では、append 関数を使用するスクリプト例を記載しています。

パラメーター

パラメーター 説明
listvar list 型の変数を指定します。
val 追加する値またはリストを指定します。

atoi

目的

文字列の整数値を戻します。

構文

int atoi( String str ); 

説明

atoi 関数は、str パラメーターで指定された文字列で表記される値をもつ整数を戻します。 この関数は、数字 (0-9) でない最初の文字まで文字列を読み取り、スキャンした文字を同等の整数に変換します。 先頭の空白文字は無視されます。オプションの符号標識は数字の前に付けることができます。

atoi 関数は、すべての引数を二重引用符で囲む sprobevue シェル・スクリプトを実行する場合に文字列を整数に戻すのに役立ちます。 次のスクリプトの例では、予期したよりも速く fork するプロセスを収集します。

/* File: ffork.e 
 *
 * Usage: sprobevue ffork.e processname delta
 *
 *	Traces whenever a specified process is forking faster than
 *	the "delta" value passed. Specify a process name and the time
 *	in milliseconds as parameters.
 */

/* Ignore other parameters to execve */
int execve(char *path);

@@BEGIN
{
	int done;
	int pid;

	pname = $1;		/* name of process we are monitoring */

	/* 
	 * Since sprobevue is used, need to extract the integer value
	 * from the string (double quotes around the delta).
	 */
	delta = atoi($2);	/* minimum delta in millisecs between forks */
	printf("pname = %s, delta = %d¥n", pname, delta);
}

@@syscall:*:execve:entry
	when (done == 0)
{
	__auto String exec[128];
	__thread int myproc;

	/* Find process being 'exec'ed */
	exec = get_userstring(__arg1, 128);

	/* Got it. Set a thread-local and reset 'done' so that we 
	 * avoid entering this probe from now on.
	 */
	if (exec == pname) {
		pid = __pid;
		myproc = 1;
		done = 1;
		printf("Process name = %s, pid = %d¥n", __pname, pid);
	}
}

@@syscall:*:fork:entry
	when (thread:myproc == 1)
{
	/* old_ts is initialized to zero */
	probev_timestamp_t old_ts, new_ts;
	unsigned long long interval;

	/* Get current time stamp */
	new_ts = timestamp();

	/* Find time from last fork */
	if (old_ts != 0) {
		interval = diff_time(old_ts, new_ts, MILLISECONDS);

		/* if below the specified limit, trace that */
		if (interval < delta)
			printf("%s (%ld) forking too fast (%d milliseconds)¥n",
					pname, __pid, interval);
	}

	/* Save current fork timestamp */
	old_ts = new_ts;
}

@@syscall:*:exit:entry
	when (__pid == pid)
{
	/* Catch process exit and terminate ourselves */
	printf("Process '%s' exited.¥n", pname);
	exit();
}

パラメーター

パラメーター 説明
str 変換する文字列を指定します。

avg

目的

リスト内のすべてのエレメントの平均を戻します。

構文

long long avg ( List listvar );

説明

avg 関数は、listvar パラメーターで指定されたリスト変数に追加されたすべてのエレメントの平均を戻します。

パラメーター

パラメーター 説明
listvar list 型の変数を指定します。

commit_tentative、discard_tentative

目的

一時トレース・バッファーのデータをコミットまたは廃棄します。

構文

void commit_tentative( String bufID );
void discard_tentative( String bufID );

説明

commit_tentative 関数は、bufID パラメーターで識別される一時トレース・バッファーと関連するトレース・データをコミットします。 これにより、データが保存され、トレース・コンシューマーが使用できるようになります。

discard_tentative 関数は、bufID パラメーターで示される一時トレース・バッファー内のすべてのデータを廃棄します。 これにより、一時トレース・データで満たされたトレース・バッファーのスペースが解放されます。

一時トレース・データを通常のトレース・データと一緒に保存する場合、後でコミットされる、以前の一時トレース・データと、通常のトレース・データはトレース・コンシューマーに対してタイム・スタンプ順で使用可能になります。 このため、トレース・バッファーを解放するために、可能な限り最も早い段階で一時データをコミットまたは廃棄するのが適切です。

ProbeVue セッションが終了すると、コミットされていない一時トレース・データはすべて廃棄されます。

一時トレースのトピックには、一次トレースに関する詳しい説明があり、一時トレースが使用されるサンプル Vue スクリプトが示されています。

パラメーター

パラメーター 説明
bufID 一時トレース・バッファー ID を示す文字列定数を指定します。

convert_ip4_addr

目的

IPV4 アドレス (データ) を ProbeVue IP アドレス・データ型形式に変換します。

構文

ip_addr_t convert_ip4_addr (unsigned int ipv4_data);

説明

convert_ip4_addr 関数は、/usr/include/netinet/in.h ファイルで定義されている in_addr 構造の IPv4 アドレスを ProbeVue IP アドレス・データ型 ip_addr_t に変換します。この関数は、変換された ip_addr_t 値を返します。

パラメーター

ipv4_data
ip_addr_t 形式に変換する必要がある IPv4 アドレス・データを指定します。

convert_ip6_addr

目的

IPv6 アドレス (データ) を ProbeVue IP アドレス・データ型形式に変換します。

構文

ip_addr_t convert_ip6_addr (int *ipv6_data);

説明

convert_ip6_addr 関数は、/usr/include/netinet/in.h ファイルで定義されている in6_addr 構造の IPv6 アドレスを、型 ip_addr_t の ProbeVue IP アドレス・データ型に変換します。この関数は、変換された ip_addr_t 値を返します。

パラメーター

ipv6_data
ip_addr_t 形式に変換する必要がある ipv6 アドレス・データを指定します。
次のスクリプトの例では、プローブされたプロセスがデータを送信する対象に関する情報を出力します。
/* Declare the Function prototype */
int sendto(int s,  char * uap_buf,   int len,  int flags,  char * uap_to,  int tolen);

typedef unsigned int in_addr_t;

/* Structure Declarations */

/* Declare the in_addr structure */
struct in_addr {
        in_addr_t        s_addr;
};

/* Declare the sockaddr_in structure */
struct sockaddr_in {
        unsigned char           sin_len;
        unsigned char           sin_family;
        unsigned short          sin_port;
        struct in_addr          sin_addr;
        unsigned char           sin_zero[8];
};
/* Declare the in6_addr structure */
struct in6_addr {
        union {
                int s6_addr32[4];
                unsigned short s6_addr16[8];
                unsigned char  s6_addr8[16];
        } s6_addr;
};
/* Declare the sockaddr_in6 structure */
struct sockaddr_in6 {
        unsigned char          sin6_len;
        unsigned char          sin6_family;
        unsigned short         sin6_port;
        unsigned int           sin6_flowinfo;
        struct   in6_addr      sin6_addr;
        unsigned int           sin6_scope_id;  /* set of interfaces for a scope */
};


/* Print the information about to whom it is sending data */
@@syscall:*:sendto:entry
{
        struct sockaddr_in6 in6;
        struct sockaddr_in in4;
        ip_addr_t ip;

                /* Copy the arg5 data into sockaddr_storage variable */
                /* using copy_userdata( ) Vue function */
        copy_userdata(__arg5, in4);

       /*
        * Verify  whether the destination address is IPv4 or IPv6 and based on that call the
        * corresponding IPv4 or IPV6 conversion routine.
        */
       if (in4.sin_family == AF_INET)
       {
               /* Copy the ipv4 data into sockaddr_in structure using copy_userdata routine */
                copy_userdata(__arg5, in4);

               /* Convert Ipv4 data into ip_addr_t format */
                ip = convert_ip4_addr(in4.sin_addr.s_addr);

               /* Print the destination address and hostname  using %H and %I format specifier */
               printf("It is sending the data to node %H(%I)¥n",ip,ip);
        }
        else if(in4.sin_family == AF_INET6)
        {
              /* Copy the ipv6 data into sockaddr_in6 structure using copy_userdata routine */
               copy_userdata(__arg5, in6);

              /* Convert Ipv6 data into ip_addr_t format */
               ip = convert_ip6_addr(in6.sin6_addr.s6_addr.s6_addr32);

              /* Print the destination address and hostname using %H and %I format specifier */
              printf("It is sending the data to node %H(%I)¥n", ip,ip);
        }
}

count

目的

リスト内のエレメントの数を戻します。

構文

long long count ( List listvar );

説明

count 関数は、listvar パラメーターで指定されたリスト変数に追加されたエレメントの数を戻します。

リスト・データ型について詳しくは、Data types in Vue を参照してください。前セクションの list では、count 関数を使用するスクリプト例を記載しています。

パラメーター

パラメーター 説明
listvar list 型の変数を指定します。

copy_kdata

Purpose

データを、カーネル・メモリーから Vue スクリプト変数にコピーします。

構文

void copy_kdata( <type> *kaddr,<type>svar);

説明

copy_kdata 関数は、カーネル・メモリーからデータを Vue スクリプト変数に読み込みます。変数は、Vue がサポートする任意の C-89 型 (ポインター型を除く) にすることができます。コピーされるデータの長さは、変数のサイズと同じです。例えば、 ターゲットの Vue スクリプト変数が int 型の場合は、 4 バイトがコピーされ、long long 型の場合は 8 バイトが、 12 個の整数の配列 (int[12]) の場合には 48 バイトがコピーされます。

カーネル・スペース内のデータを、式で使用するかパラメーターとして Vue 関数に渡す場合は、事前にコピーしておく必要があります。

処理でこの関数を実行中に、 無効なカーネル・アドレスが関数に渡されるなどの例外が発生した場合は、 ProbeVue セッションが異常終了し、 エラー・メッセージが表示されます。

パラメーター

kaddr
カーネル・スペース・データのアドレスを指定します。
svar
カーネル・データのコピー先となるスクリプト変数を指定します。スクリプト変数の型は、カーネル・データの型にすることができます。

copy_userdata

Purpose

データを、ユーザー・メモリーから Vue スクリプト変数にコピーします。

構文

void copy_userdata( <type> *uaddr,<type>svar);

説明

copy_userdata 関数は、ユーザー・メモリーからデータを Vue スクリプト変数に 読み込みます。変数は、Vue がサポートする任意の C-89 型にすることができます。コピーされるデータの長さは、変数型のサイズと同じです。例えば、 ターゲットの Vue スクリプト変数が int 型の場合は、 4 バイトがコピーされ、long long 型の場合は 8 バイトが、 12 個の整数の配列 (int[12]) の場合には 48 バイトがコピーされます。

ユーザー・スペース内のデータを式で使用するか、パラメーターとして Vue 関数に渡す場合は、事前にコピーしておく必要があります。

処理でこの関数を実行中に、無効なユーザー・アドレスが関数に渡されるなどの例外が発生した場合は、ProbeVue セッションが中断し、エラー・メッセージが表示されます。

パラメーター

uaddr
ユーザー・スペース・データのアドレスを指定します。
svar
ユーザー・データのコピー先となるスクリプト変数を指定します。スクリプト変数の型は、 ユーザー・データの型にする必要があります。

diff_time

目的

2 つのタイム・スタンプの時間差を戻します。

構文

unsigned long long diff_time( probev_timestamp_t ts1, probev_timestamp_t ts2, intformat );

説明

diff_time 関数は、timestamp 関数を使用して記録された 2 つのタイム・スタンプの時間差を戻します。 この関数は、format パラメーターで指定されるマイクロ秒またはミリ秒で時間差を戻します。

get_location_point セクションと list セクションには、diff_time 関数を使用するスクリプトの例が示されています。

パラメーター

パラメーター 説明
ts1 早い方のタイム・スタンプを示します。
ts2 遅い方のタイム・スタンプを示します。
format 次のいずれかの値に設定します。
MILLISECONDS
最も近いミリ秒に時間差を戻します。
MICROSECONDS
最も近いマイクロ秒に時間差を戻します。
このパラメーターの変数を渡すことはできません。

eprintf

目的

データをフォーマットして標準エラーに印刷します。

構文

void eprintf ( String format[ , data, ... ]);

説明

eprintf 関数は、出力が標準エラーに送信されることを除いて printf 関数と同等です。eprintf 関数は、 format パラメーターに応じて、data パラメーターの値を変換、フォーマットして トレース・バッファーにコピーします。構文が示すように、 引数の可変リストが data パラメーターとして eprintf 関数に渡されます。Vue は、 C ライブラリーの printf サブルーチンでサポートされる変換指定子を %p 以外すべてサポートしています。

eprintf 関数を使用して リスト型の変数を出力することはできません。ただし、文字列型の変数は、%s 変換指定子を使用して出力できます。probev_timestamp_t 型の変数は、%lld 指定子または %16llx 指定子を使用して数値形式で出力されます。probev_timestamp_t 型の変数は、%A 指定子または %W 指定子を使用して日付形式で出力されます。

パラメーター

format
変更なしでトレース・バッファーに直接コピーされるプレーン文字を含む文字列。data パラメーターのフォーマット方法を示す別の 1 つ以上の変換指定子。
data
format パラメーターの変換指定子に対応するゼロ個以上の引数を指定します。
注: 一時トレースは、eprintf 関数で使用できません。

exit

目的

Vue スクリプトを終了します。

構文

void exit();

説明

exit 関数は Vue スクリプトを終了します。 この関数は、動的トレース・セッションで使用可能なすべてのプローブを使用不可にし、一時トレース・データを廃棄し、@@END プローブで示されたアクションを実行し、収集されたすべてのトレース・データをトレース・コンシューマーにフラッシュします。 トレース・コンシューマーが @@END プローブでトレースされた出力を印刷すると、トレース・セッションが終了し、probevue プロセスが終了します。

これは probevue コマンドが実行された端末で Ctrl-C を押した場合と同様です (フォアグラウンド・タスクとして実行されている場合)。 また、kill コマンドまたは kill システム・コールを使用して SIGINTprobevue プロセスに直接送ることもできます。

list セクションには、exit 関数を使用するスクリプトの例が示されています。atoi セクションでは、プローブしているプロセスが終了するのと同時に終了する方法を示したスクリプト例を記載しています。

パラメーター

C ライブラリーで提供される exit サブルーチンとは異なり、exit 関数はパラメーターを取りません。

fd_fname

目的

特定のファイル・ディスクリプターのファイル名を戻します。

構文

char * fd_fname(int fd); 

説明

この関数は、特定ファイル・ディスクリプターのファイルの名前を取得します。これは、同じファイルについて、__file->fname (I/O プローブ・マネージャーの __file 組み込み変数を参照) と同じ値を戻します。

注: この関数では、probevctrl コマンドの num_pagefaults チューナブル値が 0 より大きいことが必要です。0 (または十分でない値) である場合、この関数はヌル文字列をファイル名として戻します。

パラメーター

fd
ファイル・ディスクリプターまたはソケット・ディスクリプターの値

fd_fstype

目的

特定のファイル・ディスクリプターのファイルシステム・タイプを戻します。

構文

int fd_fstype(int fd);

説明

この関数は、特定のファイル・ディスクリプターのファイルが属しているファイルシステムのタイプを取得します。これは、__file->fs_type (I/O プローブ・マネージャーの __file 組み込み変数を参照) と同じ値を戻します。

注: この関数では、probevctrl コマンドの num_pagefaults チューナブルが 0 より大きいことが必要です。0 (または十分でない値) である場合、この関数はファイルシステムのタイプとして -1 を戻します。

パラメーター

fd
ファイル・ディスクリプターの値

fd_ftype

目的

特定のファイル・ディスクリプターのファイル・タイプを戻します。

構文

int fd_ftype(int fd);

説明

この関数は、特定のファイル・ディスクリプターのファイル・タイプを取得します。これは、__file->f_type (I/O プローブ・マネージャーの __file 組み込み変数を参照) と同じ値を戻します。

注: この関数では、probevctrl コマンドの num_pagefaults チューナブルが 0 より大きいことが必要です。0 (または十分でない値) である場合、この関数はファイル・タイプとして -1 を戻します。

パラメーター

fd
ファイル・ディスクリプターの値

fd_inodeid

目的

特定のファイル・ディスクリプターの i ノード ID を戻します。

構文

unsigned long long fd_inodeid(int fd);

説明

この関数は、特定のファイル・ディスクリプターに関連したファイルの i ノード ID を戻します。i ノード ID は、システム内で固有な unsigned long long 値です (ファイルシステムの i ノード番号とは異なり、システムがリブートすると値が変更される可能性があります)。この値は、同じファイルについて fpath_inodeid() 関数によって戻される値と一致します。

注: この関数では、probevctrl コマンドの num_pagefaults チューナブルが 0 より大きいことが必要です。0 (または十分でない値) である場合、この関数は i ノード ID として 0 を戻します。

パラメーター

fd
ファイル・ディスクリプターの値

fd_mpath

目的

特定ファイル・ディスクリプターのファイルシステムのマウント・パスを取得します。

構文

char * fd_mpath(int fd);

説明

この関数は、特定のファイル・ディスクリプターのファイルが属しているファイルシステムのマウント・パスを取得します。これは、同じファイルについて、__file->mount_path (I/O プローブ・マネージャーの __file 組み込み変数を参照) と同じ値を戻します。

注: この関数では、probevctrl コマンドの num_pagefaults チューナブルが 0 より大きいことが必要です。0 (または十分でない値) である場合、この関数はマウント・パスとしてヌル文字列を戻します。

パラメーター

fd
ファイル・ディスクリプターの値

fd_path

目的

特定ファイル・ディスクリプターのファイルの絶対パスを戻します。

構文

path_t fd_path(int fd); 

説明

この関数は、特定ファイル・ディスクリプターのファイルの絶対パスを戻します。戻り値の型は path_t です。これは、同じファイルについて、__file->path (I/O プローブ・マネージャーの __file 組み込み変数を参照) と同じ値を戻します。

注: この関数は、probevctrl コマンドの num_pagefaults チューナブルが 0 より大きいことを必要とします。 0 (または不十分な値) である場合、この関数はヌル・パスを返します。 これにより、printf(“%p”) 関数によって表示されるときにヌル文字列が表示されます。

パラメーター

fd
ファイル・ディスクリプターの値

fpath_inodeid

目的

特定のファイル・パスの i ノード ID を戻します。

構文

unsigned long long fpath_inodeid(String file_path); 

説明

この関数は、特定のファイル・パスの i ノード ID を戻します。i ノード ID は、システム内で固有な unsigned long long 値です (ファイルシステムの i ノード番号とは異なり、システムが再始動すると値が変更される可能性があります)。ファイル・パスが存在しない場合、Vue スクリプトは probevue コマンドによってリジェクトされます。i ノード ID 値は、同じファイルについて vfs プローブ・イベントで __file->inode_id によって提供されたものと同じままです (I/O プローブ・マネージャーの __file 組み込み変数を参照)。

注: この関数は、Vue スクリプト内の任意の場所 (Vue 関数が許可される場合ならどこでも) で使用できます。

パラメーター

file_path
既存のファイルを表す、二重引用符で囲まれたリテラル・ストリング。例えば、"/usr/lib/boot/unix_64" です。変数にすることはできません。

get_function

目的

現行プローブを囲む関数の名前を戻します。 get_function 関数は、interval、systrace、BEGIN、および END 節から呼び出されると、空のストリングを返します。

構文

String get_function ( );

説明

get_function 関数は、プローブされる関数、すなわち現行プローブ・ポイントを囲む関数の名前を戻します。 通常、プローブされる関数の名前は、ロケーション・フィールドの前にあるプローブ・ポイント組です。

前セクションの get_probe では、get_function 関数を使用するスクリプト例を記載しています。

get_function 関数は、間隔プローブ・マネージャーから呼び出された場合は空文字列を戻します。

パラメーター

get_function 関数はパラメーターを取りません。

get_kstring

Purpose

データを、カーネル・メモリーから String 変数にコピーします。

構文

String get_kstring( char *kaddr,int len);

説明

get_kstring 関数は、カーネル・メモリー内のデータを String 型の変数に読み取ります。

カーネル・スペース内のストリングを式で使用するか、パラメーターとして Vue 関数に渡す場合は、事前にコピーしておく必要があります。

get_kstring 関数のターゲットは、常に String 型の変数でなければなりません。 len パラメーターに -1 の値を指定すると、NULL バイトが読み取られるまでカーネル・メモリーからデータがコピーされます (NULL バイトは C 言語でテキスト・ストリングを終了するために使用されます)。文字列の長さがターゲットの String 変数の宣言されたサイズよりも大きい場合は、変数のサイズまでの文字列のみがコピーされます。ただし、最初は、NULL バイトが読み取られるまで文字列全体が一時的な文字列バッファー領域にコピーされます。この関数を使用する場合は、一時的な文字列バッファー領域がオーバーフローして ProbeVue セッションを停止しないように、カーネル・アドレスがヌル終了ストリングを示すことに注意してください。

カーネル・メモリーから読み取られる文字列の最大長は、len パラメーターに負でない値を指定することで修正できます。この場合は、NULL バイトが読み取られるまで、または、指定されたバイト数が読み取られるまでコピーは続行します。この機能を使用すると、len パラメーターの値でコピーが制限されていても、カーネル・メモリー内の長い文字列がより安全にコピーされ、ProbeVue の一時的な内部文字列バッファーがオーバーフローすることはありません。

この関数を実行中に、例えば、無効なカーネル・アドレスが関数に渡された場合などに例外が発生した場合は、ProbeVue セッションが中断し、エラー・メッセージが表示されます。

パラメーター

addr
カーネル・スペース・データのアドレスを指定します。
len
コピーするカーネル・データのバイト数を指定します。 値 -1 は、カーネル・データが「C」文字列として処理され、ヌル・バイト ('¥0' 文字) が読み取られるまでコピーが続行することを示します。len パラメーターの値として -1 を指定する場合は注意が必要です。

get_location_point

目的

現在のプローブ・ロケーション・ポイントを戻します。

構文

int get_location_point ( );

説明

get_location_point 関数は、現在のプローブ・ロケーション・ポイントを、エンクロージング型関数のエントリー・ポイントからのオフセットで戻します。 具体的には、プローブ・ポイントが関数のエントリー・ポイントにある場合は FUNCTION_ENTRY またはゼロを戻し、終了ポイントにある場合は FUNCTION_EXIT または -1 を戻します。それ以外の場合は、実アドレスのオフセットを戻します。

次のスクリプトの例では、get_location_point 関数を使用しています。

@@syscall:$1:read:entry, @@syscall:$1:read:exit
	{
		probev_timestamp_t ts1, ts2;
		int diff;

		if (get_location_point() == FUNCTION_ENTRY) 
			ts1 = timestamp();
		else if (get_location_point() == FUNCTION_EXIT) {
			ts2 = timestamp();
			diff = diff_time(ts1, ts2, MICROSECONDS);
			printf("Time for read system call = %d¥n", diff);
		}
	}

この関数は、間隔プローブ・マネージャーから呼び出された場合はサポートされません。

パラメーター

get_location_point 関数はパラメーターを取りません。

get_probe

目的

現在のプローブ・ポイント指定を戻します。

構文

String get_probe ( );

説明

get_probe 関数は、現在のプローブ・ポイント指定の内部表記を戻します。 プローブ・ポイントは、内部で保存された場合、先頭の @@ 接頭部またはプロセス ID (ある場合) が指定されません。

次のスクリプトの例では、get_probe 関数を使用しています。

#cat get_probe.e 
	@@uft:312678:*:run_prog:entry
	{
		printf("function '%s' probe '%s'¥n", get_function(), get_probe());
	}

	#probevue get_probe.e
	function 'run_prog' probe 'uft:*:*:run_prog:entry'

パラメーター

get_probe 関数はパラメーターを取りません。

get_stktrace

目的

現行のスタック・トレースを返します。

構文

stktrace_t get_stktrace(int level); 

説明

get_stktrace 関数は現行スレッドのスタック・トレースを返します。このスタック・トレースは stktrace_t 型変数に保管されるか、ProbeVue 組み込み printf 関数で %t 指定子または %T 指定子を使用するときには表示されます。 level パラメーターは、スタック・トレースが表示される最大のレベル数を示します。 printf 関数内で使用される get_stktrace 関数の動作は、stktrace 組み込み関数に似ています。ただし、実行中のスレッドに対して %t 指定子が使用された場合にシンボルとアドレスが表示され、それ以外の場合はロウ・アドレスが表示されるということが唯一異なります。また、すべてのマシン状態間を移動することによって、CPU スタック全体を表示します。

次のスクリプトは、get_stktrace 関数の使用例を示したものです。

t1 = get_stktrace(3)                // Returns the current stack trace & stores in stktrace_t 
                                   // type variable t1.
printf(“%t¥n”, get_stktrace(4));  // Prints the current stack trace up to level 4.
                                 // Prints symbol with addresses.
printf(“%T¥n”, get_stktrace(4));  // Prints the current stack trace up to level 4
                                  // Prints raw addresses.

パラメーター

パラメーター 説明
level スタック・トレースが stktrace_t 型の変数に保存される最大のレベル数を示します。 値 -1 は、スタック・バック・チェーンが有効な範囲までトラバースされることを示します。 デフォルト値の 0 は、2 レベルまでトラックバックして、2 エントリーを保存します。 それ以外の正整数値はすべて、変数に保存されるレベル数を決定します。 level に指定できる最大値は 240 です。
注: 複数の mst からのエントリーが表示される場合、mst 境界は、「-」文字で構成される行で区切られます。 この行も 1 レベルと見なされます。つまり、表示されるエントリーは、提供される level パラメーターから、分離行数を引いた数です (level パラメーターが -1 である場合を除く)。

get_ubytes

目的

多くともバイト数 len までのデータを、ユーザー・メモリーから Vue スクリプト変数にコピーします。

構文

int get_ubytes(void *src, char *dest, int len); 

説明

get_ubytes 関数は、バイト数 len のデータをユーザー・メモリーから Vue スクリプト変数に読み込みます。 この変数のタイプは、文字ポインターにすることができます。 コピーされるデータの大きさは、この関数に渡される len パラメーター、または宛先 Vue 変数のサイズと同じです。 len の値が、宛先 Vue 変数のサイズより大きい場合、コピーされるデータの大きさは、宛先変数のサイズと同じになります。 ユーザー・スペース内のデータを式で使用できるようにするか、パラメーターとして Vue 関数に渡す場合は、事前にそのデータを Vue 変数にコピーしておく必要があります。

戻り値

get_ubytes 関数は、正常にコピーされた合計バイト数を返します。失敗した場合は -1 を返します。 この関数の実行中に、無効なユーザー・アドレスが関数に渡されるなどの例外が発生した場合は、ProbeVue セッションは終了し、エラー・メッセージが表示されます。

get_kbytes

目的

多くともバイト数 len までのデータを、カーネル・メモリーから Vue スクリプト変数にコピーします。

構文

int get_kbytes(void *src, char *dest, int len);

説明

get_kdata 関数は、バイト数 len のデータをカーネル・メモリーから Vue スクリプト変数に読み込みます。 この変数のタイプは、文字ポインターにすることができます。 コピーされるデータの大きさは、この関数に渡される len パラメーター、または宛先 Vue 変数のサイズと同じです。 len の値が、宛先 Vue 変数のサイズより大きい場合、コピーされるデータの大きさは、宛先変数のサイズと同じになります。 ユーザー・スペース内のデータを式で使用できるようにするか、パラメーターとして Vue 関数に渡す場合は、事前にそのデータを Vue 変数にコピーしておく必要があります。

戻り値

get_kbytes 関数は、正常にコピーされた合計バイト数を返します。失敗した場合は -1 を返します。 この関数の実行中に、無効なカーネル・アドレスが関数に渡されるなどの例外が発生した場合は、ProbeVue セッションは終了し、エラー・メッセージが表示されます。

get_userstring

目的

ユーザー・メモリーからのデータをコピーします。

構文

String get_userstring( char * addr, int len );

説明

get_userstring 関数は、ユーザー・メモリー内のデータを String 型の変数に読み取ります。

ユーザー・スペース内のデータを式で使用するか、パラメーターとして Vue 関数に渡す場合は、事前にコピーしておく必要があります。 get_userstring 関数のターゲットは、通常、String 型の変数です。 len パラメーターに -1 の値を指定すると、NULL バイトが読み取られるまでユーザー・メモリーからデータがコピーされます (NULL バイトは C 言語でテキスト・ストリングを終了するために使用されます)。 文字列の長さがターゲットの String 変数の宣言されたサイズよりも大きい場合は、変数のサイズまでの文字列のみがコピーされます。 ただし、最初は、NULL バイトが読み取られるまで文字列全体を一時的な文字列バッファー領域にコピーしなければなりません。 この関数を使用する場合は、一時的な文字列バッファー領域がオーバーフローして ProbeVue セッションを中断しないように、ユーザー・アドレスがヌル終了ストリングを示すことに注意してください。

ユーザー・メモリーから読み取られる文字列の実際の長さは、len パラメーターに値を指定することで修正できます。 この場合は、NULL バイトが読み取られるまで、または指定されたバイト数が読み取られるまで コピーは続行します。これにより、文字列型以外のデータを String 変数にコピーして、後でトレース関数を使用して 印刷することができます。
注: Vue では NULL バイトを文字列の終了文字として扱わないため、通常、実際の文字列はこのメカニズムではコピーしません。

この関数は、ユーザー・スペース・プローブ (uft プローブ型など) または syscall プローブ・マネージャーで指定されるプローブで許可されます。 データのコピー中にページ・フォールトが発生した場合は、コピー操作が終了し、String 変数には正常にコピーされたデータのみが含まれます。 この関数の実行中に、無効なユーザー・アドレスが関数に渡されるなどの例外が発生した場合は、ProbeVue セッションが中断し、エラー・メッセージが表示されます。

probeVue 動的トレース機能では、get_userstring 関数を使用するスクリプト例を記載しています。

注: キャストを使用してコピー操作のターゲットのデータ型を変更できますが、この場合はコンパイラーから警告メッセージが生成されます。 このため、get_userstring 関数を使用して、文字列だけでなく、構造体のデータおよび他のデータ形式のデータもユーザー・スペースから ProbeVue スペースにコピーできます。 次のスクリプトの例では、このようなデータ操作を行う方法を示しています。
/* File: string2int.e
 *
 * Reads an integer passed in a pointer using get_userstring()
 *
 */
int get_file_sizep(int *fd);

@@BEGIN
{
	
	int i;
}

@@uft:$1:*:get_file_sizep:entry
{
	i = *(int *)(get_userstring(__arg1, 4));

	printf("fd = %d¥n", i);
}
注: コピー操作のターゲットは、その宣言された長さがコピーされたデータを受け入れ可能な String 変数でなければなりません。そうでない場合は、ProbeVue セッションが中断する可能性があります。 get_userstring は、コピーするデータのサイズに対して任意の値を受け入れますが、コピーできる最大長は ProbeVue セッションのメモリー制限により制限されます。
パラメーター 説明
addr ユーザー・スペース・データのアドレスを指定します。
len コピーするユーザー・データのバイト数を指定します。 値 -1 は、ユーザー・データが文字のストリングと見なされ、ヌル・バイトが読み取られるまで (「¥0」文字が読み取られるまで) コピー操作が続行することを示します。 len パラメーターの値として -1 を指定する場合は注意が必要です。

group_output_start

目的

その関数が属している節の出力をグループ化します。

構文

void group_output_start();

説明

group_output_start() 関数は、節の出力をグループ化します。 group_output_start() 関数が呼び出された後、group_output_end() 関数が呼び出される前に、節の VUE ステートメントによって生成された出力メッセージは、他の CPU で同時に実行されていると考えられる節から生成されたメッセージによってインターリーブされることはありません。

group_output_end

目的

その関数が属している節の出力グループ化を終了します。

構文

void group_output_end();

説明

節の出力グループ化を停止します。 それ以降の VUE ステートメントがあれば、それらのステートメントはグループ化された出力を持たないため、他の CPU で同時に実行されている節による出力メッセージによってインターリーブされる場合があります。 group_output_end() 関数の呼び出しは、その前に group_output_start() 呼び出しがなければなりません。 group_output_start() 関数が呼び出された後、group_output_end() 関数の呼び出しはオプションです。 group_output_end() 関数が呼び出されない場合は、出力は節の終了までグループ化されます。

list

目的

空リストを作成して戻します。

構文

List list ( );

説明

list 関数は、リスト・データ型のコンストラクター関数です。 この関数は空リストを戻し、ターゲットをリスト・データ型として自動宣言します。 変数をリスト・データ型として明示的に宣言する方法はありません。 リスト変数は、常にグローバル・クラスの変数として作成されます。

list 関数はどの節からでも呼び出し可能です。 list 関数を呼び出すときに既存のリスト名を指定した場合は、その既存のリストがクリアされます。

リスト変数は整数型の値を収集するために使用できます。 リストに格納された値は、long long (または 64 ビット整数) データ型に自動的にプロモートされます。

次のスクリプトの例では、list 関数を使用しています。 これは各引数を二重引用符で囲む sprobevue シェル・プログラムで Vue スクリプトを呼び出すことを想定しています。

/* File: list.e
 * 
 * Collect execution time for read system call statistics
 *
 * Usage: sprobevue list.e <-s|-d>
 *
 *	Pass -s for summary and -d for detailed information
 */

int read(int fd, void *buf, int n);

@@BEGIN
{
	String s[10];
	int detail;
	times = list();		/* declare and create a list */

	/* Check for parameters */
	s = $1;
	if (s == "-d") 
		detail = 1;
	else if (s == "-s")
		detail = 0;
	else {
		printf("Usage: sprobevue list.e <-s|-d>¥n");
		exit();
	}
}

@@syscall:*:read:entry
{
	/*
	 * Save entry time in a thread-local to ensure that 
	 * in the read:exit probe point we can access our thread's value for 
	 * entry timestamp. If we use a global, then the variable can be
	 * overlaid by the next thread to enter read and this can give
	 * wrong values when we try to find the difference at read:exit
	 * time since we use this later value instead of the original value.
	 */

	__thread probev_timestamp_t t1;
	t1 = timestamp();
}

@@syscall:*:read:exit
	when (thread:t1 != 0)
{
	__auto t2;
	__auto long difft;

	/* Get exit time */
	t2 = timestamp();
	difft = diff_time(t1, t2, MICROSECONDS);

	/* Append read time to list */
	append(times, difft);

	/* print detail data if "-d" was passed to script */
	if (detail)
		printf("%s (%ld) read time = %d micros¥n", __pname, __pid, difft);
}

@@interval:*:clock:10000
{
	/* Print statistics every 10 seconds */
	printf("Read calls so far = %d, total time = %d, max time = %d, " +
	       "min = %d, avg = %d¥n",
			count(times),
			sum(times),
			max(times),
			min(times),
			avg(times));
}

パラメーター

list 関数はパラメーターを取りません。

lquantize

目的

対数目盛りで値を量子化することで、連想配列のキーと関連の値をグラフィカル形式で出力します。

構文:

void lquantize( aso-name ,int num-of-entries, int flags, sort_key_ind)

説明:

この関数は、連想配列の値の対数値に基づいて、連想配列のエントリーをグラフィカル形式で出力します。特定のキー・セットを持つエレメントだけを出力する場合は、連想配列変数名に加えて、それらのキーを最初の引数に指定することができます。特定のディメンション・キーだけを制限して、他のキーの任意の値を許可するには、ANY キーワードを使用できます。例については、print() 関数のセクションを参照してください。

最初のパラメーターは必須で、その他のパラメーターはすべてオプションです。オプション・パラメーターを指定しない場合は、デフォルトの出力オプションが使用されます。

パラメーター:

aso-name
出力する連想配列変数の名前。大括弧の中にすべてのディメンションのキーを指定することもできます。キー・ディメンションの中のすべてのキーに一致させるには、ANY キーワードを使用できます。
num-of-entries
出力するエントリー数を指定します。このパラメーターはオプションです。 すべてのエントリーを表示するには、0 を指定します。値が指定されていない場合は、セッションのデフォルトの出力オプションが使用されます。負の値は 0 と等価です。
flags
sort-type、sort-by、および list-value のフラグを指定します。このパラメーターはオプションです。 フラグ sort-type、sort-by、および list-value の説明は『連想配列型』のセクションにあります。0 を指定すると、セッションのデフォルトの出力オプションが使用されます。
sort_key_ind
出力のソートに使用するキーの索引 (キー・ディメンション)。-1 を指定すると、最初のキーがソートに使用されます。最初のキーがソート可能なタイプでない場合は、出力はソートされません。

max

目的:

リスト内のすべてのエレメントの最大を戻します。

構文:

long long max ( List listvar );

説明:

max 関数は、listvar パラメーターで指定されたリスト変数に追加されたすべてのエレメントの最大を戻します。

list データ型の詳細については、probeVue 動的トレース機能のトピックを参照してください。前セクションの listvarでは、max 関数を使用するスクリプト例を記載しています。

パラメーター

パラメーター 説明
listvar list 型の変数を指定します。

min

目的

リスト内のすべてのエレメントの最小を戻します。

構文

long long min ( List listvar );

説明

min 関数は、listvar パラメーターで指定されたリスト変数に追加されたすべてのエレメントの最小を戻します。

前セクションの listvar では、min 関数を使用するスクリプト例を記載しています。

パラメーター

listvar: list 型の変数を指定します。

print_args

目的

現行の関数とその引数値を表示します。

構文

void print_args(); 

説明

print_args 関数は、関数名と、その後に続く、丸括弧で囲んだコンマ区切りの関数引数を表示します。 引数値は、関数のトレースバック・テーブルにある引数タイプ情報に基づいて表示されます。 このルーチンは、uft/uftxlc++ プローブと syscall/syscallx プローブのエントリー・プローブで許可されます。 これは、プローブ・ロケーションが正規表現として指定されているプローブで有用です。

パラメーター

print_args 関数はパラメーターをとりません。

注: print_args ルーチンは、このルーチンのトレースバック・テーブルがページアウトしており、フリー・ページ・フォールト・コンテキストが使用不可の場合、出力を生成しません。 処理するページ・フォールトの数は、probevctrl コマンドを使用して増加でき、このスクリプトは再試行することができます。

print

目的

連想配列のキーと関連値を出力します。

構文

void print ( aso-name , int num-of-entires , int flags, int sort_key_ind );

説明

この関数は、変数 aso-name で指定した連想配列のエレメントを出力します。特定のキー・セットを持つエレメントのみを出力する場合は、連想配列変数名と共に最初の引数にそれらのキーを指定することができます。特定のディメンション・キーのみを制限して、他のすべてのキーの任意の値を許可するには、ANY キーワードを使用します。

例:

print(aso_var[0][ANY][ANY]);    // print all elements having first key as 0 (other keys can be anything)
print(aso_var[ANY][ANY][ANY]);  // print all; equivalent to print(aso_var);

最初のパラメーターは必須で、その他のパラメーターはすべてオプションです。オプション・パラメーターを指定しない場合は、デフォルトの出力オプションが使用されます。

注: 出力関数では一時トレースは許可されません。
マルチディメンション・キーを持つ連想配列の場合、キーは「|」区切りリストで出力され、値は同じ行に出力されます。キーが複数行の出力を生成する場合、キーは別個の行に出力され、値は新規行に出力されます。以下の例では、int 型の 3 つのキー・ディメンションと整数型の 1 つの値を持つ連想配列を含むスクリプトを示します。
aso1[0][“a”][2.5] = 100;
aso1[1][“b”][3.5] = 101;
print(aso1);
The output from previous print() function follows:
[key1               |    key2                |    key3]               |    value
0                   |    a                   |    2.5000000           |    100
1                   |    b                   |    3.5000000           |    101
以下の例では、型 intstktrace_t の 2 つのキー・ディメンションを持ち、文字列型の値を持つ連想配列を使用しています。
aso2[0][get_stktrace(-1)] = “abc”;
print(aso2);

The output from print() function above will be similar to:
[key1               |    key2]                                   |    value
0
                    |
                         0x100001b8
                         0x10003328
                         0x1000166c
                         0x10000c30
                         .read+0x288
                         sc_entry_etrc_point+0x4
                         .kread+0x0
                                                                 |
                                                                      abc

パラメーター

aso-name
出力する連想配列変数の名前。大括弧の中にすべてのディメンションのキーを指定することもできます。キー・ディメンションの中のすべてのキーに一致させるには、ANY キーワードを使用できます。
num-of-entires
出力するエントリー数を指定します。このパラメーターはオプションです。 すべてのエントリーを表示するには、0 を指定します。値が指定されていない場合は、セッションのデフォルトの出力オプションが使用されます。負の値は 0 と等価です。
flags
sort-type、sort-by、および list-value のフラグを指定します。 このパラメーターはオプションです。 フラグ sort-type、sort-by、および list-value の説明は『連想配列型』のセクションにあります。0 を指定すると、セッションのデフォルトの出力オプションが使用されます。
sort_key_ind
キー索引 (キー・ディメンション) は、出力のソートに使用されます。-1 を指定すると、最初のキーがソートに使用されます。最初のキーがソート可能なタイプでない場合は、出力はソートされません。

printf

目的

データをフォーマットしてトレース・バッファーにコピーします。

構文

void printf ( String format[ , data, ... ]);

説明

printf 関数は、format パラメーターに応じて、data パラメーターの値を変換、フォーマット、およびトレース・バッファーにコピーします。 構文が示すように、引数の可変リストが data パラメーターとして printf 関数に渡されます。 Vue は、C ライブラリーの printf サブルーチンでサポートされる変換指定子を %p 以外すべてサポートしています。

C ライブラリーの printf() 指定子以外に、Vue 言語は、もう 2 つの指定子 %A および %W をサポートします。

%Aprobev_timestamp_t 「t」をデフォルトの日付形式で表示します。 この形式は、set_date_format() 関数を使用して変更することができます。

%Wprobevue セッションの開始を基準として、probev_timestamp_t 「t」を秒数とマイクロ秒数で表示します。

%p – 指定された path_t 値の絶対ファイル・パスに対応する文字列を表示します。

%M – 指定された mac_addr_t 値の MAC アドレスを表示します。

%I – 指定された ip_addr_t 値の IP アドレスを、ドット 10 進形式 (IPv4 アドレスの場合) およびドット 16 進形式 (IPv6 アドレスの場合) で表示します。

%H – 指定された ip_addr_t 値のホスト名を、文字列、ドット 10 進形式、または 16 進形式で表示します。

注: IP アドレスがドメイン・ネーム・システム (DNS) によって解決される場合、printf 関数は対応するホスト名を表示します。そうでない場合、ドット 10 進または 16 進形式で IP アドレスを表示します。

printf 関数を使用して list 型の変数を印刷することはできません。 ただし、string 型の変数は、%s 変換指定子を使用して印刷できます。probev_timestamp_t 型の変数は、%lld 指定子または %16llx 指定子を使用して数値形式で印刷されます。probev_timestamp_t は、%A 指定子または %W 指定子を使用して日付形式で印刷されます。

次のスクリプトの例では、printf 関数を使用しています。

@@BEGIN
{
	String s[128];
	int i;
	float f;
	f = 2.3;

	s = "Test: %d, float = %f¥n";
	i = 44;

	printf(s, i, f);

	s = "Note:";
	printf("%s Value of i (left justified) = %-12d and right-justified = %12d¥n",
				s, i, i);

	printf("With a long format string that may span multiple lines, you " +
			"can use the '+' operator to concatenate the strings " +
			"in multiple lines into a single string: 0x%08x¥n", i); 

	exit();
}

パラメーター

format
トレース・バッファーに変更なしで直接コピーされるプレーン文字を含む文字列、および data パラメーターのフォーマット方法を示す 1 つ以上の変換指定子。
data
format パラメーターの変換指定子に対応するゼロ個以上の引数を指定します。

ptree

目的

プローブしているプロセスのプロセス・ツリーを表示します。

構文

void ptree ( int depth );

説明

ptree 関数は、プローブしているプロセスのプロセス・ツリーを表示します。 この関数は、親階層と子階層の両方を表示します。 パラメーターとして渡される深さは、表示が必要な子プロセスの深さを制御するのに役立ちます。 この関数は、BEGIN プローブ、END プローブ、または systrace プローブでは使用できません。 また、この関数は、PID が指定されている場合にのみ、間隔プローブで使用できます。

注: この関数はプローブから呼び出された場合は、カーネルで即座に実行されず、代わりにユーザー・スペースで後で実行するようにスケジュールに入れられます。 したがって、その間にプロセス・ツリーが変更された場合は、ptree 関数の出力が、その関数が実際に呼び出されたときのツリー構造と一致しない場合があります。

出力例

プロセス・ツリーの出力例は以下のとおりです。
PID              CMD

1                init
                   |
                   V
 3342460         srcmstr
                   |
                   V
 3539052         inetd
                   |
                   V
 7667750         telnetd
                   |
                   V
 6881336          ksh
                   |
                   V
 5112038          probevue
                   |
                   V
 7930038             tree    <=======
 6553782                |¥--tree
 4849828                |¥--tree
 6422756                    |¥--tree
 3408074                        |¥--tree
 5963846                        |¥--tree
 7864392                      |¥--tree
 7799006                         |¥--tree

パラメーター

パラメーター 説明
depth プロセスの子情報を表示している間に ptree 関数がトラバースする最大の深さを指定します。 -1 が渡されると、プロセスのすべての子が表示されます。

quantize

目的:

線形目盛りで値を量子化することで、連想配列のキーと関連の値をグラフィカル形式で出力します。

構文:

void quantize ( aso-name, int num-of-entries, int flags, int sort_key_ind)

説明:

この関数は、連想配列の値の線形値に基づいて、連想配列のエントリーをグラフィカル形式で表示します。特定のキー・セットを持つエレメントのみを出力する場合は、連想配列変数名と共に最初の引数でそれらのキーを使用することができます。特定のディメンション・キーのみを制限して、残りのディメンション内のすべてのキーを許可するには、ANY キーワードを使用できます。

最初のパラメーターを除いて、その他はオプション・パラメーターです。これらのオプション・パラメーターを指定しない場合は、デフォルトの出力オプションが使用されます。

パラメーター:

aso-name
出力する連想配列変数の名前。大括弧の中にすべてのディメンションのキーを指定することもできます。キー・ディメンションの中のすべてのキーに一致させるには、ANY キーワードを使用できます。
num-of-entries

出力するエントリー数を指定します。このパラメーターはオプションです。 すべてのエントリーを表示するには、0 を指定します。値が指定されていない場合は、セッションのデフォルトの出力オプションが使用されます。負の値は 0 と等価です。

flags
sort-type、sort-by、および list-value のフラグを指定します。このパラメーターはオプションです。 フラグ sort-type、sort-by、および list-value の説明は『連想配列型』のセクションにあります。0 を指定すると、セッションのデフォルトの出力オプションが使用されます。
sort_key_ind

出力のソートに使用するキーの索引 (キー・ディメンション)。-1 を指定すると、最初のキーがソートに使用されます。最初のキーがソート可能なタイプでない場合は、出力はソートされません。

qrange

このルーチンは、範囲のスロット番号を取得し、連想配列の値型として範囲データ型を追加します。

構文:

void qrange(aso[key], range_t range_data, int value);
void qrange(aso[key], range_t range_data, String value);

説明:

qrange ルーチンは、整数と文字列の両方の範囲型のスロット番号を検出できます。範囲型が整数型の場合、3 番目の引数型は整数でなければなりません。また範囲データ型が文字列の場合、3 番目の引数は文字列型でなければなりません。qrange ルーチンは渡された値が入るスロット番号を検出します。そのスロット番号のカウントは、連想配列内に値として保管されている範囲型について増分されます。

パラメーター:

aso[key]
指定されたキーを持つ連想配列。
range_data
range_t データ型。
value
value は、整数型または文字列型のいずれかです。

round_trip_time

目的

特定のソケット・ディスクリプターについて、TCP 接続の平滑化された往復時間を戻します。

構文

int round_trip_time(int sock_fd);

説明

round_trip_time 関数は、特定のソケット・ディスクリプターの、平滑化された往復時間 (srtt) を取得します。ストリーム・ソケット・ディスクリプターの場合は、有効な往復値を提供し、無効または非ストリーム・ソケット・ディスクリプターの場合は、平滑往復時間値として -1 を戻します。この関数は、uft プローブ・マネージャーおよび syscall プローブ・マネージャーでのみ使用可能です。

注: この関数では、probevctrl コマンドの num_pagefaults チューナブル値が 0 より大きいことが必要です。0 である場合、この関数は往復時間として -1 を戻します。

パラメーター

fd
ファイル・ディスクリプターまたはソケット・ディスクリプターの値。

set_aso_print_options

目的

連想配列のデフォルトの出力オプションを変更します。

構文

void set_aso_print_options( int num-of-entries, int flags);

説明

set_aso_print_options() 関数は、連想配列のデフォルトの出力オプションを変更します。ユーザーが指定できる出力オプションとその初期値は、『連想配列型』のセクションにリストされています。 この関数は BEGIN プローブでのみ使用できます。

パラメーター

num-of-entries
最初の 'n' 対のキーまたは値を出力することを指定します。0 の場合、すべてのエントリーが表示されます。
flags
これは、フラグ sort-typesort-bylist-value、および stack-raw を指定します。これらのフラグについては、『連想配列型』セクションを参照してください。これらのパラメーターはオプションです。

set_range

目的:

線形および累乗の範囲型データを初期化します。

構文:

void set_range(range_t range_data, LINEAR, int min, int max, int step);
void set_range(range_t range_data, POWER, 2);

説明:

set_range には 2 つの異なるバリアントがあります。 範囲データを線形範囲として初期化する場合は、フラグ LINEAR と、minmax、および step が引数として渡されます。累乗範囲を初期化する場合は、2 の POWER のフラグが引数として渡されます。 このルーチンは、渡された引数に基づいて範囲型を線形または累乗のいずれかとして初期化します。 線形範囲型のデータは、渡された値 minmax、および step で初期化されます。累乗範囲型のデータは累乗値を 2 として初期化されます。

パラメーター (線形範囲型の場合):

range_data
range_t データ型。
LINEAR
range_data 値の分布が線形であることを示す整数定数フラグ。
min
range_data の下限を指示します。
max
range_data の上限を指示します。
step
range_data の行ごとに、指定された値の範囲のサイズを指示します。min、max、および step の型は必ず整数 (int、short、long、long、long) でなければなりません。それ以外の型は使用できません。

パラメーター (累乗範囲型の場合):

range_data
range_t データ型。
POWER
値の分布が累乗 (POWER) 分布であることを示す整数定数フラグ。
累乗の値を示す定数。現時点では 2 の累乗のみがサポートされます。

set_date_format

目的

probev_timestamp_t データ型の表示に使用される日付形式を更新します。

構文

void set_date_format(String s);

説明

日付形式を更新します。

この関数は、日付形式に対して C ライブラリーの strftime() によってサポートされるすべての変換指定子をサポートします。strftime() によってサポートされない指定子はいずれも無効であり、デフォルトの形式が使用されます。

デフォルト形式
MM:DD:YYYY hh:mm:ss TZ
MM
10 進数としての月 (01 から 12)。
DD
10 進数としての日付 (01 から 31)。
YYYY
10 進数としての年 (例えば、1989)。
hh
10 進数としての 24 時の刻時 (00 から 23)。
mm
10 進数としての分 (00 から 59)。
ss
10 進数としての秒 (00 から 59)。
TZ
判別できる場合はタイムゾーン名 (例えば、CDT)。
注: set_date_format() 関数は、@@ BEGIN プローブでのみ呼び出されます。定数文字列が format として渡されなければなりません。

パラメーター

S – 日付形式を保持する文字列。

sockfd_netinfo

目的

特定のソケット・ディスクリプターの、ローカルおよびリモートのポートと IP アドレスの情報を取得します。

構文

void sockfd_netinfo(int sock_fd,  net_info_t ninfo);

説明

sockfd_netinfo 関数は、入力ソケット・ディスクリプターのローカル IP アドレス、リモート IP アドレス、ローカル・ポート番号、およびリモート・ポート番号の情報を取得します。この関数は、有効なソケット・ディスクリプターの有効なローカルおよびリモートのポート番号および IP アドレスの情報を取得します。無効なディスクリプターの場合、またはディスクリプターがソケット・タイプでない場合、0 を取得します。

注: この関数では、probevctrl コマンドの num_pagefaults チューナブル値が 0 より大きいことが必要であり、可能であれば 2 以上を推奨します。0 である場合、この関数は、ローカルおよびリモートのポートおよび IP アドレスの情報として無効な (0) を取得します。

パラメーター

fd
ファイル・ディスクリプターまたはソケット・ディスクリプターの値。
ninfo
特定のファイル・ディスクリプターのネットワークの 4 タプル (ローカルおよびリモートの IP アドレスとポート番号) 情報がコピーされる、スクリプト変数 net_info_t を指定します。

start_tentative、end_tentative

目的

一時トレース・セクションの開始と終了を示します。

構文

void start_tentative( String bufID );
void end_tentative( String bufID );

説明

これらの関数は、Vue 節にある一時トレース・セクションの開始と終了を示します。 一時トレース・セクションの中で囲まれた、トレース出力関数で生成されたトレース・データは、commit_tentative または discard_tentative 関数がこのデータをコミットまたは廃棄するために呼び出されるまで、一時的に保存されます。 end_tentative 関数はオプションです。この関数が指定されていない場合は、Vue 節の終了が一時トレース・セクションの終了を示すように暗黙的に想定されます。

生成された一時トレース・データは、bufID パラメーターで識別されます。このパラメーターは文字列定数またはリテラルであり、変数ではありません。 一時トレース・データは複数の異なる ID で同時に収集でき、それぞれ別々のブロックとしてコミットまたは廃棄できます。 ProbeVue は同一の動的トレース・セッションで最大 16 個の一時トレース・バッファーをサポートしているため、Vue スクリプトでは最大 16 個の異なるトレース ID を使用できます。 1 つの Vue 節には、複数の異なる ID をもつ複数の一時トレース・セクションを含めることができます。

パラメーター

パラメーター 説明
bufID 一時トレース・バッファー ID を示す文字列定数を指定します。

stktrace

目的

ランタイム・スタック・トレースを生成して印刷します。

構文

void stktrace ( int flags, int levels );

説明

stktrace 関数は、現行のプローブ・ポイントにあるスタック・トレースを印刷します。 デフォルトでは、スタック・トレースは、2 レベルまでの呼び出しチェーン・アドレスのみでコンパクトに生成されます。 スタック・トレースのフォーマットと内容を変更するには、flagslevels パラメーターを使用できます。 ProbeVue はページアウトされたデータを読み取れないため、スタックへのアクセス時にページ・フォールトが検出された場合はスタック・トレースが切り捨てられます。

stktrace 関数は値を戻しません。

パラメーター

パラメーター 説明
flags 0 に設定してデフォルトの動作を指定するか、または次のフラグを 1 つ以上指定します。
PRINT_SYMBOLS
アドレスではなくシンボル名を印刷します。
GET_USER_TRACE
デフォルトでは、プローブ・ロケーションがカーネル・スペース内にある場合、スタック・トレースはシステム呼び出しの境界で停止します。 このフラグは、トレースがユーザー・スペースまで、また levels パラメーターで指定されたレベル数まで続くことを示します。
GET_ALL_MSTS
デフォルトで、プローブが開始された 1 つのコンテキスト (マシン状態) のみのスタック・トレースが収集されます。このフラグが指定される場合、その CPU のチェーニングされたすべてのコンテキストのスタック・トレースが表示されます。
複数のフラグを渡す場合は、OR 演算子 (つまり '|' 演算子) を使用して論理和として渡す必要があります。このパラメーターの変数を渡すことはできません。
levels スタック・トレースが印刷される最大のレベル数を示します。 値 -1 は、スタック・バック・チェーンが有効な範囲までトラバースされることを示します。 デフォルト値 0 は、2 レベルまでトラック・バックします。
注: 複数の mst からのエントリーが表示される場合、mst 境界は、「-」文字で構成される行で区切られます。 この行も 1 レベルと見なされます。つまり、表示されるエントリーは、提供される level パラメーターから、分離行数を引いた数です (level パラメーターが -1 である場合を除く)。

strstr

目的

別の文字列内の文字列を戻します。

構文

String strstr( String s1, String s2 ); 

説明

strstr 関数は、s2 パラメーターで指定された文字列が s1 パラメーターで指定された文字列に最初に出現したのを検出し、このロケーションから開始する s1 パラメーターの文字を含む新しい文字列を戻します。 この操作では、s1 パラメーターまたは s2 パラメーターのどちらも変更されません。 s2 パラメーターで指定された文字列が s1 パラメーターに一度も出現しなかった場合、この関数は空文字列を戻します。

注: この関数の動作は、C ライブラリーの strstr サブルーチンとは異なります。

パラメーター

パラメーター 説明
s1 文字列を検索する文字列を指定します。
s2 検索する文字列を指定します。

sum

目的

リスト内のすべてのエレメントの合計を戻します。

構文

long long sum ( List listvar );

説明

sum 関数は、listvar パラメーターで指定されたリスト変数に追加されたすべてのエレメントの合計を戻します。

パラメーター

パラメーター 説明
listvar list 型の変数を指定します。

timestamp

目的

現在のタイム・スタンプを戻します。

構文

probev_timestamp_t timestamp( );

説明

timestamp 関数は、probev_timestamp_t 抽象データ型の現在のタイム・スタンプを戻します。 抽象ではありますが、値には次の属性があります。

  • 複数の異なる CPU から同時に呼び出された場合は、等しい値または近い値を戻します。
  • timestamp 関数が 2 回呼び出され、2 回目の呼び出しが時間的に後で発生したと構造的に保証される場合は、2 回目の呼び出しに対して戻された値が、最初の呼び出しで戻された値より大きいか等しくなります (2 回の呼び出しの間にシステムがリブートされなかった場合)。

2 つの異なるシステムで timestamp 関数により戻された値には関連性はありません。 コンパイラーでは戻り値を 64 ビット整数として扱うように指示されますが、これを行うと互換性の問題が発生する可能性があります。

注: 低分解能のタイム・スタンプが受け入れ可能な場合は、この関数の代わりに、lbolt カーネル変数 (値はブート後のティック数を示す) または time カーネル変数 (値はエポック (1970 年 1 月 1 日) からの秒数を示す) の両方を使用できます。
typedef long long time_t;
	__kernel time_t lbolt;   	/* number of ticks since last boot     */
	__kernel time_t time;    	/* memory mapped time in secs since epoch  */

パラメーター

timestamp 関数はパラメーターを取りません。

trace

目的

ロー・データを 16 進形式でトレース・バッファーにコピーします。

構文

void trace ( data );

説明

trace 関数はパラメーターを 1 つ取ります。このパラメーターは変数でなければなりません。 trace 関数は式を受け入れません。

trace 関数は、渡された引数の値をトレース・バッファーにコピーします。 引数には任意のデータ型を指定でき、トレース・バッファーにコピーされるデータのサイズはその元々のサイズに基づいています。 このため、整数引数の場合は 4 バイトがコピーされ、ポインターの場合は 4 または 8 バイトがコピーされ (実行が 32 ビット・モードか 64 ビット・モードのどちらかにより異なる)、struct 型の引数の場合は構造体のサイズがコピーされます。 String 型の変数の場合は、コピーされるバイト数は宣言された文字列の長さです (この長さは変数にある文字列の長さとは異なります)。 probev_timestamp_t 型の変数は少なくとも 8 バイト長です。

トレース報告プログラムにより、trace 関数で作成された 16 進データが追加のフォーマットなしで 4 文字ずつ表示されます。

注: trace 関数はパラメーターとして list 型の変数も受け入れますが、この場合の出力は役に立ちません。

パラメーター

パラメーター 説明
data トレース・バッファーにコピーするデータ引数。