プローブのリストと有効化
DTraceプロバイダは、DTraceに使用可能なプローブを公開することで、プローブの起動時に関数を実行できるようにします。 dtraceコマンドは、使用可能なすべてのプローブのリスト表示や、プローブの有効化に使用できます。
- 使用可能なプローブをリスト表示します。
使用可能なすべてのプローブをリストするには、次を実行します:
sudo dtrace -lノート:
DTraceのほとんどの使用には、
root権限が必要です。 このドキュメントでは、コマンドは適切な権限で実行することを前提としています。 このドキュメントに示したコマンドの実行前に、sudoコマンドを使用してrootユーザー権限に昇格します。コマンドは以下のような出力を返します。
DTrace 2.0.0 [Pre-Release with limited functionality] ID PROVIDER MODULE FUNCTION NAME 1 dtrace BEGIN 2 dtrace END 3 dtrace ERROR 4 fbt vmlinux __traceiter_initcall_level entry 5 fbt vmlinux __traceiter_initcall_level return 6 fbt vmlinux __traceiter_initcall_start entry 7 fbt vmlinux __traceiter_initcall_start return 8 fbt vmlinux __traceiter_initcall_finish entry 9 fbt vmlinux __traceiter_initcall_finish return ... 144917 sdt rtc rtc_set_time 144918 sdt i2c i2c_result 144919 sdt i2c i2c_reply 144920 sdt i2c i2c_read 144921 sdt i2c i2c_write 144922 sdt smbus smbus_result 144923 sdt smbus smbus_reply 144924 sdt smbus smbus_read 144925 sdt smbus smbus_write 144926 sdt hwmon hwmon_attr_show_string 144927 sdt hwmon hwmon_attr_store 144928 sdt hwmon hwmon_attr_show 144929 sdt thermal thermal_zone_trip 144930 sdt thermal cdev_update 144931 sdt thermal thermal_temperature 144932 sdt bcache ... 145763 syscall vmlinux listen entry 145764 syscall vmlinux bind return 145765 syscall vmlinux bind entry 145766 syscall vmlinux socketpair return 145767 syscall vmlinux socketpair entry 145768 syscall vmlinux socket return 145769 syscall vmlinux socket entryヒント:
DTraceで使用可能なプロバイダ固有のリストを取得するには、次を実行します:sudo dtrace -l|tail -n +3|awk '{print $2}'|uniq-Pオプションは、プローブのリストを特定のプロバイダに限定するために使用できます。-mオプションを使用して、特定のモジュールに限定することもできます。 次に例を示します:sudo dtrace -l -P sdt sudo dtrace -l -m thermal - コマンドライン・ユーティリティを使用して指定のプローブを有効にするには、dtrace -nを実行します。名前に一致するプローブを有効にできます。 プローブの完全名の名前部分のみを指定することもできますが、完全名を使用することで予期しない動作を回避できます。
sudo dtrace -n dtrace:::BEGIN次のような出力が表示されます。
dtrace: description 'dtrace:::BEGIN' matched 1 probe CPU ID FUNCTION:NAME 2 1 :BEGINdtrace:::BEGINプローブは、新しいトレース・リクエストを開始するたびに1回起動します。 表形式の出力に、プローブが起動したCPUと、プローブのID、関数、および名前が表示されます。DTraceの実行は継続され、別のプローブが起動するのを待機します。 終了するには、
Ctrl+Cを押します。 - リクエスト内で複数のプローブを連鎖させることで、複数のプローブを有効にします。
DTraceリクエストは、任意の数のプローブと関数を使用して作成できます。 たとえば、
BEGINプローブとENDプローブを追加して、2つのプローブを使用したリクエストを作成します。BEGINプローブの出力行が表示されたら、次のコマンドを入力し、シェルでCtrl+Cを再度押します:sudo dtrace -n dtrace:::BEGIN -n dtrace:::END出力は次のようになります:
dtrace: description 'dtrace:::BEGIN' matched 1 probe dtrace: description 'dtrace:::END' matched 1 probe CPU ID FUNCTION:NAME 0 1 :BEGIN ^C 1 2 :ENDdtrace:::BEGINプローブは、トレース・リクエストの開始時に起動します。 DTraceは、Ctrl+Cを押して終了するまで、さらにプローブがアクティブ化されるまで待機します。dtrace:::ENDプローブは、トレースが完了すると1回アクティブ化されます。 dtraceコマンドは、このプローブの起動を終了前に報告します。 - ある関数のすべてのプローブを有効にするには-fオプションを使用し、あるモジュールのすべてのプローブを有効にするには-mオプションを使用します。
関数またはモジュール全体のプローブを一致させて有効にできます。 たとえば、
syscall:vmlinux:socket関数のentryプローブとreturnプローブの両方を有効にするには、次を実行します:sudo dtrace -f syscall:vmlinux:socketモジュール全体のプローブを有効にすることもできます。 たとえば、
sdt:tcpモジュールのすべてのプローブを有効にするには、次を実行します:sudo dtrace -m sdt:tcp