18 DTraceのバージョニング
「DTraceの安定性機能」では、作成したDプログラムの安定性属性を確認するためのDTrace機能について説明します。適切な安定性属性を持つDプログラムを作成したら、そのプログラムを特定のバージョンのDプログラミング・インタフェースにバインドすることもできます。
Dインタフェースのバージョンは、Dコンパイラから提供される型、変数、関数、定数およびトランスレータから構成される特定のセットに適用される、ラベルのようなものです。特定のバージョンのDプログラミング・インタフェースへのバインドを指定すると、次回以降のバージョンのDTraceでこのプログラムを再コンパイルする際、新しいバージョンのDプログラミング・インタフェースで定義されるプログラム識別子と、今回ユーザーが定義したプログラム識別子の競合が発生しなくなります。永続的なスクリプトとしてインストールするDプログラムや、階層化ツールで使用するDプログラムには、バージョンのバインドを指定する必要があります。DTraceスクリプトの使用方法の詳細は、「スクリプトの作成」を参照してください。
ノート:
Oracle LinuxにおけるDTraceのバージョニングは現在、他のオペレーティング・システム・プラットフォームのDTraceバージョンと相互運用性がありません。
バージョンおよびリリース
- 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プロバイダ」を参照してください。