More info...

2008-05-17

ひとことTips/DTrace

DTraceで何かをトレースするときはProbe名を限定してヒットするProbeを減らすべし!述語(predicates)による条件判定のみで解決しようとしてはいけない。さもなくば、トレースする対象のプログラムがスローダウンしてしまうことだろう。

努々次のようなDプログラムを書いてはならない。

pid$target:::entry<
/ probefunc == "fprintf" /
{
  trace(arg0);
}
このコードでは全ての関数呼び出しにおいてDTraceモジュールが呼び出され、述語(この場合はprobefunc == "fprintf")の判定が行われることになるので、プログラムの動作はかなり遅くなってしまうだろう。代わりに以下のように書くべし!
pid$target:::fprintf:entry
{
  trace(arg0);
}
このProbeはfprintf()の呼び出しでのみDTraceモジュールの呼び出しが行われるので、他の関数呼び出しには一切影響を及ぼさない。そのため実行中のプログラムの性能に対する影響を最小限に抑えることが出来るのだ。 FireするProbe数をProbe名で制限するのはオトコの嗜みであると言えよう。

0 件のコメント:

コメントを投稿