OS Windows

Windows XP の Performance についての考察

2010年4月11日

Google Desktop の index の作成をし始めたら、マシン(Windows XP / ThinkPad X61) の操作がままならない程遅くなったので、CPUの使用率を見てみると、CPU的には殆ど使用している気配がなかった。
Windows OS の Performance を考える上で、面白そうな事例なので、Windows の perfmon を使って状況を分析してみた。

image

上のグラフが重たくて、Webブラウザのスクロールも暫く固まる様な状態で採取した Windows の Perfmon のグラフ。

マシンがカクカクする状態でも、ピンク色の%Idle Time は、80%近辺で CPUとしては余裕を示している。

ThinkPad の HDDのLEDのインジケーターが点灯しっぱなしなので、CPU使用率のLinux/UNIX で言う IO Wait に相当するものを探してみる。が、見つからない。
Linux / Unix では、「IO Wait」が CPU使用率の一部に含まれているが、Windows の Performance Counter を、いろいろ眺めている限りは、Windows には、Linux/UNIX の IO Wait に相当する指標が無いような気がする。

そこで、Webを検索してみる。
この記事を読むと、Linux の IO Wait は、Idle の一種と言う見解が示されている。vmstat では、IO Wait の部分と、Idle の部分を分離して表示してくれるようだ。
となると、Windows も同様に IO Wait は、実は「%Idle Time」の中に含まれているのかもしれない。Windows (少なくても Windows XP) は、それを分離して表示する事ができないとなると、Linux/UNIX (のvmstat )の Idle (%)と Windows の Idleを同列に考えてはいけないと考えられる。(考察が正しいとしてだが。。)

Windows の場合は、IO を別の指標でみなければいけないようなので、青色の 「Avg. Disk Queue Length」に注目してみる。
「Avg. Disk Queue Length」の値が100を超えているが、「スケール」が、100になっているので、x100倍になっている(この解釈は正しい?)と考えると、値としては1~で、ほぼ常に Disk待ちのスレッドがある事になる。1つの待ちIOがあるだけで、時たまマシンがカクカクする。という状況に陥っているみたいだ。(もちろん、他に原因がなければ。だが。。)

下が Google Desktop を停止させてマシンがさくさく動く様になった時点のキャプチャー。「Avg. Disk Queue Length」以外に大きな違いが見えない。やはり、原因は、Disk のIO待ちの様に思える。(マシンのHDDランプが付きっぱなしだったので間違いなさそうだ)

image

個人的なまとめ

Windows マシンの Performance に問題が発生していないか検知するには、少なくても3つの観点が必用な気がする。
(あくまで現時点の知識で、経験を積んで改良して行きたい。。)

・CPUの不足の監視 – 「%Idle Time」が十分に残っているか?「Processor Queue Length」(※1)が常時高い値でないか?

・Memory 不足の監視 - メモリのスワップが大量に発生していないか?「Pages/sec」等(※2)

・Disk IO のボトルネック発生の監視 – 「Avg. Disk Queue Length」が常に発生していないか?(今回のケースを見ると1になっているともうダメの様だ)

※1) Processor Queue Length を指標のひとつとして取り上げるべきだろうと考えるのは、UNIX/Linux で同様の指標である。Load Average(負荷平均。表示するための コマンドは uptime )が、システム全体の負荷を表す指標として使われるため。Load Average(負荷平均)もCPUが平均してどのくらいのスレッドをこなしているかの数を示す。1個 の CPU が、さくさく処理をこなしているのであれば平均すると1以下の値になり、常にだれかを待たせているのであれば、1を超える。

Processor Queue Length は、システム全体を示すので、コアが2つある場合は、2で割ると、1core辺りの待ちスレッド数が出る。Windows の説明によるとプロセッサ辺り、10未満であれば大きな問題では無い事が多いとしている。(「プロセッサごとの、持続されているプロセッサのキューが 10 スレッドに満たない場合は、負荷にもよりますが通常有効です。」とある)
image
10未満と言うのは、少々大きすぎる気もするが、人によって感覚も異なるし、環境によっても差がありそうな所なので、なんとも判断が難しそうだ。実際に自分で経験を積んで体得する所の様な気がする。ただ、UNIX/Linux の世界では、1CPU辺り、1.5~2等と言われている事が多い気がする。
GIGAZINE の以下の記事では、ブログのシステムで負荷平均が 2くらいであれば、快適に動作している事が読み取れる。

GIGAZINE最大の挑戦、LoadAverage「86」から「3」へ – GIGAZINE
GIGAZINEのLoadAverageを「27」から「2」へ下げた方法 - GIGAZINE

※2) いろいろ指標があると思うが、「Pages/sec」を特に取り上げたのは、Windows のカウンターの説明に「フォールトのプライマリー・インジケーター(主要な指標)です」とあるので。

image

-OS, Windows

Copyright© エンジニアの何でもメモ帳 , 2020 All Rights Reserved.