機械翻訳について

集積体

集積体を使用すると、統計分析用のデータを蓄積できます。 集積体は実行時に計算されるため、後処理は不要になり、処理が非常に効率的で正確になります。 集積体は連想配列と同様に機能しますが、集積関数によって移入されます。 Dでは、集積体の構文は次のとおりです。

@name[ keys ] = aggfunc( args );

集積体のnameは、特殊文字@で始まるD識別子です。 Dプログラムでは、名前が付けられたすべての集積体はグローバル変数です。 集積体にスレッド・ローカルまたは節ローカルのスコープを設定することはできません。 集積体名は、その他のDグローバル変数とは別の識別子名前空間に保持されます。 名前を再利用する場合、a@aは同じ変数ではないことに注意してください。 特殊な集積体名@は、Dプログラム内で匿名の集積体を指定する場合に使用できます。 Dコンパイラは、この名前を集積体名@_の別名として扱います。

集積体には、通常のものと索引付きのものがあります。 索引付き集積体はキーを使用します。キーは、連想配列に使用される式のタプルと同様に、D式のカンマ区切りリストです。 通常の集積体は、索引付き集積体と同様に扱われますが、索引付けのためにキーを使用しません。

aggfuncはDTrace集積関数の1つであり、argsはその関数に適した引数のカンマ区切りリストです。 ほとんどの集積関数は、新規のデータを表す単一の引数を受け入れます。

集積関数

次の関数は、データを収集して意味のある方法で表示するために、プログラムで使用できる集積関数です。

  • avg: 指定した式の算術平均を集積体に格納します。

  • count: 増分されたカウント値を集積体に格納します。

  • max: 指定した式のうちの最大値を集積体に格納します。

  • min: 指定した式のうちの最小値を集積体に格納します。

  • sum: 指定した式の合計値を集積体に格納します。

  • stddev: 指定した式の標準偏差を集積体に格納します。

  • quantize: 指定した式の値の二乗度数分布を集積体に格納します。 オプションの増分を指定できます。

  • lquantize: 指定した範囲のサイズで、指定した式の値の線形度数分布を集積体に格納します。

  • llquantize: 対数線形度数分布を集積体に格納します。

集積体の出力

デフォルトでは、Dプログラムで導入された順番で複数の集積体が表示されます。 この動作は、集積体を出力するprinta関数を使用してオーバーライドできます。 printa関数では、フォーマット文字列を使用して集積データを正確にフォーマットすることもできます。

Dプログラム内の集積体がprinta文でフォーマットされていないときに、dtraceコマンドを実行すると、集積体データのスナップショットが生成され、その結果はトレースの完了後にデフォルトの集積体の書式で出力されます。 集積体がprinta文でフォーマットされている場合、デフォルトの動作は無効になります。 printa(@aggregation-name)文をプログラムのENDプローブ節に追加しても、同じ結果が得られます。

集積関数avgcountminmaxstddevおよびsumのデフォルトの出力フォーマットでは、それぞれのタプルの集積値に対応する10進整数値が表示されます。 集積関数quantizelquantizeおよびllquantizeのデフォルトの出力フォーマットでは、結果を含むASCIIヒストグラムが表示されます。 集積体タプルの出力は、それぞれのタプル要素にtraceが適用されたかのように出力されます。

データの正規化

ある程度の期間にわたってデータを集積するときには、なんらかの定数係数に基づいてデータを正規化できます。 この技法を使用すると、ばらばらのデータをより簡単に比較できます。 たとえば、システム・コールを集積する場合、システム・コールを実行の過程の絶対値ではなく、秒当たりのレートとして出力します。 DTraceのnormalize関数では、この方法でデータを正規化できます。 normalizeのパラメータは、集積体と正規化の係数になります。 集積体の結果としては、個々の値を正規化係数で割った値が出力されます。