Solaris 動的トレースガイド

ring ポリシー

DTrace の ring バッファーポリシーは、障害を引き起こすイベントをトレースするときに役立ちます。障害の再現に時間がかかるときは、最新のデータだけを保存したい場合があります。主バッファーがいっぱいになると、トレースは最初のエントリに戻り、一番古いトレースデータが上書きされます。リングバッファーを使用するには、bufpolicy オプションに文字列 ring を設定します。


# dtrace -s foo.d -x bufpolicy=ring

dtrace(1M) でリングバッファーを作成する場合は、処理が終了するまで何も出力されません。リングバッファーはその時点で消費され、処理されます。dtrace は、リングバッファーを CPU 順に処理します。CPU のバッファー内のトレースレコードは、古いものから順に並んでいます。switch バッファリングポリシーの場合と同じく、CPU の異なるレコード間の順序付けは行われません。こうした順序付けが必要な場合は、トレース要求の一部として、timestamp 変数をトレースする必要があります。

以下は、#pragma option 指令を使ってリングバッファリングを有効にする例です。

#pragma D option bufpolicy=ring
#pragma D option bufsize=16k

syscall:::entry
/execname == $1/
{
	trace(timestamp);
}

syscall::rexit:entry
{
	exit(0);
}