3 DTraceの使用例
次の例は、DTraceの現在の機能を示しています。 これらの例では、/usr/sbinが$PATHにあるとします。
例3-1 プローブのリスト
sudo dtrace -l
出力は次のようになります:
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 trace_initcall_finish_cb entry
5 fbt vmlinux trace_initcall_finish_cb return
...
この特定のシステムには、次のものが含まれています。
-
3 dtraceプローブ
-
87890 fbtプローブ(kprobesに基づく)
-
1262 sdtプローブ(Linuxトレースポイントに基づく)
-
666 syscallプローブ
例3-2 -Sオプションの使用
このスクリプトは、-Sオプションを使用して、コンパイル済みDコードをeBPFプログラムとして出力します。 -eオプションは、コンパイル後に終了します。
sudo dtrace -Sen 'write:entry { trace(1) }'
出力は次のようになります:
Disassembly of clause ::write:entry, <dt_clause_0>:
INS OFF OPCODE INSTRUCTION
0000 00000: 7b a 1 fff8 00000000 stdw [%fp-8], %r1
0001 00008: bf 0 a 0000 00000000 mov %r0, %fp
0002 00016: 07 0 0 0000 ffffffa0 add %r0, -96
0003 00024: 7b a 0 fff0 00000000 stdw [%fp-16], %r0
0004 00032: 79 0 a fff8 00000000 lddw %r0, [%fp-8]
0005 00040: 79 9 0 0018 00000000 lddw %r9, [%r0+24]
0006 00048: 79 0 0 0010 00000000 lddw %r0, [%r0+16]
0007 00056: 7a 0 0 0028 00000000 stdw [%r0+40], 0
0008 00064: 7a 0 0 0030 00000000 stdw [%r0+48], 0
0009 00072: 7a 0 0 0018 00000000 stdw [%r0+24], 0
0010 00080: 62 0 0 0000 ffffffff stw [%r0+0], -1 ! = EPID
0011 00088: 62 0 0 0008 ffffffff stw [%r0+8], -1 ! = CLID
0012 00096: 62 9 0 0000 ffffffff stw [%r9+0], -1 ! = EPID
0013 00104: 62 9 0 0004 00000000 stw [%r9+4], 0
[...]
例3-3 DTraceスクリプト
sudo dtrace -n '
syscall::write:*
{
this->x = 3; /* clause-local variables */
this->y = 8;
trace(this->x * this->y);
trace(&`max_pfn);
}'
スクリプトの例の内容は次のとおりです:
-
ワイルドカードを使用して、すべての
write()システム・コール・プローブを同時にプローブします。 -
カーネル識別子(
max_pfn)およびその他のデータ項目のアドレスを記録したプローブ。 -
複数のプローブを単一のアクションに関連付けます。
-
節ローカル変数が使用されます。
-
trace()アクションを使用して出力が報告されます。