2.0.0-1.14 (2024年3月5日)

スタンドアロンのユーザー・スペース実装の14番目のエラータ。

これは、機能が制限されたプレリリースです。

新機能

  • ioプロバイダが実装されました。

  • print()アクションが実装されました。

  • link_ntop()サブルーチンが実装されました。

  • cleanpath()サブルーチンが実装されました。

  • d_path()サブルーチンは、常に"<unknown>"を返すように実装されました。これは、ioおよびprocfsトランスレータでコンパイルされるようにするために必要です。

  • -xcpuオプションが実装されました。

  • -xaggpercpuオプションが実装されました。

  • -xlockmemオプションが改善されました。プローブ情報を取得する前に制限が設定され、デフォルトの動作が「無制限」になりました(つまり、ほとんどのユーザーがこのオプションについて心配する必要はありません)。

  • pidプロバイダは、オフセットベースのプローブ名をサポートするようになりました。

  • スタックの集約がサポートされるようになりました。

  • rawtp引数情報の取得が改善されました。

  • リテラル0を代入することによって、連想配列の要素を要素のデータ型に関係なく削除できるようになりました。

  • レクサーは、数字で始まるモジュール名を使用できるようサポートするために改善されました。たとえば、9p`v9fs_removeです。

  • 様々な分散での構築およびパッケージ化に役立つために、基本的な構成スクリプトが追加されました。

  • dtprobedによって保持されるUSDTプローブ情報は、デーモンの再起動後も存続できるように、/runの下に格納されるようになりました。

  • DTraceは、いくつかの制限はありますが、追加パッチを必要とせずにアップストリーム・カーネルでトレースするために使用できるようになりました。

  • ipプロバイダが実装されました。

  • trunc()アクションが実装されました。

  • pcap()アクションが実装されました。

  • inet_ntoa6()サブルーチンが実装されました。

  • inet_ntop()サブルーチンが実装されました。

  • カーネルからのmodules.builtin.rangesデータのサポートが追加されました。これは、カーネルに組み込まれているカーネル・シンボルのモジュール名の関連付けを決定する新しい方法です。kallmodsymsのサポートは、modules.builtin.rangesをまだサポートしていないカーネルに対して保持されます。

  • CTFデータを提供しないカーネルでのDTraceの使用をサポートするために、BTF-to-CTFコンバータが追加されました。現在、BTFはCTFよりも制限されていることに注意してください。たとえば、BTFはカーネル変数のデータ型情報を提供しません。

バグ修正

  • ドロップ・カウンタ処理はローカルのみの更新で修正されています。

  • stackdepthと一時文字列が相互に上書きされないように、コール・スタックに専用の領域が導入されました。

  • dt_tp_event_info()は、バッファをオーバーランしないように修正されました。

  • BPFヘルパーを使用するBPFコードのコンパイルでは、gcc BPFクロスが提供した(非推奨の) bpf-helpers.hヘッダー・ファイルではなく、libbpf-dev[]からのbpf_helpers.hヘッダー・ファイルが使用されるようになりました。

  • 古いカーネルでDTraceをサポートする必要があるため、古いカーネルでBPF検証機能に対してオブジェクト・コードが許容可能になるように、BPFソース・コード・ファイルが-mcpu=v3を使用してコンパイルされるようになりました。

  • DTraceインスタンスがENDプローブの処理をトリガーすると、システム上の他のすべてのdtraceインスタンスもENDプローブを起動することになります。これは、dtraceプロバイダ・トランポリンがプローブをトリガーするタスクのtgidを検証していなかったためです。

  • cpuinfo BPFマップを初期化すると、連続していないオンラインCPU IDを持つシステムでバッファーがオーバーランする可能性があります。

  • 割込みBPFプログラムの実行をサポートするカーネルでは、プローブ・データが破損する可能性があります。一時的な修正として、DTraceプローブの同時BPFプログラム実行がブロックされます。

  • alloca()割当てメモリー内の構造体および共用体メンバーのアクセスによって、BPF検証機能違反が発生しなくなりました。

  • ビットフィールドのオフセット計算が修正されました。

  • エンディアン変換命令の逆アセンブラ出力が修正されました。

  • カーネル内のサイズ0または1の配列データ型の境界チェックは、動的にサイズ設定された配列のアンカーとしてカーネルで一般的に使用されるため、スキップされるようになりました。

  • NULLポインタ引数チェックが実行される場合には、コンパイル時にゼロ定数がチェックされるようになりました。

  • uprobeは、絶対アドレスに基づくのではなく、inodeでオフセットを使用して作成されるようになりました。

  • 様々な形式のカーネル・ビルドの構築がさらに合理化されました。

内部変更

  • SDTベースのプロバイダをより適切にサポートするために、コードが再構築されました。このようなプロバイダ(lockstat、ioなど)はカーネル・ソースの静的プローブに基づくものでしたが、現在はfbt、rawtp、およびsyscallプローブで実装されています。プローブ・トランポリンが関与する可能性があります。特にcgでの変更は、これらのプロバイダをより適切にサポートします。また、基礎となるプローブはfbtのみに依存するのではなくrawtpを使用しています。

  • 古い環境(特に古いコンパイラ)でのコンパイルのサポートが改善されました。

  • 特にクロス・コンパイルおよびアップストリーム・カーネルによるビルドに対して、いくつかのビルド改善ありました。

  • 文字列を解析する多数のコードが削除され、かわりにこのサポートではフレックスに依存しています。

  • USDTプローブの作成および削除は、dtprobedからdtraceに移動しました。

  • dtprobedでは、デーモンの再起動にプリセットが使用されるようになりました。

  • waitfd()への依存関係は、このシステム・コールに依存しないメカニズムに置き換えられました。

テストスイートの変更

  • tick-*プローブへのテスト依存がさらに減少しました。tick-*プローブは、タイマー・サブシステムの構成方法(CONFIG*_HZ*)に応じて、一部のカーネルでは適切に動作しないことがあります。これらのテストの堅牢性を改善するために、この依存を減らすことは、いくつかのリリースに渡って継続してきました。

  • XFAILが正しく報告するように強制するerr.*テストを修正します。

  • 5.10より前のlockstatテストをスキップします。

  • 2つのcopyin*()を必要とする2つのレベルのユーザー・スペース・アドレスの間接参照があるため、syscall::execve:entry args[]の使用を修正します。