Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

3.5.7. 統計集計の計算

統計集計は、新規データを素早くかつ大量に累積 (集計ストリーム統計情報のみを保存) することが重要な場合に、数的値の統計情報を収集するために使用されます。統計集計はグローバル変数またはアレイ内の要素として使用できます。
統計集計に値を追加するには、演算子 <<< value を使用します。

例3.19 stat-aggregates.stp

global reads	
probe vfs.read
{
  reads[execname()] <<< count
}
例3.19「stat-aggregates.stp」 では、演算子 <<< count が、reads アレイ内の対応する execname() の関連する値に count が返した数字を 保存 します。これらの値は 保存される のであって、各一意のキーの関連する値に追加されたり、現行の関連する値に置き換わるものではありません。各一意のキー (execname()) に複数の関連する値があり、ハンドラーが実行するプローブで累積していると考えればよいでしょう。
注記
例3.19「stat-aggregates.stp」 のコンテキストでは、count は、仮想ファイルシステムに返された execname() が書き込んだデータ量を返します。
統計集計によって収集されたデータを抽出するには、構文形式 @extractor(variable/array index expression) を使用します。extractor は次の整数抽出のいずれかです。
count
変数やアレイのインデックス式に保存されたすべての値の数を返します。例3.19「stat-aggregates.stp」 のサンプルプローブでは、@count(writes[execname()]) の式は、アレイ writes の各一意のキーに 保存されている値の数 を返します。
sum
変数やアレイのインデックス式に保存されたすべての値の合計を返します。例3.19「stat-aggregates.stp」 のサンプルプローブでは、@sum(writes[execname()]) の式は、アレイ writes の各一意のキーに 保存されている値すべての合計 を返します。
min
変数やアレイのインデックス式に保存されたすべての値で最も小さいものを返します。
max
変数やアレイのインデックス式に保存されたすべての値で最も大きいものを返します。
avg
変数やアレイのインデックス式に保存されたすべての値の平均を返します。
統計集計を使用する際には、複数のインデックス式 (最大 5 つ) を使用するアレイコンストラクトを構築することもできます。これは、プローブ中に追加のコンテキスト情報を捕捉する際に便利です。以下に例を示します。

例3.20 複数のアレイインデックス

global reads
probe vfs.read
{
  reads[execname(),pid()] <<< 1
}
probe timer.s(3)
{
  foreach([var1,var2] in reads)
    printf("%s (%d) : %d \n", var1, var2, @count(reads[var1,var2]))
}
例3.20「複数のアレイインデックス」 では、最初のプローブで各プロセスが実行した VFS read の数を追跡します。この例が他と異なる点は、このアレイは実行された read をプロセス名 それに対応するプロセス ID の両方に関連付けしている点です。
例3.20「複数のアレイインデックス」 の 2 つ目のプローブは、アレイ reads が収集した情報を処理して出力する方法を示しています。foreach ステートメントは、最初のプローブのアレイ reads の最初のインスタンスに含まれる変数 (var1 および var2) と同じ数を使用している点に注意してください。