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[]の使用を修正します。