カーネル挙動を追尾する「DTrace」の実力OS選択の新常識(6/8 ページ)

» 2005年04月22日 13時53分 公開
[大澤文孝,ITmedia]

quantize集計関数で頻度をグラフ表示する

 コマンドごとの読み取りに要した時間総計を見るのではなく、「何回の呼び出しがあって、それぞれの所用時間はどの程度の配分になっているのか」を知りたいケースもある。

 この目的のためには、quantize集計関数とlquantize集計関数が用意されている。

 quantize集計関数は結果を2の累乗で、lquantize関数は指定した数値単位ごとに区切り、それぞれ「どの値がどの頻度で現われるのか」をグラフ化するものだ。ここでは、リスト2のreturnプローブ処理を次のように変更する。


syscall::read:return
{
  @time[execname] = quantize (timestamp - self->time);
}

 すると、実行結果は、次のようになる。


# dtrace -s filereadtime.d
^C
  cat
     value  ------------- Distribution ------------- count
      4096 |                                         0
      8192 |@@@@@@@@@@                               1
     16384 |@@@@@@@@@@@@@@@@@@@@                     2
     32768 |@@@@@@@@@@                               1
     65536 |                                         0
  more
     value  ------------- Distribution ------------- count
      8192 |                                         0
     16384 |@@@@@@@@@@                               1
     32768 |@@@@@@@@@@@@@@@@@@@@                     2
     65536 |                                         0
        :

 この出力形式の読み取り方は、例えばcatの部分について見れば、

  • 8192ナノ秒〜16384ナノ秒が1回
  • 16485ナノ秒〜32768ナノ秒が2回
  • 32768ナノ秒〜65536ナノ秒が1回

の計4回の呼び出しがされたという意味になる。

 このようにquantize集計関数を使えば、単純な総計を見るのではなく、「どの値がどのような頻度で発生するのか」を調べることができるのだ。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ