コマンド DTrace | |
| 原作者 | ブライアン・キャントリル、アダム・レベンサル、マイク・シャピロ(サン・マイクロシステムズ) |
|---|---|
| 開発者 | サン・マイクロシステムズ、オラクル、マイクロソフト |
| 初回リリース | 2005年1月 |
| リポジトリ | github.com/opendtrace |
| 書かれた | C |
| オペレーティング·システム | Solaris、illumos、macOS、FreeBSD、NetBSD、Linux、[1] Windows [2] |
| タイプ | トレース |
| ライセンス | CDDL、GPLv2、UPL |
| Webサイト | dtrace.org |
DTrace は、もともとSun Microsystemsによって、実稼働システム上のカーネルおよびアプリケーションの問題をリアルタイムでトラブルシューティングするために作成された、包括的な動的トレースフレームワークです。もともとSolaris用に開発されましたが、その後、 OpenSolarisおよびその派生製品であるillumosで無料のCommon Development and Distribution License (CDDL)に基づいてリリースされ、他のいくつかのUnix 系システムに移植されています。
DTrace を使用すると、アクティブなプロセスによって使用されるメモリ量、CPU 時間、ファイルシステム、ネットワーク リソースなど、実行中のシステムの全体的な概要を取得できます。また、特定の関数が呼び出される引数のログや、特定のファイルにアクセスしているプロセスのリストなど、より詳細な情報も提供できます。
2010年、Oracle Corporation は Sun Microsystems を買収し、OpenSolaris の廃止を発表しました。真のオープンソース Solaris を作成するための一部のコア Solaris エンジニアによるコミュニティの取り組みとして、 2010 年 8 月 3 日木曜日のウェビナーで、 DTrace テクノロジを含む OpenSolaris OS/Net 統合のフォークとして、 illumos オペレーティングシステムが発表されました[3]。
2011年10月、オラクルはDTraceのLinuxへの移植を発表し、[4] 2019年にはFedora用の公式DTraceがGitHubで利用可能になりました。数年間、ライセンス条件に変更のない、非公式のDTraceのLinuxへの移植版が利用可能でした。[5]
2017年8月、OracleはDTraceカーネルコードをGPLv2+ライセンスで、ユーザースペースコードをGPLv2およびUPLライセンスでリリースしました。[6] 2018年9月、MicrosoftはDTraceをFreeBSDからWindowsに移植したことを発表しました。[2]
2016 年 9 月、OpenDTrace の取り組みが、コードとシステム内部の包括的なドキュメントの両方とともに github で開始されました。OpenDTrace の取り組みでは、OpenSolaris のコードに対して元の CDDL ライセンスを維持し、追加のコード コントリビューションはBSD 2 条項ライセンスの下で提供されます。OpenDTrace の目標は、macOS、FreeBSD、OpenBSD、NetBSD、Linux、および組み込みシステムを含むすべての消費者に受け入れられる、OS に依存しないポータブルな DTrace 実装を提供することです。
説明
Sun Microsystems は、ユーザーがアプリケーションや OS 自体を調整およびトラブルシューティングできるようにする運用上の洞察を提供するために DTrace を設計しました。
テスターは、D プログラミング言語 ( 「D」という名前の他のプログラミング言語と混同しないでください) を使用してトレース プログラム (スクリプトとも呼ばれます) を作成します。C にヒントを得たこの言語には、トレースに固有の追加関数と変数が含まれています。D プログラムは構造的にAWKプログラムに似ています。1 つ以上のプローブ(インストルメンテーション ポイント) のリストで構成され、各プローブはアクションに関連付けられています。これらのプローブは、アスペクト指向プログラミングのポイントカットに相当します。プローブの条件が満たされると、関連付けられたアクションが実行されます (プローブが「起動」します)。一般的なプローブは、特定のファイルが開かれたとき、プロセスが開始されたとき、または特定のコード行が実行されたときに起動します。起動したプローブは、コールスタックとコンテキスト変数にアクセスして式を評価することで、実行時の状況を分析します。その後、情報を出力またはログに記録したり、データベースに記録したり、コンテキスト変数を変更したりできます。コンテキスト変数の読み取りと書き込みにより、プローブは情報を相互に渡すことができ、さまざまなイベントの相関関係を共同で分析できます。
DTrace を本番環境で安全に使用できるように、特別な配慮がなされています。たとえば、トレースの実行中はプローブの影響は最小限に抑えられ、無効にされたプローブによるパフォーマンスへの影響もありません。これは、有効にできる DTrace プローブが何万もあるため重要です。新しいプローブを動的に作成することもできます。
コマンドラインの例
DTrace スクリプトは、1 つ以上のプローブとアクションを引数として指定して、コマンド ラインから直接呼び出すことができます。次に例を示します。
# 引数付きの新しいプロセス
dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'
# プロセスによって開かれたファイル
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
# プログラム別のシステムコール数
dtrace -n 'syscall:::entry { @num[execname] = count(); }'
# syscall によるシステムコール数
dtrace -n 'syscall:::entry { @num[probefunc] = count(); }'
# プロセスごとのシステムコール数
dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'
# プロセスごとのディスクサイズ
dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }'
# プロセスによってページインされたページ
dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'
スクリプトは数百行に及ぶこともありますが、高度なトラブルシューティングや分析には通常数十行しか必要ありません。DTraceToolkit [7] には、200を超えるオープンソースのDTraceスクリプトの例が掲載されています。DTraceToolkit [8]は、 Brendan Gregg (DTraceの本[8]の著者)によって作成されており、それぞれのスクリプトのドキュメントとデモも提供されています。
サポートされているプラットフォーム
DTrace は 2003 年 11 月に初めて使用可能になり、2005 年 1 月に Sun のSolaris 10の一部として正式にリリースされました。DTrace は、 OpenSolarisプロジェクトで初めて、 Common Development and Distribution License (CDDL)に基づいてソース コードがリリースされたコンポーネントでした。
DTrace は、 illumosおよび関連ディストリビューション の不可欠な部分です。
DTraceはFreeBSD [9]とNetBSD [10]の標準機能です。
AppleはMac OS X 10.5 "Leopard"でDTraceのサポートを追加し、 Instrumentsと呼ばれるGUIも追加した。[11] DTraceToolkitの40以上のDTraceスクリプトが/usr/binに含まれており、[12]ディスクI/O (iosnoop)やプロセス実行(execsnoop)を調べるツールも含まれている。DTraceがサポートされている他のプラットフォームとは異なり、Mac OS Xには、DTraceやgdbなどのデバッグユーティリティによるプロセスのトレースを禁止するフラグ(P_LNOATTACH)がある。オリジナルのMac OS X DTrace実装では、このフラグが設定されたプログラムの実行中に起動するはずの無関係なプローブが起動しないため、他のシステム情報のトレースに影響する可能性があった。[13]数か月後、OS X 10.5.3アップデートでこの問題に対処した。[14]ただし、El Capitan以降、システム整合性保護により、保護されたバイナリのDTracingがデフォルトで禁止されるようになった。
DTraceのLinuxポートは2008年から利用可能であり、[ 15]機能強化と問題の修正のための作業が積極的に続けられています。githubにもアクティブな実装があります。標準のコアプロバイダー(fbt、syscall、profile)に加えて、特別な「instr」プロバイダーが利用可能です(Solarisプロバイダーの一部は2013年時点ではまだ利用できません[アップデート])。Linux DTrace実装はロード可能なカーネルモジュールです。つまり、カーネル自体は変更する必要がなく、DTraceはCDDLとGPLのライセンスの競合を回避できます(少なくともソース形式では)。ただし、DTraceがロードされると、カーネルインスタンスは汚染されているとマークされます。
2007年、QNXソフトウェアシステムズの開発者が自身のブログで、同僚とDTraceをQNXオペレーティングシステムに組み込む作業を進めていることを発表しました。[16]
オラクル社は2011年にOracle Linuxにベータ版DTraceサポートを追加しました。 [1]これはGPLv2のUnbreakable Enterprise Kernelリリース2の技術プレビューとして提供されました(DTrace LinuxカーネルモジュールはもともとCDDLの下でリリースされていました)。[17]一般提供は2012年12月に発表されました。[18] [19]
2019年3月11日、マイクロソフトはWindows 10インサイダービルド用のDTraceのバージョンをリリースしました。[20]マイクロソフトはWindows Server 2025にDTraceを組み込みツールとして含めました。[21] [22]
言語およびアプリケーションプロバイダー
サポートされている言語プロバイダーを使用すると、DTraceは関数、ソースファイル、行番号の場所など、コードのコンテキストを取得できます。さらに、言語でサポートされている場合は、動的なメモリ割り当てとガベージコレクションを利用できるようになります。[23]サポートされている言語プロバイダーには、アセンブリ言語[説明が必要]、C、C ++、Java、Erlang、JavaScript、Perl、PHP、Python、Ruby、シェルスクリプト、Tclが含まれます。
アプリケーションプロバイダにより、 DTraceはシステムコールからカーネルに至るまでのアプリケーションの動作を追跡することができます。DTraceアプリケーションプロバイダを提供するアプリケーションには、MySQL、PostgreSQL、Oracle Database、Oracle Grid Engine、Firefoxなどがあります。[23] [24] [25]
著者と受賞歴
DTrace は、Bryan Cantrill、Mike Shapiro、Adam Leventhalによって設計および実装されました。
著者らは2005年にInfoWorldとTechnology ReviewからDTraceの革新性に対して表彰を受けた。[26] [27] DTraceはウォールストリートジャーナルの2006年技術革新賞コンペティション で最優秀賞を受賞した。 [28]著者らは2008年にUSENIXからソフトウェアツールユーザーグループ(STUG)賞を受賞した。[29]
参照
- eBPF – Linuxカーネルトレースバックエンド。カーネルバージョン4.9以降、 DTrace [30] と同様の機能セットを提供する。
- ftrace – スケジューリング イベント、割り込み、メモリ マップ I/O、CPU 電源状態の遷移などをトレースできる Linux カーネル用のトレース フレームワーク。
- ktrace – カーネルとプログラムの相互作用をトレースする BSD Unix および macOS ユーティリティ
- ltrace – Linux デバッグユーティリティ。ユーザーランドアプリケーションが共有ライブラリに対して行う呼び出しを表示します。
- strace – Linux 用のデバッグユーティリティ。プログラムが使用するシステムコールと受信したすべてのシグナルを監視します。
- SystemTap – Linux インストールの計測に使用されるスクリプト言語とユーティリティ
- LTTng
- IBMプローブビュー
参考文献
- Cantrill, Bryan (2006年2月). 「Hidden in Plain Sight」. ACM Queue . 4 (1): 26–36. doi : 10.1145/1117389.1117401 . 2017年12月19日閲覧。
- Bryan M. Cantrill、Michael W. Shapiro、Adam H. Leventhal (2004 年 6 月)。生産システムの動的計測。2004 USENIX年次技術会議の議事録。2006 年 9 月 8 日に取得。
注記
- ^ ab Wim Coekaerts (2011-10-09). 「dtrace を試す」. blogs.oracle.com . 2018-02-15に閲覧。
- ^ ab 「OS 内部: オペレーティング システムのイノベーションに関する技術的な詳細 - BRK3365」。Microsoft Ignite チャネル。2018 年 10 月 8 日。
- ^ D'Amore, Garrett (2010 年 8 月 3 日)。「Illumos - Hope and Light Springs Anew - Presented by Garrett D'Amore」(PDF)。illumos.org 。2010年8 月 3 日閲覧。
- ^ 「Oracle、Dtrace を Linux に導入」Slashdot 2011-10-04 2020-11-11閲覧。
- ^ [1] 「オリジナルの DTrace は Sun (現在は Oracle) の CDDL ライセンスに基づいてライセンスされています。オリジナルの著作権はそのまま残されています。法的な衝突を避けるため、リリースには GPL コードは組み込まれていません。」
- ^ Wielaard, Mark J. (2018-02-14). 「dtrace for linux; Oracle does the right thing」. Mark J. Wielaard ブログ. 2018-02-14に取得。
- ^ 「DTraceToolkit」。Brendan Gregg 。 2014年6月8日閲覧。
- ^ DTrace: Oracle Solaris、Mac OS X、FreeBSD での動的トレース。Safari Books。2011 年。ISBN 978-0132091510. 2011年4月6日時点のオリジナルよりアーカイブ。2011年1月3日閲覧。
- ^ 「FreeBSD 7.1-RELEASE アナウンスメント」 2009-01-06 . 2009-01-06閲覧。
- ^ 「NetBSD ソースの変更、2010 年 2 月 21 日」。
- ^ 「Mac OS X Leopard - 開発ツール - Instruments」。Apple Inc. 2007-10-24 時点のオリジナルよりアーカイブ。2007-10-19に閲覧。
- ^ 「Mac OS X DTrace」。Apple Inc. 2010年5月31日閲覧。
- ^ 「Mac OS X と失われたプローブ」。Leventhal, Adam H. 2008 年 1 月 18 日。2008年 1 月 20 日閲覧。
- ^ 「Apple が DTrace を更新」。Leventhal, Adam H. 2008 年 6 月 7 日。2008年 6 月 16 日閲覧。
- ^ 「CRiSP ツールのダウンロード ページ」。2020 年 11 月 16 日時点のオリジナルよりアーカイブ。2011 年 3 月 2 日閲覧。
- ^ 「DTrace on QNX!」Oracle The Observation Deck ブログ2007 年 11 月 8 日。
- ^ Zannoni, Elena; Van Hees, Kris (2012). DTrace on Linux (PDF) . Linux Foundation Collaboration Summit. 2014-07-07 のオリジナル(PDF)からアーカイブ。2012-04-05に取得。
- ^ Koch, Zeynep (2012 年 12 月 12 日)。「お知らせ: DTrace for Oracle Linux の一般提供開始」。Oracle Linux ブログ。
- ^ Linux 用 DTrace モジュール ソース コード[永久リンク切れ ]
- ^ プラパカ、ハリ (2019 年 3 月 11 日)。 「Windows 上の DTrace」。マイクロソフト技術コミュニティ。
- ^ 「DTrace」。Microsoft Learn。2024年4月19日。 2024年11月7日閲覧。
- ^ Gatlan, Sergiu (2024-11-04). 「Windows Server 2025 がリリースされました - 新機能をご紹介します」BleepingComputer . 2024-11-05 時点のオリジナルよりアーカイブ。2024-11-07に閲覧。
- ^ ab DTrace: Oracle Solaris、Mac OS X、FreeBSD での動的トレース。Prentice Hall。2011年。p. 1152。ISBN 9780132091510。
- ^ 「Open Grid Scheduler / Grid Engine ドキュメント」。Open Grid Scheduler。2012年12 月 30 日閲覧。
- ^ 「DTrace – MDN」。Mozilla。2014年9月5日時点のオリジナルよりアーカイブ。2012年12月30日閲覧。
- ^ 「リアルタイムのソフトウェア追跡」。テクノロジーレビュー。MIT。2005年。 2007年3月31日閲覧。
- ^ McAllister, Neil (2005 年 8 月)。「2005 年もイノベーションは健在」。InfoWorld。IDG。2005年11 月 23 日時点のオリジナルよりアーカイブ。2007年 3 月 31 日閲覧。
- ^ Totty, Michael (2006 年 9 月)。「勝者は...」The Wall Street Journal。Dow Jones & Company, Inc. 2007 年 3 月 31 日閲覧。
- ^ 「2008 USENIX Annual Technical Conference (USENIX '08)」 2008年. 2008年11月26日閲覧。
- ^ 「DTrace ツール」 。2017年 11 月 27 日閲覧。
外部リンク
- DTrace ツール – Brendan Gregg の DTrace の例 (2004)
- DTraceToolkit – DTrace スクリプトのコレクション
- DTrace ブック スクリプト – GitHub 上の DTrace ブック スクリプト
- FreeBSD DTrace ページ – FreeBSD DTrace のホームページ。チュートリアルとワンライナーが含まれています。
- DTraceブック
- DTrace ガイド – Illumos DTrace ブック
- DTrace と SystemTap による動的トレース - 例と演習を含む無料の書籍
- DTrace ハンズオンラボ – DTrace をステップバイステップで学ぶコース
- DLight チュートリアル – DTrace テクノロジーに基づく C/C++ 開発者向けの対話型 GUI ユーティリティ。バージョン 12.4 より前のOracle Solaris Studioの一部です。
- DTrace で Leopard を探索する – デバッグと探索のための DTrace
- ブライアン・カントリルによる DTrace に関する技術講演
- ブライアン・カントリル著『Hidden in Plain Sight、サン・マイクロシステムズ』
- Linux への公式 Oracle DTrace ポート:
- DTrace パッチが最近の Linux カーネル リリースに統合されました
- Linux への DTrace ポートのユーザー空間部分
- Linux 上の DTrace で使用される Compact Type Format ライブラリ
- Fedora 上の DTrace
