0.3.0 (2012年9月14日)

カーネル・リリース:

2.6.39-201.0.1.el6uek

新機能:

  • CTFのサポート。これによって、グローバル・スコープで宣言されたすべてのカーネル・タイプがDTraceスクリプトに公開されます(単一ファイルに対してプライベートなものであっても)。静的と宣言されていないすべてのグローバル・カーネル変数は、`演算子で外部変数として使用することもできます。

    カーネル全体のシンボルのモジュールはvmlinuxと呼ばれますが、名前としてgenunixを使用して、スクリプトの移植性を高めることもできます。

    カーネル提供のファイル/proc/kallmodsymsと同様に、この機能が動作するには、互換性のあるカーネルのカーネル・モジュールをDTraceから参照できる必要があります。DTraceは、カーネル・モジュールなし、/procの表示なし、またはモジュールにタイプ情報が含まれていないカーネルで動作しますが、カーネル・タイプまたは変数は使用できません。(次の-xprocfspathおよび-xmodpathを参照してください。)

  • curcpu組込み変数が、現在アクティブなCPUのCPU情報構造へのポインタを提供するDIF組込み変数としてLinuxに実装されました。

  • 新しいDIFサブルーチンd_path()が実装されました。このサブルーチンは、引数としてパス構造へのポインタを取り、そのパスのフルパス名を表す文字列を返します。

  • raise()アクションが実装されました。このアクションにより、Dスクリプトは現在のタスクでシグナルを発生させることができます。

  • ioプロバイダ・プローブが実装されました。SDTプローブstart、wait-start、wait-done、doneが提供されます。

  • procプロバイダが実装されました。SDTプローブcreate、exec、exec-failure、exit、lwp-create、lwp-exit、lwp-start、signal-clear、signal-discard、signal-handle、signal-send、startが提供されます。

  • schedプロバイダが実装されました。SDTプローブchange-pri、dequeue、enqueue、off-cpu、on-cpu、preempt、remain-cpu、sleep、surrender、tick、wakeupが提供されます。

  • io、procおよびschedプロバイダ・プローブの引数マッピングが提供されました。この情報は、ユーザー・スペース・コンシューマで使用されます。

新しい依存関係:

  • DTraceが、Solaris libctfタイプ・ストレージ・ライブラリの変更されたGPLedポートであるlibdtrace-ctfに依存するようになりました。その名前にもかかわらず、Solaris CTFファイルを読み取ることはできません。ファイル形式に互換性がありません。

新規オプション:

  • -xprocfspath: 設定されている場合は、/procへのパスを指定します。chrootで役立つ場合があります。ただし、/procを別の場所に移動すると、glibcなどが破損することがあります。

  • -xmodpath: 設定されている場合は、/lib/modules/$(uname -r)を検索せず、カーネル・モジュールへのパスを指定します。

削除されたオプション:

  • 文書化されていない-xlinkmode=primaryオプションが削除されます。これはDTrace for Linuxでは機能しませんでした。

バグ修正:

  • -cおよび-pコマンドライン・オプションが機能します。

  • モジュールを積極的かつ不必要に読み取るレクサー・バグが修正されました。そのため、入力誤りのないスクリプトとともに使用すると、DTraceがSolarisでこれまでよりもずっと速く起動するようになりました(多くの場合、約半分の時間)。このバグ修正と次のバグ修正の結果として、エラー・メッセージのエラー・テキストが変更されている(エラー・タグはない)場合があります。

  • SDTプロバイダが、DTraceユーザー・スペースに対する引数の型を記述するようになりました。

  • 多くのDTraceアクションおよび変数の型が、Linuxの現実に対応するように修正されています。

  • errno.dで使用可能なエラー番号のセットがより完全になっています。

  • DTraceライブラリが/usr/libではなく、/usr/lib64にインストールされるようになりました。

  • dtrace -Cのユーザーが、インシデントなしで<sys/dtrace.h>を含めることができるようになりました。

  • プローブが割込みコンテキストで実行されたときに常にinitタスクに基づいてハードコーディングされた値を提供していた様々なDIF組込み変数によって、現在のタスクから実際の値が提供されるようになりました。Linuxでは、常にcurrentとして使用できる有効なタスク構造があります。

  • x86_64アーキテクチャのレジスタの番号付けが、スタックにプッシュされたレジスタの順序と一致するように更新されました。

  • DS、ES、FSおよびGSレジスタの正しい値を取得できるようになりました。

  • SDTメタプロバイダ・モジュールがシステムからアンロードされたときに、SDTプローブが正しくクリーン・アップされるようになりました。

  • rw_read_held() DIFサブルーチンが、正しい引数データ型に基づいて、渡された引数に安全にアクセスできるかどうかを検証するようになりました。

ユーザーから見える内部の変更:

  • /proc/kallsymsのように新しいファイル/proc/kallmodsymsが存在するようになりましたが、現在組み込まれている場合でも、オブジェクト・サイズを指定し、各カーネル・オブジェクトが属するモジュールを一覧表示します。

  • dtrace.koがロードされるたびに、新しいモジュールdtrace_ctf.koがプルされます。これは型情報のコンテナです。

  • 文書化されていない-B buffer-inspectionコマンドライン・オプションが、DTraceをクラッシュしなくなりました。

  • SDTプローブをサポートするために以前に提供された無効なオペランド・トラップ・ロジックは、この機能を利用するプローブをサポートするために、より汎用的になりました。

  • DTraceコア・モジュールがコア・カーネルCTFデータ・モジュールに依存し、DTraceモジュールがシステムにロードされると、カーネルのCTFデータも使用可能になるようになりました。