2.0.0-1.13 (2023年5月26日)
スタンドアロンのユーザー・スペース実装の13番目のエラータ。
これは、機能が制限されたプレリリースです。
新機能:
-
is-enabled USDTプローブの完全なサポート。
-
トレース・スクリプトで集計データを格納する領域がaggsizeオプション値ごとに使用可能な領域より大きい場合は、エラーが報告されます。
-
トレース・スクリプトで動的変数を格納する領域がdynvarsizeオプション値ごとに使用可能な領域より大きい場合は、エラーが報告されます。
-
主バッファー、投機バッファー、集計、および動的変数のデータ・ドロップ・カウンタのサポート。
-
proc:::signal-clearプローブが実装されました。
-
スケジューラ・プロバイダは、限定された一連のプローブ(およびいくつかの制限付き)に対して実装されています。使用可能なプローブは、dequeue、enqueue、off-cpu、on-cpu (トリガー位置の制限)、surrender、tick、およびwakeupです。デキューおよびエンキュー(arg1)のcpuinfo引数は、システムの制限のためNULLであることに注意してください。今後のリリースでは、このプロバイダが段階的に拡張されます。
-
lockstatプロバイダが実装されました。すべてのlockstatプローブが実装されていますが、ランタイム・カーネル構成によっては、一部のプローブがすべての場合(特に、インライン化を強制されるロック操作に対して)トリガーされないことがあります。また、5.10.0より前のカーネルには、スピンロック関数でkretprobeが使用されたときにカーネル・デッドロックを引き起こす可能性のあるバグが含まれています。lockstatプロバイダは、安全のためにこのようなカーネルに対して有効になっていません。
-
真のNULL文字列がサポートされるようになりました。
-
uregs組込み変数は、古いカーネルでもサポートされるようになりました。
-
新しいオプション「linknommap」が、mmap()の使用に関連するelfutilsバグの回避策として追加されました。
バグ修正:
-
誤ったヘルパー・データ・サイズを報告するためにdtprobedが発行するエラー・メッセージは、予測値と受信値を逆方向に報告していました。
-
異なるfsネームスペースに存在するプログラムのUSDTプローブが、完全にサポートされるようになりました。
-
複数のUSDTプローブが指定された場合、最初のプローブのみが正しく提供されます。
-
charデータ型のすべての形式を同等として適切に認識します。
-
iregsをデフォルト値(BPFレジスタの数)を超えて増やすことはできません。
-
pid 0のセグメント例外をトリガーしないように、uaddr処理が修正されました。
-
シンボリック配列サイズ指定子を使用してカーネルによって表されるトレースポイント引数のデータ型が正しく処理されるようになりました。
-
投機にデータを格納する場合のDTraceの確立された動作は、投機バッファ・オーバーフローを引き起こすような文があると、その句の実行を中止することでした。投機にデータを格納するときにオーバーフロー・チェックを実行するコードが正しく生成されるようになりました。
-
一部の障害は、PCに障害位置を報告していませんでした。
-
コンパイラによって生成される内部シンボルに、FBTプローブは提供されなくなりました。このようなシンボルは、いずれにせよ検証できません。
-
複数のメモリー・リークが解決されました。
-
連想配列からロードされた整数が、64ビットに昇格されました。
-
動的変数の割当てに失敗すると、動的変数の削除警告を報告し、句の実行を中止します。
-
DOFパーサーのクラッシュの原因が、dtprobedで修正されました。
-
PIE以外の実行可能ファイルでのUSDTプローブが完全にサポートされるようになりました。
-
DOFを同時にdtprobedに提供する複数のプログラムによって、それらのプローブの一部が作成されない可能性があります。
-
非常に多くのUSDTプローブ(500+)を備えた共有ライブラリおよび実行可能ファイルのサポートが改善されました。
内部変更:
-
DOF_VERSION_3が、以前のバージョンと互換性がない新しいスタイルのUSDT対応プローブ・メカニズムに追加されています。
-
ユーザー・スペース・プローブ・スキャンが、パフォーマンスの問題を解決するために修正されました。
-
'cpuinfo' BPFマップは、CPU IDが厳密に連続していない構成をサポートできるようになりました。
-
一部のgcc/binutilsリリースでのGCC BPFサポートでは、アトミックな追加操作を表現する方法がありませんでした。回避策として、DTraceソース・コードは独自のatomic_add()構造を提供します。
-
連想配列とTLS変数の処理は、どちらも動的変数を使用して実装されているため、統合されています。
テストスイートの変更:
-
テストスイートでは、テストに必要なカーネル・モジュールを指定できるようになりました。
-
libctfバグ#30264がシステムに存在するかどうかを確認するテストが追加されました。libctfバグは、名前のない構造体のメンバーと0以外のオフセットで共用体のoffsetof()をブレークします。
-
複数のプロセスをトレースする複数の同時dtraceインスタンスをテストするためのテストが追加されました。
-
tick-*プローブを実際に必要としない様々なテストが、非タイマー・ベース・プローブを使用して効率性と安定性を向上させるために修正されています。
-
多くのdtraceオプションのテストが追加されました。
-
testsuiteでは、#!dtraceを使用してインタプリタ形式の実行可能.dファイルをサポートできるようになりました(テストの実行中にdtraceの実際のパス名が置換されます)。
既知の問題点:
-
is-enabled USDTプローブを使用し、以前のバージョンのdtraceを使用して構築されたプログラムと共有ライブラリが、is-enabledプローブが機能するように再構築する必要があります。