Skip to main content

Fujitsu

Japan

ダイナミックトレース(DTrace):Oracle Solaris 10 新機能
機能編

DTraceの仕組み

DTraceでは、システムが提供する70,000もの観測ポイントを利用して、システムのパフォーマンス低下の原因やシステムエラーの発生原因を調査します。

Dtraceを利用するためには、まずDスクリプトを用意します。Dスクリプトには、情報収集する観測ポイントや収集したい情報を記述します。Dスクリプトの実行により、観測ポイントにおける情報を収集することができます。例えば、データの内容が正しいか、処理時間が遅いものはないか、同じシステムコールを何度も呼び出していないか、等の情報を得ることができます。
収集した情報から、システムボトルネックやエラーの原因を調査して、対処方法を検討することができます。

Dスクリプトの書式

それでは、システムを観測するための指示、すなわちDスクリプトの記述方法について説明します。
システム管理者はD言語と呼ばれるプログラミング言語を用いてDスクリプトを作成します。D言語は、システム管理者が簡単に習得できるように、C言語によく似た形式になっています。

システム管理者は、Dスクリプトに「観測ポイント」、「観測条件」、「出力形式」を記述します。

観測ポイント

Dスクリプトの1行目には観測ポイントを指定します。観測ポイントは、プロバイダ・モジュール・ファンクション・プローブの4つのフィールドで構成されており、「:」で区切って指定します。

  • プロバイダ:プローブを提供するカーネルモジュールセット
  • モジュール:プローブが属するモジュール名
  • ファンクション:プローブが属する関数名
  • プローブ:プローブの名前

観測条件

プローブにおいてどのような条件の時に観測を行うかを指定します。条件文は // で囲みます。

出力形式

プローブでの観測結果を、どのような形式で出力するかを指定します。アクション文は{ }で囲みます。

なお、スクリプト書式は以下のようにコマンド書式で実行することも可能です。

DTraceの動作例

DTraceの動作を説明します。ここではシステムパフォーマンス調査の一例として、CPU番号0で実行されたプロセスがexec(2)システムコールを実行した直後の時間とプロセス名を調べる方法を説明します。

まず、Dスクリプトを準備します。
1行目では観測ポイントであるプローブを指定します。ここでは、exec(2)システムコール(syscall)を実行した直後(return)の状態を調べるために、プロバイダはsyscall、関数はexec、名前はreturnを指定しています。
2行目では条件文を指定します。ここではCPU番号が0の場合を指定しています。
3行目の出力形式には、観測された時間(walltimestamp)とexec(2)システムコールを実行したプロセス名(execname)を表示するように指定しています。

次にDスクリプトを実行します。まず、端末エミュレータAでは、 dtrace(1M)コマンドを使ってDスクリプトの内容を実行します。
例えば、DTraceが動作しているか確認するために、端末エミュレータBでdate(1)やls(1)などのコマンドを打ち込みます。すると、プローブで観測された情報が端末エミュレータA上で表示されることが確認できます。

詳細はオラクル社のSolaris動的トレースガイド(オラクル社へリンク)をご覧ください。

評価

DTraceがInfoWorld 2005 Innovator Awardを授賞しました。
他社OSにはないシステム可用性向上機能が高く評価されました。

DTrace and Predictive Self-Healing herald Sun’s future(出典:Info World)

[記事原文抜粋]
Linux may be catching up to where Solaris was years ago, but ideas and technologies such as these prove the Solaris engineers are still an enclave of OS innovation.

[抄訳]
予測的セルフヒーリング、Dtraceのようなアイデア、OSイノベーションはSolarisエンジニアの独壇場です。

ダイナミックトレース目次

  • 概要
  • 機能編
    ダイナミックトレースの仕組み、書式、動作例を紹介