DTraceの改良点
UEK R4U7のDTraceには、モジュールとユーティリティの更新を含む多くのバグ修正と機能強化が含まれており、現在のバージョンを1.0.0に変更しています。
含まれているその他の注目すべき変更は次のとおりです:
-
バグ修正
多数のバグ修正が適用され、安定性が向上し、パフォーマンスが向上します。
-
FBTの改善点
いくつかのパッチおよびバグ修正を適用して、パフォーマンスを向上させ、関数境界トレース(FBT)モジュールの機能を拡張しました。
-
追加されたlockstatプローブ
この更新には、lockstat DTraceプローブのサポートが含まれています。 これらのプローブは、dtrace -l -P lockstatを使用して表示できます。 DTrace lockstatサポートにより、カーネル・ロック・イベントの動的トレースが可能になります。 たとえば、これらのプローブは、どのロックが最も頻繁に使用されているかに関する情報を提供することができます。最も大きな競合を示すロックと最も長く保持されるロックです。
-
SDTプローブの改善
SDTプローブ(
regular
とisenabled
)が改善され、これらをスタブ関数の呼び出しとしてエンコードでき、ブート・プロセス中にこれらの呼び出しをNOPシーケンスとして書き換えることができ、これらのプローブの存在への影響を最小限に抑え、システムのブート中にクラッシュの可能性を回避できます。 -
タイムスタンプの精度を向上
タイムスタンプ変数で返される時間測定の精度が向上し、計算で負のデルタの可能性が低下するように、高解像度のタイマーをDTraceに再導入することが改善されました。
-
ライブラリ・インタフェースの変更
ustack()
,umod()
,usym()
またはdtrace -c
または-p exec()
を介して取得された犠牲プロセスが修正されたときに、DTraceコンシューマが解放されたメモリーを間接参照できない可能性のあるインタフェースの問題。 これには、libdtraceの特定のユーザーを変更して再リンクする必要があります。 ライブラリsonameはlibdtrace.so.1
に対応しています。 すべてのコンシューマは再リンクする必要がありますが、dtrace_proc_*()
APIを使用していないコンシューマはコードを変更する必要はありません。 コードの変更が必要な場所はすべて、コンパイル時エラーを引き起こします。dtrace_proc_*()
関数は、取るタイプを不透明なハンドルstruct dtrace_proc
に変更しました。 この不透明なハンドルからPIDを取得する新しい関数dtrace_proc_getpid()
があります。dtrace_proc_grab()
の名前がdtrace_proc_grab_pid()
に変更されました。 -
コンパイル時の配列境界のチェック
ユーザー空間パッケージが更新され、非結合配列の範囲のチェックがCTFおよび宣言された配列の両方で追加されました。 代入に使用されるLvalue配列も境界チェックされます。