FBTプロバイダ

fbt (関数境界トレース)プロバイダには、Oracle Linuxカーネル内のほとんどの関数の開始および終了に関連するプローブが含まれています。そのため、数万のfbtプローブが存在する可能性があります。

FBT実装は命令セット・アーキテクチャにきわめて特異的なものですが、FBTはx86と64ビットの両方のARMプラットフォームに実装されています。各命令セット内の一部の関数は、コンパイラによって高度に最適化されていて、FBTではインストゥルメントできません。そうした関数のプローブはDTraceに存在しませんが、次を実行すると使用可能なものを確認できます:
sudo dtrace -lP fbt

FBTプローブを効果的に使用するには、カーネル実装に関する知識が必要です。したがって、FBTはカーネル・ソフトウェアの開発時や、他のプロバイダが不十分な場合にのみ使用することをお薦めします。

使用可能なFPBプローブは多数あるため、プローブを有効にするモジュールと関数は具体的にします。FBTプローブの全範囲が同時に有効になっていると、パフォーマンスに影響する可能性があります。

fbtプローブ

FBTは、カーネルのほとんどの関数の先頭にentryというプローブを提供します。returnという名前のプローブは、カーネルのほとんどの関数の末尾に含まれています。すべてのFBTプローブには、関数名とモジュール名があります。

fbtプローブの引数

entryプローブの引数は、対応するオペレーティング・システムのカーネル関数の引数と同じです。これらの引数には、arg0arg1arg2...の変数を使用して、int64_t値としてアクセスできます。

関数に戻り値がある場合、戻り値はreturnプローブのarg1に格納されます。関数に戻り値がない場合、arg1は定義されません。

指定した関数の開始ポイントは1つだけですが、コール元に戻るポイントは多数ある場合があります。FBTは、関数の複数のリターン・サイトを単一のreturnプローブに収集します。正確なリターン・パスを知る必要がある場合は、関数テキスト内の戻り命令のバイト単位のオフセットを示す、returnプローブのarg0値を調べることができます。

fbtの例

カーネルの実装を調べるためにfbtプロバイダを使用できます。次のサンプル・スクリプトは、それぞれの関数がカーネル仮想メモリーを割り当てる回数に基づいて集積体を作成します。スクリプトが終了すると、集積の結果が出力されます。これは、メモリー集中型の関数を監視する場合に役立ちます。次のDソース・コードを入力して、getkmemalloc.dという名前のファイルに保存します:

#pragma D option quiet
fbt::kmem*alloc*:entry 
{ 
  @[caller] = count(); 
} 
dtrace:::END 
{ 
  printa("%40a %@10d\n", @); 
}

このスクリプトを実行すると、次のような出力が得られます。

              vmlinux`vm_area_alloc+0x1a          1
           vmlinux`__sigqueue_alloc+0x65          1
          vmlinux`__create_xol_area+0x4d          1
          vmlinux`__create_xol_area+0x6f          1
               vmlinux`vmstat_start+0x39          1
           vmlinux`proc_alloc_inode+0x1d          1
         vmlinux`proc_self_get_link+0x5b          1
       vmlinux`security_inode_alloc+0x24          1
             vmlinux`avc_alloc_node+0x1c          1
       vmlinux`ep_ptable_queue_proc+0x3d          2
            vmlinux`kernfs_fop_open+0xbf          2
           vmlinux`kernfs_fop_open+0x2e8          2
            vmlinux`disk_seqf_start+0x25          2
               vmlinux`__alloc_skb+0x16c          6
                  vmlinux`skb_clone+0x4b          6
                  vmlinux`ep_insert+0xbb          8
                 vmlinux`ep_insert+0x34c          8
                  vmlinux`__d_alloc+0x29          9
        vmlinux`kernfs_iop_get_link+0x33          9
                vmlinux`single_open+0x2a         15
              vmlinux`proc_reg_open+0x6e         17
                   vmlinux`seq_open+0x2a         21
               vmlinux`__alloc_file+0x23         29
        vmlinux`security_file_alloc+0x24         29
       vmlinux`getname_flags.part.0+0x2c         40

この出力は、kmem*allocシステム・コールをコールする内部カーネル関数を示していて、システムで最も頻繁にカーネル仮想メモリーを割り当てるカーネル関数を調べるために使用できます。

fbtの安定性

fbtプロバイダは、DTraceの安定性メカニズムを使用してその安定性を記述します。これらの安定性の値を、次の表に示します。

要素 名前の安定性 データの安定性 依存クラス

プロバイダ

発展中

発展中

共通

モジュール

非公開

非公開

不明

関数

非公開

非公開

ISA

名前

発展中

発展中

共通

引数

非公開

非公開

ISA