0.4.0 (2013年9月20日)
カーネル・リリース:
3.8.13-16.el6uek
新機能:
-
fasttrap (ユーザー・スペース・トレースに使用)などのメタプロバイダのサポート。メタプロバイダでは、(必要に応じて)プロバイダを動的にインスタンス化するためのフレームワークを実装します。
-
ユーザー・スペース静的定義トレース(USDT)は、ユーザー・スペース実行可能ファイルおよびライブラリでSDTに似たプローブをサポートします。通常のSDTに似たプローブとis-enabledプローブの2種類のプローブを使用できます。USDTのサポートに新しいヘッダー・ファイル(sys/sdt.h)がインストールされます。
-
fasttrapプロバイダは実装されていますが、現在はUSDTプローブのみがサポートされています。
-
シンボル参照が動作するようになりました。stack()とustack()が、&のようにシンボルを出力するようになりました。ustack()は、dlopen()とdlmopen()、およびDT_NEEDEDでロードされたライブラリ内のシンボルを参照できます。ユーザー・スペース・プロセスにおけるグローバル・シンボルのシンボル参照では、シンボルの介入およびその他すべてのシンボルの順序指定方法が考慮されます。関与するマシンの一部は、GNU Cライブラリの特定のバージョンに対して実行されるプログラムでのみ動作します。(OELで出荷されたglibcのバージョンでは常に機能し、互換性のないglibcが使用中であるように見える場合は、シンボルの介入をサポートしない単純なアプローチまたはdlmopen()にフォールバックします)。
これはカーネルの新しいマシン(特にwaitfd()およびPTRACE_GETMAPFD)に依存しているため、以前のDTraceカーネルでは機能しません。
-
-xevaltime={preinit, postinit, main}が機能するようになりました。次の注意事項があります。
-
postinit (デフォルト)はmainと同等です。
-
静的にリンクされたバイナリでは、preinitはexecと同等であり、ld.soの初期化(このようなバイナリでmain()の後に発生)をスキップすることはできません。
-
ストリップされ、静的にリンクされたバイナリ、postinitおよびmainはpreinitと同等です。これは、シンボル表がない場合にmainシンボルを検索できないためです。
-
-
DTRACE_OPT_*という名前の環境変数からDTraceオプションを設定できるようになりました。次に例を示します:
export DTRACE_OPT_INCDIR=/usr/lib64/dtrace:/usr/include/sys
ユーザーから見える内部の変更:
-
CTFデータが格納されるELFセクションが.dtrace_ctfから.ctfに変更されました。
-
内部カーネル・シンボルのストレージ表現が改善され、起動時のDTraceメモリー使用量が1MBほど節約されます。
-
libdtraceパブリックAPIヘッダーは、その引数に名前を付けるようになりました。その他のいくつかのlibdtrace関数のプロトタイプが変更されました。「INCOMPATIBILITIES」を参照してください。
-
Solarisのマニュアルに記載されていない2つのlibproc環境変数が削除されました。これは、これらの環境変数によって動作が調整されたコードがもう存在しないためです。
-
オーバーヘッドの低い新しいデバッグ・マシン。環境内のDTRACE_DEBUG=signalをエクスポートすると、DTraceがSIGUSR1によってヒットした場合にのみデバッグ出力が表示され、それまでのすべてのprintf()ロック・オーバーヘッドが回避されます。リング・バッファを使用してデバッグ出力を停止します。デフォルトでは、サイズは100Mbで、DTRACE_DEBUG_BUF_SIZE変数を介して変更可能です(サイズはMB単位です)。
-
以前はメタプロバイダとして定義されていたもの(後述する「0.2.0」を参照)は、実際はマルチプロバイダとして定義する方が適しています。つまり、プローブがすべて同じプロバイダ(sdt)によって提供されていてもプロバイダに一緒にグループ化されるSDTなど、基本的に単一の実装(の大半)を共有する複数のプロバイダを処理するプロバイダ・フレームワークです。
-
適切なカーネルのDTraceヘッダー・ファイル、カーネル・モジュールおよびユーザー・スペース・ユーティリティが、重複を回避して、より一貫性のあるクリーンな設計を提供するために再構築されました。また、カスタム・コンシューマやその他のDTrace関連ユーティリティのサポートも向上します。
-
systraceプロバイダがLinuxカーネル(2.6.39から3.8.13の間)の変更点に対応するように更新されました。
バグ修正:
-
ERRレジスタに適切な値を取得できるようになりました。
-
ustack()およびjstack()アクションは、結果配列の最初の要素としてPIDを正しく渡しませんでした。
-
ustack()アクションの実装が置き換えられました。
-
不明瞭なロックの問題がいくつか解決されました。
-
arg5からarg9の正しい処理。
-
-hおよび-Gコマンドライン・オプションが機能します。
-
正の整数のみを受け取るDTraceオプションに渡された負の値が、正しくエラーと診断されます。
既知の問題点:
-
現在、実行中のdtraceをkill -9で強制終了すると、他のプロセスでブレークポイントが未処理のままになることがあります(これらはいずれ強制終了される可能性があります)。これは、将来的に修正されます(多くの場合でブレークポイントを使用しないようにします)。