読者です 読者をやめる 読者になる 読者になる

PIO病回復!(2006.8.16)

(これは以前のblogで検索から流れてくる人が多かったため、こちらに移行した記事です。対象となるOSはWindows XP無印〜SP2です。たぶんSP3でも同じようにできると思いますが未検証です。)

自分のPCのHDD構成はIDE1台,SATA1台の2台なのですが、そのうちSATAのほうがアクセスが猛烈に遅くなり、困っていました。
(本当は45〜50MB/s出るはずだが、3MB/s程度しか出ない)
デバイスマネージャを見ると、PIOモードになってしまっていました。こうなると本来のアクセススピードは出ないわ、PIOモードではCPUパワーを消費するわでいいことなしです。

原因がわからずなかなか直せなかったのですが、いろいろググって見たところ遂に修復方法にたどり着きました。

SATA が PIO になる病気
PIO病(heiru2.net)

どうもWindowsデフォルトが、「DMAモードで6回エラーが出たらPIOモードにする」になってるそうでして…。確実なHDD構成アクセスのためなのでしょうが、困った仕様ですね〜。

この仕様をレジストリキーを追加する(または修正する)ことで、WindowsにHDDの転送モードを再認識させ、かつ6回連続で転送失敗しない限りPIOに変更しないように設定変更します。
レジストリを変更するので、自己責任で!
方法は上記リンクのSWEET WATER Webさん、heiru2.netさんの記事の通りです。下にも転載させていただきます。

                                                    • -

HKEY_LOCAL_MACHINE
└SYSTEM
 └CurrentControlSet
  └Control
   └Class
    └{4D36E96A-E325-11CE-BFC1-08002BE10318}
     └
        プライマリーなら 0001(または0003)
        セカンダリーなら 0002(または0004)
      └ResetErrorCountersOnSuccess
      └MasterDeviceTimingModeAllowed
        マスター接続の場合。
        スレーブならSlaveDeviceTimingModeAllowed

                                                    • -

ResetErrorCountersOnSuccess
 →DWORD 値を「1」に。なければ新規で作成します。

MasterDeviceTimingModeAllowed
 →DWORD 値を「ffffffff」とする。

この修正を行なうと、以下のような動作に変更されるそうです。

「DMA による転送が 6 回連続で失敗したら PIO に変更する」

マザーによってはSATAドライブがIDEプライマリ2や3に割り当てられてる場合があります。私のGIGABYTEマザーでは、0003,0004のキーもあり、対象となるのは0003のキーでした。
いや直ったときには感激しましたよ。なにしろ今までの10倍速以上になったんだからw
特定のドライブのデータをDVD-Rに焼くときだけ、8倍速で1時間もかかったので「DVDドライブがおかしい?」とか思ってたらこんなことも原因だったのね。

「PIOモードで固定されちゃった」「新しいHDD構成のはずなのに転送が異常に遅い」なんて人は、試してみる価値ありかも?!何にしろレジストリのバックアップはとってから試してみてくださいね。SWEET WATER Webさん、heiru2.netさんに感謝!!ありがとうございました。

HDD転送速度は、以下のソフトで計測可能です。
HD Tune (cowscorpion.com)

★追記(2006.8.19)
マイクロソフトのサポートページでも、この対策法が掲載されていましたので紹介しておきます。Windows updateで対応できないんですかね〜。これって。
複数回のタイムアウトまたは CRC エラーの発生後 IDE ATA および ATAPI ディスクで PIO モードが使用される(Microsoft)