DTrace ユーザーガイド

DTrace 集積体

パフォーマンス関連の問題を調査するときは、通常、個々のデータポイントではなく、集積データを調べるほうが効果的です。DTrace には、いくつかの組み込みの集積関数が用意されています。データ集合のサブセットに集積関数を適用し、これらのサブセットの分析結果に再度集積関数を適用すると、データ集合全体に集積関数を適用した場合と同じ結果になります。

DTrace 機能は、集積のため、データ項目のランニングカウントを格納します。集積関数は、現在の中間結果と、関数の適用先の新規要素のみを格納します。中間結果は、CPU 単位で割り当てられます。この割り当て方式では、ロックは必要ありません。したがって、実装は本質的にスケーラブルです。

DTrace 集積体の構文

DTrace 集積体の一般構文は、次のとおりです。

@name[ keys ] = aggfunc( args );

この一般構文では、変数は次のように定義されています。

name

集積体の名前。先頭に @ 文字が付きます。

keys

D 式をコンマで区切って指定します。

aggfunc

DTrace 集積関数のいずれか。

args

その集積関数に対応する引数をコンマで区切って指定します。

表 2–1 DTrace の集積関数

関数名 

引数 

結果 

count

なし 

count 関数が呼び出される回数。

sum

スカラー式 

指定された式の合計値。 

avg

スカラー式 

指定された式の算術平均。 

min

スカラー式 

指定された式のうちもっとも小さい値。 

max

スカラー式 

指定された式のうちもっとも大きい値。 

lquantize

スカラー式、下限値、上限値、ステップ値 

指定された式の値から成る、指定された範囲の線形度数分布。この集積関数は、指定された式より小さい、最大バケット内の値を増分します。

quantize

スカラー式 

指定された式の値の二乗度数分布。この集積関数は、指定された式より小さい、2 のべき乗の最大バケット内の値を増分します。


例 2–14 集積関数の使用法

次に示すのは、count 集積関数を使って、プロセスごとに write(2) システムコールの数をカウントする例です。この集積体は、dtrace コマンドが終了するまで、一切のデータを出力しません。出力される内容は、dtrace コマンドがアクティブであったときに収集されたデータの概要です。


# cat writes.d
#!/usr/sbin/dtrace -s
syscall::write:entry]
{   @numWrites[execname] = count();
}

# ./writes.d
dtrace: script 'writes.d' matched 1 probe
^C
  dtrace                           1
  date                             1
  bash                             3
  grep                            20
  file                           197
  ls                             201