Hisayoshi Kato's weblog at Sun Solution Center
最近のDTrace
最新のnevadaでDTraceを試しているのですが、いくつかのupdateがされているようです。最近のprovider
1)fsinfo providerの追加
[root@noto03.jp.iforce.net]$ dtrace -l | awk '{print $2}' | sort -u
PROVIDER
dtrace
fbt
fpuinfo
fsinfo
io
libCrun1238
lockstat
mib
plockstat1238
proc
profile
sched
sdt
syscall
sysinfo
vminfo
下記のようなコマンドで、writeされるかがわかります。
[root@noto03.jp.iforce.net]$ dtrace -n 'fsinfo:::write{@[pid,probefunc,execname]=count();}'
dtrace: description 'fsinfo:::write' matched 1 probe
^C
8653 fop_write mkfile
129
詳しくは、dtrace -l -P fsinfoをご覧ください。
2)mod,func,sym,umod, ufunc, usymユーザー関数トレース追加
CPUのuser%が高い場合によく使う方法には、やはりprofileをとる必要があります。
dtrace profile providerにて、profileする方法があります。
下記のように、profileプロバイダーのarg0は、kernelの値、arg1は、user値を取ります。
下記のように、arg1で分岐をとって、user stackをとるのが一般的ですが、
[root@noto03.jp.iforce.net]$ dtrace -n 'profile-997/arg1/{@[ustack(),execname]=count ( ) }'
dtrace: description 'profile-997' matched 1 probe
^C
libc.so.1`queue_alloc+0x74
libc.so.1`queue_lock+0x1c
libc.so.1`cond_sleep_queue+0x2c
libc.so.1`cond_wait_queue+0x28
libc.so.1`cond_wait_common+0x2b4
libc.so.1`_cond_reltimedwait+0x1c
libc.so.1`cond_reltimedwait+0x14
libc.so.1`pthread_cond_reltimedwait_np+0xc
libdtrace.so.1`dtrace_sleep+0x15c
dtrace`main+0x1cf4
dtrace`_start+0x17c
dtrace 3
[root@noto03.jp.iforce.net]$ dtrace -n 'profile-997/arg0/{@[stack(),execname]=count ( );}'
dtrace: description 'profile-997' matched 1 probe
sched 109
unix`disp_getwork+0x8c
unix`idle+0xd0
unix`thread_start+0x4
sched 124
unix`disp_getwork+0x98
unix`idle+0xd0
unix`thread_start+0x4
sched 131
usymを使うと、何も考えずuser symがトレースできてしまいます
[root@noto03.jp.iforce.net]$ dtrace -n 'profile-997{@[usym ( arg1 ) ,execname]=count ( ) }'
dtrace: description 'profile-997' matched 1 probe
^C
0x0 picld
1
libc.so.1`mutex_unlock fmd
1
libc_psr.so.1`memcpy dtrace
1
libc.so.1`memcpy dtrace
1
この次は、system symをみてみましょう。
[root@noto03.jp.iforce.net]$ dtrace -n 'profile-997{@[sym(arg0),execname]=count ( );}'
dtrace: description 'profile-997' matched 1 probe
^C
unix`utl0 dtrace
1
unix`ktl0 sched
1
unix`pp_load_tlb dtrace
1
unix`lock_set sched
1
unix`mutex_enter fsflush
1
unix`syscall_trap dtrace
1
unix`kstat_zone_find intrd
あらら、便利ですね。。。
他にもたくさんupdateされているようなので、これからじっくりと。。。
http://www.opensolaris.org/os/community/dtrace/;jsessionid=4EE9337460506B0E6C02BE172B9B7903
Posted at 09:25AM Oct 18, 2006 by katohisa in DTrace | Comments[2]
Wednesday Oct 18, 2006






なんというか、簡単ですね。
何か設定ファイル(Dスクリプト?)を用意しなければいけないのかと思っていたのですが・・・。
拍子抜けでした。
しかも、これは役に立つproviderですね。
dtraceコマンドを初めて実行しましたが、一行コマンドをコピペするだけで動く、と思ってない人が多いと思いますよ。
俺だけじゃないと思います。
『初めてのDTrace (まずは触ってみなヨー)』みたいな記事があると、みんなの興味を引くと思いますです。
Posted by かどわき on December 28, 2006 at 01:42 PM JST #
Posted by katohisa on December 30, 2006 at 01:32 PM JST #