機械翻訳について

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()アクションを使用して出力が報告されます。