DTrace ユーザーガイド

DTrace の機能

DTrace フレームワークでは、「プローブ」と呼ばれる計測ポイントを使用します。DTrace ユーザーは、プローブを使って、カーネルプロセスやユーザープロセスの関連情報を記録したり表示したりできます。それぞれの DTrace プローブは、特定の動作によって有効になります。プローブを有効にすることを「起動」と呼びます。たとえば、任意のカーネル関数に値が渡されたときに起動するプローブがあるとします。このサンプルプローブでは、次の情報を表示できます。

プローブの起動時に DTrace によって実行される「アクション」を指定できます。DTrace のアクションは、通常、タイムスタンプや関数の引数といった重要なシステム動作を記録します。

プローブは、「プロバイダ」によって実装されます。プローブのプロバイダは、特定のプローブを起動可能にするカーネルモジュールです。たとえば、関数境界トレースプロバイダ fbt からは、全カーネルモジュール内のほぼすべての関数の開始 (entry) プローブと終了 (return) プローブが提供されています。

DTrace には、多数のデータ管理機能が用意されています。DTrace ユーザーは、これらの機能を使ってプローブから報告されるデータを限定し、不要なデータの生成とフィルタリングにかかるオーバーヘッドをなくすことができます。DTrace には、ブート処理中にトレースを行なったり、カーネルのクラッシュダンプからデータを取得したりする機構もあります。DTrace の計測機能はすべて動的です。そのときに使用されるプローブだけが個別に有効になります。アクティブでないプローブに、計測機能用コードはありません。

DTrace フレームワークと対話するすべてのプロセスを、DTrace の「コンシューマ」と呼びます。Dtrace の一次コンシューマは dtrace(1M) ですが、これ以外のコンシューマも存在します。それらの追加コンシューマのほとんどは、lockstat(1M) のような既存のユーティリティーの新規バージョンです。DTrace フレームワークでは、同時に実行できるコンシューマの数に制限はありません。

DTrace の動作は、D 言語で記述されたスクリプトを使って変更できます。D 言語は、C 言語とよく似た構造を持つ言語です。D 言語では、カーネル C データ型、カーネル静的変数、およびカーネル大域変数にアクセスできます。D 言語は ANSI C 演算子をサポートします。