2008年7月5日土曜日

Windows XP 動作が重い<解決編>

メモリ増設をしたり、キャッシュをUSBメモリに待避させたりして強化を図って
きた自宅ノートPCだが、そもそも日本で使い始めた当初はそれほど動作は重くは
なかった。
常駐ソフトは確かに増えているが、タスクマネージャで見る限りCPU占有率はほ
とんど無視できる数値である。


もちろんウイルスやスパイウェアのたぐいはしっかりと駆除している。
余計なアプリケーションやデータは削除し、デフラグもかけてきる。


それでも動作が重たいのだ。


以前は動画や音声ファイルの再生は楽勝だった。今は動画はカクカクだし、音声
も途切れがちである。もうハードディスクの寿命なのだろうと、ハードディスク
の換装を計画していた。


今日は午後に多少暇ができたので、改めてネットでPCの動作が重たい原因を調べ
てみた。
すると、ウイルスでもスパイウェアでもなくPCの動作が重くなる原因として、
ハードディスクの動作モードが「PIO」に変更されている場合がある、という記
述があった。
さっそく調べてみると、まさしく「PIO」になっていた。


PIOモードではCPUが一生懸命がんばってハードディスクとのデータのやりとりを
する。だからCPUに負担がかかり、パソコンの動作が非常に重くなる。
それを改善するためにDMA(ダイレクト・メモリ・アクセス)という方法が開発
された。これだとCPUに負担をかけずにハードディスクのデータを読み書きでき
る。
ちなみに私のノートPCはDMAモード5というのに対応している。理論上は100Mバ
イト/秒でデータの読み書きができる。ところがPIOモードではこれが16.6Mバイ
ト/秒になってしまう。これは自動車に例えるならば、高速道路を時速100kmで走
ることができる車を時速17kmで徐行させるようなものだ。処理速度にして6分の
1。どうりで動作が重たいわけである。


本来DMAモードで動作していたはずなのに、どうして勝手にPIOモードになってし
まったのか?
Windows XPで使われているIDE/ATAPIポートドライバ(Atapi.sys)は、 計6回のタ
イムアウトもしくはCRCエラーが発生すると、転送モードを段階的に低いモード
に引き下げるそうだ。ハードディスクの寿命が近づいている場合に読み書きエ
ラーが起こるため、こういう機能を搭載したのだと思う。
私の場合、USBで接続したハードディスクがよくタイムアウトエラーを起こして
いた。原因はケーブルやコネクタ部分の接触不良。
しかし、それぐらいのことで勝手にクソ遅いPIOモードに切り替えられてしまう
のではたまらない。しかも、一度PIOモードに切り替えられたら、Windows XPを
再起動してもDMAモードには復活しないときている。


元のDMAモードに戻すにはレジストリを書き換える必要がある。


パソコンが重かった犯人はHDDの転送モード
http://blog.osoe.jp/article/13035676.html


ただし、この方法だけでは、USBの接触不良でタイムアウトエラー出た時に再び
PIOモードに切り替わってしまうので、もう二度と勝手に切り替わらないように、
このはた迷惑な機能を止めることにする。


「ResetErrorCountersOnSuccess」
エラーカウントをリセットして勝手にPIOモードに切り替わらないようにする
http://journal.mycom.co.jp/column/winxp/075/index.html


以上の手当をした後、PCを再起動したら無事DMAモード5が復活。
XPの起動が以前のように早くなったし、動画や音声も途切れることはなくなった。
デメリットとしてはハードディスクの寿命がわかりにくくなることぐらいだが、
ダメになるときは一気にダメになってもらって結構なので、それまでは勝手に遅
くなるなよ、と。


しかし、コレ、普通の人は絶対分からないと思う。
とりあえずWindowsを再インストールすれば治るのだけれど、仕事や趣味のため
の複雑な動作環境を構築してしまったPCは、正直Windowsの再インストールなん
てしたくないし・・・。
ちなみに私のPCにはWindows XPのSP3を導入しているが、SP3をインストールし
てもこの問題は修正されない。
また、Windows XP以外にも、Windows 2000、Windows Server 2003でも同様の問
題が起こるそうだ。
詳しくは下記のページを参照のこと。
http://support.microsoft.com/default.aspx?scid=kb;ja;817472

0 件のコメント: