2008年8月3日

performance monitor の出力に辟易している話

Windowsには Performance Monitor と言うものがある。

システムの評価、できてますか?

身近な定量評価その2 - Windowsのperfmon.exeを使ってみる


なんかを見ると起動の仕方とか、出てくるグラフとかが判ると思う。Unixでいうtopと *stat シリーズを足して貧相なGUIを付け加えたような代物だ。基本的にシステムの異常を監視するときにはよいが、何が悪いのか知ろうというときにはあまり役に立たない

しかし、世界は広いというか物を知らない人は多いと言うか…
「システムの調子が悪いので見てください」
と言って、こいつが吐く .blg ファイルをゴッソリ送りつけてくるやからがいる。
「取りあえず何をとったらいいのか判らないので、全部とりましたから」
とか言いながら。そんな所にはヒントは無いと言うのに。

perfmonは「全部」取ったりすると 3000項目以上データを取得してくれる。1分に1回取得しても8時間分取得すると480回取得するわけだ。これだけのデータを perfmon の貧相なGUIで見て回るのははっきり言って不可能に近い。

このままではどうしようもないので、Excel にでも食わせて見るか…しかし MS-Office 2003 とかを使っていると、これもまた無理、と判る。Excel-2003は「1シート当たり、256列 65536行」しか受け付けないのだ。3000項目 × 480回のデータ取得ではどうあがいてもシートの中に納まりきらない。

そこで、だ。こういう場合にどうするか、と言うのが今回のお題。とは言っても、このままではノーヒント過ぎるのでヒントを1つもらう。

「調子が悪い、と言うのはどうやって判ったの?」
「あー、なんかCPUの利用率が天井に張り付いてるんですよ…」

なるほど。これで戦略は立った。CPUの利用率と相関が高い項目を見つけ出して、そいつらが何なのか調べればいい、と言うわけだ。

「あ、ちなみに。Aっていう場所では起こってるんですが、Bという場所では起こっていないんで…。両方とも perfmon の出力は取ってあります」

ふむ。ならば、AとBでそれぞれについてCPUの利用率との相関を取って、『Aでは相関が高いが、Bでは低いもの』を見つけ出せばいいって事になるな。



現実的には、『CPUの利用率』というのは「ユーザが利用している」場合と「kernelが利用している」場合の2通りがある。どちらが本命か判らない。こういう場合は CPUの非使用率 、つまり CPU Idle との相関を取ると良い。CPU Idle の値が低い場合に多く動くもの、あるいはリソースとして少なくなるものを見つければいい。

そういう時は R2 というものを取ればいい。あぁ、大丈夫。 R2というのは 0.0 から 1.0 の間の値を取り、『相関が高いほど値がでかくなる不思議な数字』とだけ覚えておけばいい。さらに言うと、注目するべきは 0.25 以上の値をとっているもので、なおかつ 1.0 ではないもの(1.0は直接的過ぎて、ちょっと怪しい)。

もっと詳しい事が知りたければこの本を見て欲しい。


R2 という値自体は、Excelの RSQ() という関数で求める事ができる。どうにかしてデータを Excel にぶち込み、各項目と CPU Idle 値との RSQ() 値を求め、その中から 0.25 以上の数字になっている項目を見つけ出せばいいのだ。

.....

そう。そうして問題が元に戻ってくる。perfmon の blg ファイルから、Excelに入る程度の小さなデータセットを作り出す方法、その中に必ず CPU Idle の値を入れておく方法、そしてできれば各項目との RSQ() 指定までは自動的にする方法…

なるべく苦労せず、ステップ バイ ステップで(つまりいつでも後戻りできる形で)実行するにはどうすればいいのか… その苦闘の歴史を綴ろう。