ATA/ATAPIデバイスの転送モードを高速なモードに修正

HDDやSSDなどのストレージとコンピュータ間のデータ転送方式にはATAという規格があり、コンピュータはこの規格に基づいてデータの転送処理を行っています。
またATAという同じ規格の中でもいくつかのデータ転送モードがあり、その中にあるPIOというモードは非常に転送速度が遅い上にCPUに大きな負担を掛けるもので、出来れば設定を避けたいモードです。
通常WIndowsでは高速なDMAというモードを利用しているのですが、データ転送時に何回かエラーが発生すると自動的にPIOモードに切り替わってしまうようになっています。
この現象は通称「PIO病」などと呼ばれています。
今回はこの問題を解決し、転送モードがPIOに変更されてしまうのを防ぐ方法を解説します。
まずは現在のATAデバイスの転送モードを確認しましょう。
システムのプロパティからデバイスマネージャを開き「プライマリIDE チャネル」のプロパティを開きます。

「詳細設定」タブで各デバイスの現在の転送モードを確認します。
全てのデバイスで「ウルトラ DMA モード」などになっていれば問題ありません。
ここで転送モードがPIOになっていた場合は2に進んで下さい。

2,PIOモードからDMAモードへの変更
PIOモードをDMAモード変更する場合、よくある解決策としてPIOになっているプライマリIDE チャネルを削除し、再起動するというものがあります。
確かにこれでも解決できますが、今回はレジストリ操作によりデバイスを削除せずに解決する方法を紹介します。
レジストリエディタを開きます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
へアクセスします。
キー内には4桁の数値が名前として与えられたキーがありますが、これらはデバイスマネージャのIDE ATA/ATAPI コントローラにあるデバイスと対応しています。
各キー内にある「DriverDesc」などの値を参考にして(値がプライマリ IDE チャネルになっている)、PIOモードに設定されているIDE チャネルの設定が格納されているキーを探します。
該当キー内にある「MasterDeviceTimingModeAllowed」というDWORD値の値を0xFFFFFFFFに変更します。
これで次回の再起動時には転送モードがDMAに変更されます。
上記の通り、Windowsでは何回か転送エラーが発生した際に転送モードがPIOに切り替えられます。
理由としてはPIOモードの転送方法はCPUが転送処理を管理する為に安定していることなどがあるようです。
Windowsでいうところのセーフモードのようなものととらえて良いでしょう。
ちなみに転送モードが切り替えられる条件はWindows動作中に転送エラーが合計6回に達した場合となっています。
このためパソコンを長時間使っていた時などに、知らず知らずのうちに転送モードがPIOに切り替えられてしまうことがあるようです。この辺がPIO病なんて言われる所以でしょうか。
この現象を避ける為の設定を紹介します。
手順2で参照したプライマリ IDE チャネルの設定が格納されているキー内に「ResetErrorCountersOnSuccess」というDWORD値があります。
値の名前から想像もつきますが、これは「転送に成功したらエラーのカウントを0にする」ということで、つまり転送モード変更の条件を「動作中に合計6回の転送エラー」から「動作中に連続して6回の転送エラー」にするのです。
こうすることで、とりあえずはPIOモードに変更されることを防げます。
これでもPIOモードに変更されたりした場合、HDDなどの消耗によるエラー多発が考えられる為、デバイスの換装を検討した方が良いでしょう。