FreeBSD Daily Topics

2012年5月1日DTrace、FreeBSD 10-CURRENTでデフォルト有効化

current

DTrace default enabled on FreeBSD 10-CURRENT

FreeBSD 10-CURRENTにおいてDTraceの機能がデフォルトで有効化されました。これまでライセンスへの懸念からデフォルトでは無効化されていたDTraceですが、10-CURRENTではデフォルトで無効化されていたDTraceがデフォルトで利用可能になりました。

10-CURRENTでは、システムを起動したあとは次のようにカーネルDTraceのフックが入っていることを確認できます。

% sysctl -a | grep dtrace
kern.features.kdtrace_hooks: 1
% kldstat | grep dtrace
%

DTraceのカーネルモジュールを読み込むことで、DTraceの機能を利用することができます。

$ kldload dtraceall
% sudo kldload dtraceall
% sysctl -a | grep dtrace
kern.features.kdtrace_hooks: 1
debug.dtrace.providers: dtrace dtmalloc nfscl nfsclient fbt lockstat cbb vfs proc callout_execute mac mac_framework priv sctp syscall syscall profile
debug.dtrace.debug: 0
debug.dtrace.verbose_ioctl: 0
% kldstat | grep dtrace
16    1 0xffffffff82a44000 b73      dtraceall.ko
19   11 0xffffffff82a4f000 23b6ba   dtrace.ko
%
% dtrace -l | head
   ID   PROVIDER            MODULE                          FUNCTION NAME
    1     dtrace                                                     BEGIN
    2     dtrace                                                     END
    3     dtrace                                                     ERROR
    4   dtmalloc                                       nfsclient_req malloc
    5   dtmalloc                                       nfsclient_req free
    6   dtmalloc                                     nfsclient_bigfh malloc
    7   dtmalloc                                     nfsclient_bigfh free
    8   dtmalloc                                    nfsclient_diroff malloc
    9   dtmalloc                                    nfsclient_diroff free
%

システム起動時に自動的にDTraceカーネルモジュールを読み込ませたい場合には、/boot/loader.confファイルに次の設定を追加しておきます。

dtraceall_load="YES"

10-CURRENTよりも前のバージョンでは今のところ明示的にオプションを指定してカーネルをビルドする必要があります。amd64版とi386番でカーネルオプションが違うほか、ビルドの指定オプションが異なります。

amd64版では次のカーネルオプションが必要になります。

options        KDTRACE_HOOKS           # mandatory
options        DDB_CTF                 # mandatory
options        KDTRACE_FRAME           # for amd64
makeoptions    DEBUG="-g"              # for amd64
makeoptions    WITH_CTF=1              # 9.0+

i386版では次のカーネルオプションです。

options        KDTRACE_HOOKS           # mandatory
options        DDB_CTF                 # mandatory

9.0またはこれ以降のバージョンの場合には、次の設定もカーネルオプションとして追加します。

makeoptions    WITH_CTF=1              # 9.0+

9.0以降のバージョンではビルドは次のように実施します。

$ make buildkernel KERNCONF=FREEBSD
$ make installkernel KERNCONF=FREEBSD

9.0よりも前のバージョンを使っている場合、次のようにWITH_CTFオプションを指定する必要があります。

$ make buildkernel KERNCONF=FREEBSD WITH_CTF=1
$ make installkernel KERNCONF=FREEBSD

DTraceはカーネル開発やアプリケーション分析において有益な機能です。

おすすめ記事

記事・ニュース一覧