Oracle は DTrace for Linux 2.0.0-1.14 を公開しました

Linux 2.0.0-1.14 用の DTrace 動的デバッグ ツールキットの実験的リリースが提供され、eBPF サブシステムと Linux カーネルによって提供される標準トレース メカニズムを使用するユーザー空間プロセスとして実装されます。機能の点では、eBPF ベースの DTrace 実装は、カーネル モジュールの形式で実装された Linux 用の最初の DTrace 実装に似ています。プロジェクト コードは GPLv2 ライセンスに基づいて配布されます。

このツールキットは、BPF をサポートする標準 Linux カーネルで使用できます。機能するには、CTF (Compact Type Format) デバッグ形式のサポートを実装した libctf ライブラリが必要です。このライブラリは、リリース 2.40 以降の binutils パッケージに含まれているか、Solaris から移植された libdtrace-ctf ライブラリです。オプションで、6.7 カーネル用に XNUMX つのパッチが提供されており、高度な機能を使用してモジュールとカーネルに関する追加データを取得できます。

DTrace テクノロジは、Solaris オペレーティング システムでカーネルとエンド アプリケーションを動的にトレースする際の問題を解決するために開発されました。 DTrace を使用すると、ユーザーはシステムの動作を詳細に監視し、問題をリアルタイムで診断できます。デバッグ プロセス中、DTrace は調査対象のアプリケーションの動作に影響を与えず、アプリケーションのパフォーマンスにも一切影響を与えないため、実行中のシステムの分析をその場で整理できます。 DTrace の強みの 1 つは、AWK に似た高レベル D 言語です。この言語では、外部ライブラリを使用して C、Python、Lua で eBPF ハンドラーを作成するために提供されているツールを使用するよりも、トレース スクリプトの作成がはるかに簡単です。

主な機能:

  • 利用可能なプロバイダー:
    • cpc (CPU Performacne Counter) - パフォーマンス情報を取得します。
    • dtrace - BEGIN、END、ERROR ハンドラーは、他のチェックの前または後、およびエラーが発生したときに実行されます。
    • fbt (関数境界トレース) - カーネル関数への呼び出しを追跡します。
    • lockstat - ロックのステータスを追跡します。
    • pid - ユーザー空間で実行されているプロセスの関数呼び出しを追跡します。
    • proc - 起動やシャットダウン (fork、exec、exit、fault) などのプロセス関連のアクティビティを監視します。
    • プロファイル - 指定された間隔でパフォーマンス統計を保存します。
    • sdt、rawtp - 静的カーネル トレース (SDT - 静的に定義されたトレース)。
    • usdt: 静的アプリケーション トレース (USDT - ユーザー空間の静的に定義されたトレース)
    • sched - CPU リソースの割り当てを監視します。
    • sycall - システムコールの開始と終了を追跡します。
  • 収集されたデータの集約: 集約関数 (avg、count、llquantize、lquantize、max、min、quantize、stddev、sum) および集約アクション (clear、normalize、normalize、printa) を使用する機能。集計関数を適用した結果を通常の連想配列に保存するためのサポート。
  • 投機的トレースのサポート。これにより、データを一時的に監視し、どれをトレース バッファにキャプチャするか、どれを破棄するかを決定できます。使用可能な機能は、投機、投機、コミット、破棄です。
  • グローバル変数とローカル変数、TLS (スレッドローカルストレージ)、連想配列および文字列のサポート。
  • 提供する組み込み変数: arg0 - arg9、args[]、caller、curcpu、curthread、epid、errno、execname、gid、id、pid、ppid、probefunc、probemod、probename、probeprov、stack Depth、tid、timestamp、ucaller、 uid、uregs[]、ustack Depth、walltimestamp。
  • サポートされるアクション: exit、freopen、ftruncate、mod、printa、printf、raise、setopt、stack、sym、system、trace、tracemem、uaddr、umod、ustack、および usym。
  • 組み込み関数の可用性: alloca、basename、bcopy、copyin、copyinstr、copyinto、copyout、copyoutstr、dirname、getmajor、getminor、htonl、htonll、htons、index、inet_ntoa、lltostr、mutex_owned、mutex_owner、mutex_type_adaptive、mutex_type_spin、ntohl 、ntohll、ntohs、progenyof、rand、rindex、rw_iswriter、rw_read_held、rw_write_held、strchr、strjoin、strlen、strrchr、strstr、strtok、substr。
  • トレース バッファーに含まれないデータ カウンターの存在。
  • D トレース スクリプトを BPF プログラム形式にコンパイルするためのサポート。
  • ライブラリ呼び出し用の BPF 関数をプリコンパイルします。
  • ロードされた BPF プログラムの検証ログを取得するオプション bpflog。
  • BPF プログラムで再利用するための動的コード生成とコードのプリコンパイル。

新しいバージョンでの変更点:

  • ユーザー空間内のプロセスを追跡するために使用される pid プロバイダーに、コード内のオフセットによる命令の実行を追跡するためのサポートが追加されました。
  • stack() 関数と ustack() 関数を使用して収集されたデータを集約するためのサポートが追加されました。
  • リテラル 0 を割り当てることで、連想配列から任意の型の要素を削除する機能。
  • 型アノテーションを含む構造化データを出力するための print アクションを追加しました。
  • 新しい組み込み関数 cleanpath()、d_path()、link_ntop() が追加されました。
  • 「-xcpu」パラメータを追加しました。これにより、チェックを特定の CPU にバインドできるようになります。
  • メモリサイズを制限する「-xlockmem」オプションを追加しました。
  • dtprobed の再起動の間にプロセス トレース データ (USDT) を保存する機能が提供されました。
  • BTF (BPF Type Format) メカニズムのサポート。BPF 疑似コードで型チェック情報を提供します。
  • 構成スクリプトを使用してビルドする機能。

出所: オープンネット.ru

コメントを追加します