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); }