DTrace は、Sun Microsystemsによって開発された、システム解析を容易に行なうためのツール群である。たとえば、お使いのFreeBSDシステムが行う特定の動作を「プローブ(probe)」して、プローブが起動した瞬間に指定した解析作業を行って結果を見ることができるスグレモノの開発環境である。DTraceはCommon Development and Distribution Licenseというライセンスの元で配布が認められ、FreeBSD7系列では7.1-RELEASEから配布されるようになった。
一方、GNU General Public Licenceと矛盾するためGPLで保護されたモジュールとCDDLで保護されたモジュールは合法的にリンクできないとGNUの さまざまなライセンスとそれらについての解説というページに記載がある。Linuxではこれが障害となって現在のところ移植は好事家の趣味の範囲を超えられない。ZFS(Zettabyte File System)でも同様の問題が生じるようだが、幸いFreeBSDはCDDLライセンスは問題無く利用できるので、ありがたく利用させてもらおう。
# cd /sys/i386/conf
# cp GENERIC MYCONF
# echo "options KDTRACE_HOOKS" >> MYCONF
# config MYCONF
Kernel build directory is ../compile/MYCONF
# cd ../compile/MYCONF
# make depend; make WITH_CTF=1 -j 3; make install
# shutdown -r now
とする。コンパイルの際、Compact C Typeを有効に必要があることに注意が必要だ。CTFを有効にし忘れると、チュートリアルにある最も基本的な操作の時点で動作しない。かなりマニアックで「しらんわー」と言いたくなるが仕方がない。
# dtrace -n BEGIN
dtrace: invalid probe specifier BEGIN: "/usr/lib/dtrace/psinfo.d", line 37: syntax error near "uid_t"
のようにエラーが出た人は、カーネルをもう一度作りなおす必要がある。
無事再起動がおわりログインした後、root権限でdtraceモジュールを読み込む。
# kldload dtraceall
This module (opensolaris) contains code covered by the
Common Development and Distribution License (CDDL)
see http://opensolaris.org/os/licensing/opensolaris_license/
CPU ID FUNCTION:NAME
0 38370 open:entry ugen0 open called
0 38371 open:return ugen0 open returned
0 38368 write:entry ugen0 write
writedata: USBC\0224Vx \0
0 38369 write:return Operation timed out