SSブログ

何もしてないのにCPU使用率が高い [Windows]

Vistaを使ってるとたまに何もしていない状態でCPU使用率が高い状態に陥ることがある。
タスクマネージャの「プロセス」を見るとCPUを食ってるプロセスがない。(もちろん「すべてのユーザのプロセス」で。)

まったくもって謎だったが、Process Explorerで確認すると、Hardware InterruptsがCPUを食っていることが判明。
当たり前だがHardware Interruptsというのは便宜上こういう名前で表示されているだけでプロセスじゃない。
よってタスクマネージャのプロセス欄には表示されない。

さて、状況はわかったが原因がはっきりしない。
可能性のひとつとしていわゆるPIO病(ドライブ類の転送モードがDMAではなくPIOになってしまっている状態)が挙げられるが、特にそういった状況ではなかった。

で、こうなった場合は再起動するしかないかと思っていたが、一旦スリープさせてやると復帰時にはHardware InterruptsのCPU使用率は下がることがわかった。
対症療法になってしまうけど、特に副作用もないので当面これで対処しようと思う。

あくまで感覚的な話だが、どうも長時間(丸一日とか)起動させっぱなしだと起きる気がする。
nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

無

(1)DPCとは
プライオリティの低くてもいい処理を後回しにして、高いプライオリティでの動作時間を減らす処理方法。

(2)原因
マルチプロセッサシステムでネットワークカードからCPUへの割り込みが入った場合、それが緊急度が高くないと判断されるとDPCとなって延期される。この延期されたDPCが特定のCPUに多くなってくると、もう片方のCPUに送られてしまい更に負荷が高くなってしまう。これはWindowsのデフォルト動作である。ネットワーク常時接続環境のマルチCPU使用PCで長時間起動やスリープ状態等での使用時に起こりがちな現象。

(3)解決策
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NDIS\Parameters
にあるProcessorAffinityMaskの値を0にする(無ければ追加)して再起動。割り込みを処理したCPUが、そのCPUに対応するDPC の処理も実行される。1つまたは複数のネットワークインタフェースカードが特定のCPUに固定されないようになる。その結果、割り込みとネットワークインタフェースカードで生成されるDPCに対するCPUの処理が改善される。再発の際は再度同作業を行う。一度試してみてください。改善されるはずです。基本的にスリープ時に起こりがちな現象ですからMSではビスタはスリープを推奨されていますが、シャットダウンを基本にするのも一つの手です。(苦笑)

(4)余談
現在DPCはマルチCPU、つまりCore 2 Duo等との相性があまり良くない為、質問者と同じ症状で困っている人は多くいると思われます。マルチCPUやそれと連携するシステムの更なる向上を待つのが現状です。

PS:説明文章は専門サイトの文章を一部引用しています。
by 無 (2009-04-11 08:25) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。