18 DTraceのバージョニング

「DTraceの安定性機能」では、作成したDプログラムの安定性属性を確認するためのDTrace機能について説明します。適切な安定性属性を持つDプログラムを作成したら、そのプログラムを特定のバージョンのDプログラミング・インタフェースにバインドすることもできます。

Dインタフェースのバージョンは、Dコンパイラから提供される型、変数、関数、定数およびトランスレータから構成される特定のセットに適用される、ラベルのようなものです。特定のバージョンのDプログラミング・インタフェースへのバインドを指定すると、次回以降のバージョンのDTraceでこのプログラムを再コンパイルする際、新しいバージョンのDプログラミング・インタフェースで定義されるプログラム識別子と、今回ユーザーが定義したプログラム識別子の競合が発生しなくなります。永続的なスクリプトとしてインストールするDプログラムや、階層化ツールで使用するDプログラムには、バージョンのバインドを指定する必要があります。DTraceスクリプトの使用方法の詳細は、「スクリプトの作成」を参照してください。

ノート:

Oracle LinuxにおけるDTraceのバージョニングは現在、他のオペレーティング・システム・プラットフォームのDTraceバージョンと相互運用性がありません。

バージョンおよびリリース

Dコンパイラは、バージョン文字列を使用して、特定のソフトウェア・リリースに対応する型、変数、関数、定数およびトランスレータから構成されるセットにラベルを付けます。バージョン文字列は、10進整数をピリオドで区切った次の形式の文字列です。
x

メジャー・リリース

x.y

マイナー・リリース

x.y.z

マイクロ・リリース

バージョンを比較するときは、整数を左から右に比較します。最も左の整数が同じでない場合は、大きい方の整数の文字列が、より高い(したがって、より新しい)バージョンです。最も左の整数が同じである場合は、左から右の順で次の整数に進んで比較が続けられ、結果が決まります。バージョン文字列の一部が指定されていない場合は、その部分にゼロが入っているものと解釈してバージョンが比較されます。

DTraceのバージョン文字列は、インタフェースのバージョンの標準的な命名方法に対応しています。Dプログラミング・インタフェースに変更が加えられると、新しいバージョン文字列と比較されます。次の表では、DTraceで使用されるバージョン文字列と、対応するDTraceソフトウェア・リリースの意味をまとめています。

表18-1 DTraceリリース・バージョン

リリース バージョン 意味

メジャー

x.0

メジャー・リリースには、様々な標準の改訂(互換性のない場合もある)への対応が盛り込まれます。まれに、標準インタフェースや安定インタフェースの変更、削除、置換が含まれる場合もあります(「DTraceの安定性機能」を参照)。Dプログラミング・インタフェースの初期バージョンのラベルは1.0です。

マイナー

x.y

x.0またはそれ以前のバージョン(yはゼロ以外)と比較して、新しいマイナー・リリースに通常含まれるのは、主要でない機能の追加の他に、標準インタフェースや安定インタフェースで互換性のある変更、発展中インタフェースで互換性がない場合もある変更、変更の可能性ありインタフェースで互換性がないと考えられる変更などです。これらの変更には、新しい組込みD型、変数、関数、定数およびトランスレータが含まれることがあります。また、マイナー・リリースでは、以前に廃止のラベルが付けられたインタフェースがサポートされなくなる場合があります(「DTraceの安定性機能」を参照)。

マイクロ

x.y.z

マイクロ・リリースは、以前のリリースとインタフェースの互換性が保たれる(zはゼロ以外)一方で、通常はバグ修正、パフォーマンス拡張機能、ハードウェアの追加サポートなどが含まれます。

通常、新しいバージョンのDプログラミング・インタフェースでは、以前のバージョンで提供されていた機能の上位集合が提供されます。ただし、削除された「廃止」インタフェースは例外です。

バージョニングのオプション

デフォルトでは、dtrace -sコマンドを使用してコンパイルするか、dtrace -P-m-f-nまたは-iコマンド・オプションを使用して指定するDプログラムは、Dコンパイラで提供される最新のバージョンのDプログラミング・インタフェースにバインドされます。

現在のDプログラミング・インタフェースのバージョンを確認するには、-Vオプションを実行します。

# dtrace -V
dtrace: Sun D 1.6.4

ノート:

-vVの組合せを指定すると、dtrace-utilsパッケージのユーザー空間バイナリのバージョンなど、他のバージョン情報が表示されます。

# dtrace -Vv
dtrace: Sun D 1.6.4
This is DTrace 1.0.4.
dtrace(1) version-control ID: 364a014be59b349d6222991d651d38422f170e7e
libdtrace version-control ID: 364a014be59b349d6222991d651d38422f170e7e

特定のバージョンのDプログラミング・インタフェースにバインドする場合は、適切なバージョン文字列にversionオプションを設定します。「オプションおよびチューニング可能パラメータ」で説明されている、その他のDTraceオプションと同様に、次のようにバージョン・オプションを設定できます。

# dtrace -x version=1.6 -n 'BEGIN{trace("hello");}'

あるいは、次のように、#pragma D option構文を使用して、Dプログラムのソース・ファイルにオプションを設定することもできます。

#pragma D option version=1.6

BEGIN
{
  trace("hello");
}

#pragma D option構文を使用してバージョン・バインディングをリクエストする場合は、このディレクティブをDプログラム・ファイルの最上部、他の宣言やプローブ節よりも前に置く必要があります。バージョン・バインディング引数が有効なバージョン文字列でない場合、またはDコンパイラで提供されていないバージョンを参照している場合、エラー・メッセージが出力され、コンパイルは失敗します。バージョン・バインディング機能を使用すると、古いバージョンのDTrace上でDスクリプトが実行された場合に、わかりやすいエラー・メッセージを生成して失敗させることもできます。

Dコンパイラは、プログラムの宣言や節をコンパイルする前に、インタフェースのバージョンに適したD型、関数、定数、およびトランスレータから構成されるセットをコンパイラの名前空間にロードします。したがって、プログラムで定義されている変数、型およびトランスレータに加えて、このプログラムからアクセスできる識別子、型およびトランスレータから構成されるセットも、ユーザーが指定したバージョン・バインディング・オプションによって制御されます。バージョン・バインディングされていると、プログラムのソース・コード内の宣言と矛盾し、コンパイル・エラーの原因となる識別子やトランスレータの定義が含まれるような新しいインタフェースが、Dコンパイラによってロードされることはありません。将来のバージョンのDTraceで提供されるインタフェースと矛盾しない識別子名を選択するためのヒントは、「識別子名およびキーワード」を参照してください。

プロバイダのバージョニング

DTraceプロバイダで提供されるインタフェース(プローブとプローブ引数)は、Dコンパイラで提供されるインタフェースとは異なり、Dプログラミング・インタフェースや、前述したバージョン・バインディング・オプションの影響を受けません。使用可能なプロバイダ・インタフェースは、オペレーティング・システム・カーネル内のDTraceソフトウェアへの、コンパイルされたインストゥルメンテーションのロードの一環として確立されます。これらのインタフェースは、使用している命令セット・アーキテクチャ、オペレーティング・プラットフォーム、プロセッサ、Oracle Linuxシステムにインストールされているソフトウェア、および現在のセキュリティ権限によって異なります。DコンパイラとDTraceランタイムは、Dプログラム節に記述されたプローブを検査し、Dプログラムからリクエストされたプローブを使用できない場合は常にエラー・メッセージを返します。これらの機能は、Dプログラミング・インタフェースのバージョンとは異なる概念に基づいています。DTraceプロバイダは、Dプログラムでの定義と矛盾するインタフェースをエクスポートしないためです。言い換えると、Dではプローブを有効にすることはできても定義はできません。また、プローブ名は、他のDプログラム識別子とは別の名前空間内に保持されます。

Oracle Linuxシステムで使用できるプロバイダとプローブのセットを調べるには、dtrace -lコマンドを使用して、任意で-v オプションを追加します。一般的なプロバイダおよびプローブの詳細は、「DTraceプロバイダ」を参照してください。