Posted by kecoak on Jan 16, 2009

Dtrace on FreeBSD

Proses tracing adalah salah satu bagian penting dari task seorang administrator sistem, melihat proses yang sedang berjalan, idle atau yang lainnya akan sangat membantu dalam proses pengaturan sistem itu sendiri. Banyak tools tracing yang tersedia, seperti ktrace, strace dan yang lainnya. Salah satu yang cukup powerfull bagi penulis adalah dtrace. Dtrace adalah sebuah tools yang datang dengan berbagai fungsi dan kegunaan yang sangat membantu proses tracing yang dibuat oleh SUN dan menjadi bagian dari sistem operasi SunOS maupun OpenSolaris. Salah satu feature yang sangat menarik dari dtrace adalah penggunaan D language sebagia scripting language buat dtrace itu sendiri.
FreeBSD sebagai salah satu sistem “Unix like” ikut memanfaatkan penggunaan dtrace sebagai salah satu tracing tool. Bagi para pengguna sistem ini, perlu sedikit modifikasi terhadap kernel, apabila ingin menggunakannya. Berikut langkah-langkah penggunaan dtrace di dalam sistem FreeBSD:

Pada langkah pertama saya menambahkan beberapa options untuk penggunaan dtrace, kemudian melakukan compile ulang pada kernel FreeBSD saya dengan option WITH_CTF (C Type Format).

k-elektronik# uname -sr
FreeBSD 7.1-RELEASE-p2
k-elektronik# cd /usr/src/sys/i386/conf/
k-elektronik# tail -n 2 K-Elektronik
options         KDTRACE_HOOKS
options         DDB_CTF
k-elektronik# cd /usr/src/
k-elektronik# make WITH_CTF=1 buildkernel KERNCONF=K-Elektronik
k-elektronik# make WITH_CTF=1 installkernel KERCONF=K-Elektronik
k-elektronik# reboot

Langkah kedua, saya meload module dtraceall ke-dalam kernel FreeBSD, jika ingin melakukan secara otomatis setiap kali ketika sistem boot, edit file /boot/loader.conf.

k-elektronik# kldload dtraceall
k-elektronik# kldstat
Id Refs Address    Size     Name
1   12 0xc0400000 990bb8   kernel
2    1 0xc0d91000 20d8     dtraceall.ko
3    4 0xc0d94000 3f98     cyclic.ko
4    9 0xc0d98000 23cc     opensolaris.ko
5    7 0xc0d9b000 ba188    dtrace.ko
6    2 0xc0e56000 26d8     dtmalloc.ko
7    2 0xc0e59000 456c     fbt.ko
8    2 0xc0e5e000 2788     sdt.ko
9    2 0xc0e61000 e340     systrace.ko
10    2 0xc0e70000 33b0     profile.ko
11    1 0xc0e74000 6a2c4    acpi.ko

k-elektronik# cat /boot/loader.conf
dtraceall_load="YES"

Seperti terlihat diatas, module dtrace telah di load oleh kernel, untuk mencobanya, buat script sederhana seperti dibawah ini:

k-elektronik# cat counter.d
dtrace:::BEGIN
{
i = 10;
}

profile:::tick-1sec
/i > 0/
{
trace(i--);
}

profile:::tick-1sec
/i == 0/
{
trace("blastoff!");
exit(0);
}

k-elektronik# dtrace -s counter.d
dtrace: script 'counter.d' matched 3 probes
CPU     ID                    FUNCTION:NAME
0  33203                       :tick-1sec        10
0  33203                       :tick-1sec         9
0  33203                       :tick-1sec         8
0  33203                       :tick-1sec         7
0  33203                       :tick-1sec         6
0  33203                       :tick-1sec         5
0  33203                       :tick-1sec         4
0  33203                       :tick-1sec         3
0  33203                       :tick-1sec         2
0  33203                       :tick-1sec         1
0  33203                       :tick-1sec   blastoff!

Dtrace sendiri banyak memiliki fungsi-fungsi yang bisa anda gunakan untuk keperluan tracing, dokumentasinya bisa anda baca disini,

k-elektronik# dtrace -l | more
ID   PROVIDER            MODULE                          FUNCTION NAME
1     dtrace                                                     BEGIN
2     dtrace                                                     END
3     dtrace                                                     ERROR
4   dtmalloc                                          madt_table malloc
5   dtmalloc                                          madt_table free
6   dtmalloc                                             acpidev malloc
7   dtmalloc                                             acpidev free
8   dtmalloc                                                 fbt malloc
9   dtmalloc                                                 fbt free
10   dtmalloc                                              apmdev malloc
11   dtmalloc                                              apmdev free
k-elektronik# dtrace -l | wc -l
33204

Ok, Selamat bereksplorasi dengan dtrace di FreeBSD!

Salam,

jackD

Post a Comment

6 Responses to “Dtrace on FreeBSD”

  1. d0nz says:

    Keren brader 🙂

  2. moon says:

    kenapa ya sy koq gak bisa kldload dtraceall. FreeBSD 7.1-RELEASE-p2 di Pentium III
    fbsd# kldload dtraceall
    kldload: can’t load dtraceall: No such file or directory
    fbsd#

    pdhl di
    fbsd# ls /boot/kernel/dtrace*
    /boot/kernel/dtrace.ko /boot/kernel/dtrace_test.ko /boot/kernel/dtraceall.ko
    /boot/kernel/dtrace.ko.symbols /boot/kernel/dtrace_test.ko.symbols /boot/kernel/dtraceall.ko.symbols
    fbsd#

    make WITH_CTF=1 udah di jalankan waktu build kernel.
    makasih.

  3. jackD says:

    apa udah yakin di config file untuk kernelnya ada option ini?
    options KDTRACE_HOOKS
    options DDB_CTF

  4. moon says:

    Udah bos. Yakin.

  5. moon says:

    Udah bisa bos, saya compile kernel pakai GENERIC punya dan sy tambah option2 di atas, coz sebelumnya kernel sy custom(udah di tambah option2 diatas jg)device & options bbrp saya hilangkan, tp blm tau options mn yg menyebabkan gak bisa jalan. matur nuwon.

  6. topmarkotop says:

    alow brother..
    aku newbie neh, ada yang punya tutorial freebsd ga?
    aku baru mau belajar neh.
    email me at [email protected]
    thanks

Leave a Reply

Your email address will not be published. Required fields are marked *