TSV 形式

このページでは、Performance Monitor 関連ツール で 前提としている TSV 形式について説明します。

非常にあっさりと、どうやって生成するのか、という観点から言ってしまうと、

  1. relog.exe に -f TSV というオプションをつけて書き出したファイルを
  2. dos2unix コマンドを使って改行コードを LF(0x0a) だけにする
  3. さらに iconv -f CP932 -t UTF-8 を使って、文字コード変換
という3ステップをかけて、加工したものになります。

あ、ただし、3ステップ目は Windows の Locale によって、 from の文字コードをいろいろ変える必要があります。 カウンター値の中に言語依存なものが一部残っていて、 どのフォーマットで出てくるのかこれを書いている私には、 皆さんの環境でどうなるのかの予測はつきません。


要素

もう少し詳細に説明しましょう。

このTSVは 要素 の2次元配列です。 各要素は次の3種類の中のどれかになっています。

どの要素であっても、記述がUTF-8の文字列として表現されていることに変わりはありません。

ラベル名は第1行目にしか存在しません。

日時は、第2行目以降の第1列目にしか存在しません。

それ以外の要素はすべて浮動小数点数値か「空」です。

ラベル名には「タブ」文字と 0x00 は使われていません。 また、非常に高い確率でダブルクオート(")も使われていないでしょう。 ただし、このダブルクオートに関してだけはちょっと自信がない。 ただ、おそらく、ダブルクオート自身を表現する場合は、 ダブルクオート2連続("")が使われると思われます。

すべての要素は、ダブルクオート(")で囲まれています。 空要素の場合は "" と表します。

すべてのダブルクオートで囲まれた要素間は、 1つ以上のタブ文字が入っています。

各行を構成する要素数はすべての行で同じです。

各行の、先頭から数えて x 個目の要素は、同じ列を構成しています。 同じ列の要素は、第1行目のx個目の要素に入っているラベル名のカウンターの、 その行の第1要素に書かれた時刻にサンプリングされたデータになります。

…ややこしいですね。 ある要素が y行目の、先頭から数えてx個目である事を d[x][y] と表すとします。 ただし、一番最初の行は「第0行」、一番最初の要素は「第0個目」と数えるとします。 この場合に次の2つのことが成り立つ、ということです。

空要素

すべての列にはラベル名があります。 つまり d[x][0] で表されるすべての要素に、空要素は存在しません。

第0行を除く全ての行の第0個目の要素は日時です。 つまり d[0][y] は y≧1 については、日時になります。 ですので d[0][y] で表されるすべての要素に、空要素は存在しません。

それ以外の要素は空要素が存在しえます。 なぜ、その要素が空要素になったのかは、その要素が何を表しているのかに依存します。 例えばTotal CPU usageに関係するデータを保存している列であれば、 空要素になることはないでしょう。 しかし仮想マシンを使っている場合でマルチコア環境の場合、 特定のCPUコアがあるタイミングではその仮想マシンに割り振られていなかった、 という理由で空要素になることはありえるわけです。

浮動小数点数値

浮動小数点数値は、 32bit あるいは 64bit の整数カウンター値をベースに造られています。

カウンター値がそのまま出力されるのか、 カウンター値に何らかの演算が施された後に出力されているのかは、 列ごとに異なります。

重要なのは、表現は10進数であっても、 ベースになっているのは2進数であって10進数ではなく、 特に「何らかの演算」がなされた後の値は10進数の表現自体が誤差を含んでいる、 という点です。

このことから、次のようなことが分かります。