SDTプロバイダ

静的定義トレース(SDT)プロバイダ(sdt)は、ソフトウェア・プログラマが正式に指定した位置にプローブを作成します。したがって、SDTプロバイダは主に、新しいプロバイダの開発者のにとってのみ関心の対象になります。ほとんどのユーザーは、他のプロバイダを使用して間接的にのみSDTにアクセスします。

プログラマは、SDTメカニズムを使用して、DTraceユーザーにとって重要な位置を意識的に選択し、それぞれの位置のセマンティクス情報をプローブ名によって伝えることができます。

重要な点として、プローブを登録することにより、SDTはメタプロバイダとしても機能します。これにより、ioprocschedなどの他のプロバイダから取得されたように表示することもできます。

プローブの名前の安定性とデータの安定性はどちらも非公開ですが、これはカーネルの実装を反映しており、これらのインタフェースが維持されることを確約するという意味ではありません。

sdtプローブの作成

デバイス・ドライバの開発者であれば、作業中のOracle Linuxドライバ用にsdtプローブを作成することに関心がある場合があります。SDTの無効化されたプローブの影響は、いくつかのno-operationマシン命令のコストのみになります。したがって、必要に応じてsdtプローブをデバイス・ドライバ・コードに追加するようにしてください。これらのプローブは、パフォーマンスにマイナスの影響を及ぼすことがないかぎり、出荷コードに残しておくことができます。

DTraceには、アプリケーション開発者がユーザー空間の静的なプローブを定義するためのメカニズムも用意されています。

プローブの宣言

sdtプローブは、<linux/sdt.h>DTRACE_PROBEマクロを使用して宣言されます。

SDTベースのプローブのモジュール名と関数名は、それぞれプローブのカーネル・モジュール名と関数名に対応しています。DTraceでは、プローブ記述のプローブの識別に使用されるタプルの一部としてカーネル・モジュール名と関数名が含まれているため、プローブ名を考えるときにこの情報を明示的に含める必要はありません。DTraceプログラムでプローブを参照するときにネームスペースの衝突を回避するために、モジュールと関数名を指定することもできます。mymoduleがインストールしたプローブと、DTraceユーザーに表示されるフル・ネームをリストするには、dtrace -l -m mymodule コマンドを使用します。

プローブの名前は、DTRACE_PROBEマクロに指定された名前に依存します。その名前に連続する2つのアンダースコア(__)が含まれていない場合、プローブの名前はマクロに記述されたとおりです。名前に連続する2つのアンダースコアが含まれている場合、プローブ名では連続するアンダースコアが単一のダッシュ(-)に変換されます。たとえば、DTRACE_PROBEマクロでtransaction__startが指定されている場合、SDTプローブはtransaction-startという名前になります。この置換により、有効なC識別子ではないマクロ名を文字列を指定せずにCコードで指定できます。

また、SDTはメタプロバイダとしても機能し、プローブを登録することにより、独自の専用モジュールを持たないioprocおよびschedなどの他のプロバイダからのプローブのように表示することもできます。たとえば、kernel/exit.cには、<linux/sdt.h>に次のように定義されている、DTRACE_PROCマクロのコールが含まれています。

# define DTRACE_PROC(name) \
         DTRACE_PROBE(__proc_##name);

このようなマクロを使用するプローブは、sdt以外のプロバイダからのプローブのように表示されます。name引数に含まれる先頭の2つのアンダースコア、プロバイダ名および末尾のアンダースコアは、プロバイダを一致させるために使用され、プローブ名には含まれません。

sdtプローブの引数

sdtプローブの引数は、対応するDTRACE_PROBEマクロ参照のカーネル・ソース・コードに指定された引数です。sdtプローブを宣言するとき、プローブ引数でポインタの間接解除やグローバル変数からのロードを行わないことで、無効化されたプローブの影響を最小限にできます。ポインタの間接解除もグローバル変数のロードも、プローブを有効化するD関数で安全に実行できるため、DTraceユーザーは必要なときにのみ、これらの関数をリクエストできます。

sdtの安定性

sdtプロバイダは、DTraceの安定性メカニズムを使用してその安定性を記述します。これらの値を、次の表に示します。

要素 名前の安定性 データの安定性 依存クラス

プロバイダ

発展中

発展中

ISA

モジュール

非公開

非公開

不明

関数

非公開

非公開

不明

名前

非公開

非公開

ISA

引数

非公開

非公開

ISA