DTrace ユーザーガイド

第 1 章 概要

DTrace は、Solaris に組み込まれた包括的な動的トレース機能です。DTrace を使用できるのは、システム管理者またはアプリケーション開発者です。実行中の本稼働システム上で安全に使用できます。DTrace には、ユーザープログラムの動作やオペレーティングシステムの動作を検査する機能があります。DTrace ユーザーは、D スクリプト言語を使ってカスタムプログラムを作成できます。カスタムプログラムを使って、システムを動的に計測できます。カスタムプログラムを使用すると、特定のアプリケーションの動作に関する問題に対して、簡潔な答えをすばやく得ることができます。

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 演算子をサポートします。

アーキテクチャーの概要

DTrace の機能は、次のコンポーネントで構成されています。

DTrace プロバイダ

プロバイダは、システムを計測する方法を示すものです。プロバイダは、DTrace フレームワークでプローブを使用できるようにします。DTrace はプロバイダに、プローブをいつ有効にするかという情報を送信します。プローブが有効にされて起動すると、プロバイダから DTrace に制御が移ります。

プロバイダは、カーネルモジュールのセットとしてパッケージ化されています。各モジュールは、特定の種類の計測機能を実行することにより、プローブを生成します。各プロバイダは、DTrace の使用時に、DTrace フレームワークに提供可能なプローブを発行できます。いずれかのプローブを発行したら、トレースアクションを有効にして、プローブに結合できます。

一部のプロバイダは、ユーザーからのトレース要求に基づいて、プローブを新規作成できます。

DTrace プローブ

プローブには、次の属性があります。

この 4 つの属性のセットが、各プローブを一意に識別するプローブ指定子となります。次の形式で指定します。provider:module:function:name。各プローブには、一意の整数値 ID も割り当てられています。

DTrace の述語

述語とは、スラッシュ (/ /) で囲まれた式です。プローブの起動時に述語の評価が行われ、関連アクションを実行するべきかどうかが決定されます。述語は、D プログラムでより複雑な制御フローを構築するために使用する主要な条件構文です。すべてのプローブで、プローブ節の述語部分は省略可能です。述語部分を省略した場合、そのプローブの起動のたびに指定のアクションが実行されます。

述語式では、任意の D 演算子を使用できます。述語式は、変数、定数などの D データオブジェクトを参照します。述語式の評価結果は、整数型またはポインタ型の値にする必要があります。すべての D 式と同じく、ゼロ値は偽、ゼロ以外の値は真と解釈されます。

DTrace アクション

アクションは、カーネル内で DTrace 仮想マシンが実行する文であり、ユーザーによるプログラムが可能です。アクションには、次のような性質があります。

D スクリプト言語

単純な関数の場合、コマンド行から直接 dtrace コマンドを使用して、DTrace フレームワークを呼び出すことができます。DTrace を使ってより複雑な関数を実行する場合は、D スクリプト言語でスクリプトを作成します。DTrace で使用する特定のスクリプトをロードする場合は、-s オプションを使用します。D スクリプト言語の使用方法については、第 3 章「D 言語を使ったスクリプトの作成」を参照してください。