PIO病に悩まされて
一、
世に言うPIO病とやらに我がPCもかかってしまったのである。
ある日突然、たいした容量ではないファイルのコピーに驚くほど時間がかかるようになった。今までの十倍以上である。
HDDが壊れたのかと思い、S.M.A.R.T.を見てみるが、そうではないようだ。
デバイスマネージャから「IDE ATA/ATAPI コントローラ」→「プライマリ(またはセカンダリ) IDE チャンネル」→「プロパティ」→「詳細設定」を辿ると、「現在の転送モード」が「PIOモード」になっている。私のPC環境であれば、通常「ウルトラ DMA モード 5」である。
おお、これは、かのPIO病ではないか!
【追記】:Windows 7やVISTAでは、PIO病は生じないようであるが、それについては「Win 7でDMAを有効にす
る」を御覧下さい。
これについては、既に解決済みの問題であり、マイクロソフト サポート オンラインに
「複数回のタイムアウトまたは CRC エラーの発生後 IDE ATA および ATAPI ディスクで PIO モードが使用される」
と題された文書がMicrosoftサポートにあり、詳細はそれに譲ります。
【追記】:上記の文書817472は、翻訳者により日本語に翻訳されたものであったが、2011年3月28日に更新さ
れてた際、英文のKnowledge Baseの機械翻訳となり、意味不明な日本語になっているので、オリジナ
ルの文書を御覧になることをお勧めします。
このPIO病とやらは、XPやWindows Server 2003、Windows 2000に発生するものらしい。
ドライブに転送中、タイムアウトまたはCRCエラーが合計 6 回発生すると、IDE/ATAPI ポート ドライバ (Atapi.sys) が、転送モードを、最速の DMA(Direct Memory Access)モードから段階的に低速の DMAモードに下げて行き、最終的に転送モードを最も低速のPIO(Programmed I/O)モードまで下げる。これが、PIO病の正体である。
元の転送モードに戻すには、デバイスマネージャからPIOモードに落ちているコントローラの「ドライバ」まで辿って行き、それを「削除」して、再起動すればよいらしい。
二、
我が機の転送モードも、デフォルトのDMAモードに戻り、めでたしめでたし。
と思ったが、試しに7GB程度の一群のファイルを転送してみた。
3台中、2台のHDDの転送モードが、みるみるDMA 5からDMA 1へと落ちていき、再びPIOモードに転落した。
因みに、HD Tuneは、そのタブの「Info」に「Active: UDMA Mode 5(Ultra ATA/100)」などと、転送モードがリアルタイムで表示されるので、便利である。
やはり、転送中のタイムアウトまたはCRCエラーの発生原因を取り除かねばならない。
どのエラーによるものなのか。とりあえず、CrystalDiskInfoを見る。
これは、ひどい。
大抵、「0」である「UltraDMA CRCエラー数」の生の値が、それぞれ、「12744」、「14671」(10進法)となっている。
WEBで検索をかけると、SATAケーブルの不具合が、その原因として多く挙がっている。早速、未使用のケーブルに交換して、ファイルを転送してみる。
凄い勢いでCRCエラー数が増加し、またもやPIOモードに転落。
メモリかもしれない。
Memtest86+でテストをしてみるが、異常はない。
2台がともにCRCエラーを出すのは、おかしい。
電源を換えてみる。
やはり、ダメか。
だが、CRCエラー数の増加速度が、いくぶん緩やかになった。
どういうわけなのか。
ふと、気が付いた。この2台は、SATA電源ケーブルの1コネクタを2つに分岐する二又ケーブルで接続していた。
それを取り外して見ると、双方のコネクタの中央部がやや膨らんでいる。これが原因なのか。
膨らんだ部分を押さえ込み、何度か抜き差しを行ってみる。接触不良の接点を回復する原始的な方法である。
改めてファイルの転送を行い、CRCエラー数の増加の様子を観察する。
おお!エラー数は増えない。
HDD相互のファイル転送を数回繰り返してみる。大丈夫なようである。
電源交換後にCRCエラー数の増加速度が落ちたのは、その作業によりコネクタの接触が少し回復したためであろう。
CRCエラーの発生に、電源の不良も関係しているとは知らなかった。
CRCエラーにお困りの方は、電源部を疑ってみるとよいかもしれません。
【追記】:UltraDMA CRCエラーの真の原因は、マザーボードにあったようである。これについては
「UltraDMA CRCエラーとマザーボード交換」を御覧下さい。
三、
最後に、上記の文書にあったレジストリの変更を行った。
この問題については、Microsoft Windows XP Service Pack 2 で、転送モードを下げる動作を従来よりも発生しにくくするために、タイムアウトまたはCRCエラーの発生が単に累積して6回に達した後ではなく、連続して6回のタイムアウトまたはCRCエラーが発生した後にのみ、転送モードを下げるように修正されている。しかし、レジストリを変更しないと実際にこの修正は適用されないと言う。
【追記】:このレジストリの変更については、これを自動で行なってくれるプログラムがMicrosoftより提供される
ことになった。新たに更新された上記文書817472からMicrosoft Fix it 50644をダウンロードし、
実行すればよい。レジストリを触るのは危険が伴うので、PCに不慣れな人はこれを利用される方が
よいかもしれません。
regeditを起動し、レジストリ キー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
まで辿る。
そこに番号付きサブキーが、0001、0002、0003…と並んでいる。それぞれのサブキー内のDriverDesc 値に文字列値が、「プライマリ IDE チャネル」または「セカンダリ IDE チャネル」となっている番号付きのサブキーをクリックして、
○ [編集] メニューの [新規] をポイントし、[DWORD 値] をクリックし、
○ ResetErrorCountersOnSuccess と入力し、Enter キーを押し、
○ [編集] メニューの [修正] (または [変更]) をクリックし、
○ [1] と入力し、[OK] をクリックして、再起動。
この変更を全てのプライマリないしセカンダリ IDE チャンネルであるサブキーについて行う。
PC環境によって、IDEコントローラの数が異なると、上記のサブキーの番号も異なるようなので、注意が必要なようです。
世に言うPIO病とやらに我がPCもかかってしまったのである。
ある日突然、たいした容量ではないファイルのコピーに驚くほど時間がかかるようになった。今までの十倍以上である。
HDDが壊れたのかと思い、S.M.A.R.T.を見てみるが、そうではないようだ。
デバイスマネージャから「IDE ATA/ATAPI コントローラ」→「プライマリ(またはセカンダリ) IDE チャンネル」→「プロパティ」→「詳細設定」を辿ると、「現在の転送モード」が「PIOモード」になっている。私のPC環境であれば、通常「ウルトラ DMA モード 5」である。
おお、これは、かのPIO病ではないか!
【追記】:Windows 7やVISTAでは、PIO病は生じないようであるが、それについては「Win 7でDMAを有効にす
る」を御覧下さい。
これについては、既に解決済みの問題であり、マイクロソフト サポート オンラインに
「複数回のタイムアウトまたは CRC エラーの発生後 IDE ATA および ATAPI ディスクで PIO モードが使用される」
と題された文書がMicrosoftサポートにあり、詳細はそれに譲ります。
【追記】:上記の文書817472は、翻訳者により日本語に翻訳されたものであったが、2011年3月28日に更新さ
れてた際、英文のKnowledge Baseの機械翻訳となり、意味不明な日本語になっているので、オリジナ
ルの文書を御覧になることをお勧めします。
このPIO病とやらは、XPやWindows Server 2003、Windows 2000に発生するものらしい。
ドライブに転送中、タイムアウトまたはCRCエラーが合計 6 回発生すると、IDE/ATAPI ポート ドライバ (Atapi.sys) が、転送モードを、最速の DMA(Direct Memory Access)モードから段階的に低速の DMAモードに下げて行き、最終的に転送モードを最も低速のPIO(Programmed I/O)モードまで下げる。これが、PIO病の正体である。
元の転送モードに戻すには、デバイスマネージャからPIOモードに落ちているコントローラの「ドライバ」まで辿って行き、それを「削除」して、再起動すればよいらしい。
二、
我が機の転送モードも、デフォルトのDMAモードに戻り、めでたしめでたし。
と思ったが、試しに7GB程度の一群のファイルを転送してみた。
3台中、2台のHDDの転送モードが、みるみるDMA 5からDMA 1へと落ちていき、再びPIOモードに転落した。
因みに、HD Tuneは、そのタブの「Info」に「Active: UDMA Mode 5(Ultra ATA/100)」などと、転送モードがリアルタイムで表示されるので、便利である。
やはり、転送中のタイムアウトまたはCRCエラーの発生原因を取り除かねばならない。
どのエラーによるものなのか。とりあえず、CrystalDiskInfoを見る。
これは、ひどい。
大抵、「0」である「UltraDMA CRCエラー数」の生の値が、それぞれ、「12744」、「14671」(10進法)となっている。
WEBで検索をかけると、SATAケーブルの不具合が、その原因として多く挙がっている。早速、未使用のケーブルに交換して、ファイルを転送してみる。
凄い勢いでCRCエラー数が増加し、またもやPIOモードに転落。
メモリかもしれない。
Memtest86+でテストをしてみるが、異常はない。
2台がともにCRCエラーを出すのは、おかしい。
電源を換えてみる。
やはり、ダメか。
だが、CRCエラー数の増加速度が、いくぶん緩やかになった。
どういうわけなのか。
ふと、気が付いた。この2台は、SATA電源ケーブルの1コネクタを2つに分岐する二又ケーブルで接続していた。
それを取り外して見ると、双方のコネクタの中央部がやや膨らんでいる。これが原因なのか。
膨らんだ部分を押さえ込み、何度か抜き差しを行ってみる。接触不良の接点を回復する原始的な方法である。
改めてファイルの転送を行い、CRCエラー数の増加の様子を観察する。
おお!エラー数は増えない。
HDD相互のファイル転送を数回繰り返してみる。大丈夫なようである。
電源交換後にCRCエラー数の増加速度が落ちたのは、その作業によりコネクタの接触が少し回復したためであろう。
CRCエラーの発生に、電源の不良も関係しているとは知らなかった。
CRCエラーにお困りの方は、電源部を疑ってみるとよいかもしれません。
【追記】:UltraDMA CRCエラーの真の原因は、マザーボードにあったようである。これについては
「UltraDMA CRCエラーとマザーボード交換」を御覧下さい。
三、
最後に、上記の文書にあったレジストリの変更を行った。
この問題については、Microsoft Windows XP Service Pack 2 で、転送モードを下げる動作を従来よりも発生しにくくするために、タイムアウトまたはCRCエラーの発生が単に累積して6回に達した後ではなく、連続して6回のタイムアウトまたはCRCエラーが発生した後にのみ、転送モードを下げるように修正されている。しかし、レジストリを変更しないと実際にこの修正は適用されないと言う。
【追記】:このレジストリの変更については、これを自動で行なってくれるプログラムがMicrosoftより提供される
ことになった。新たに更新された上記文書817472からMicrosoft Fix it 50644をダウンロードし、
実行すればよい。レジストリを触るのは危険が伴うので、PCに不慣れな人はこれを利用される方が
よいかもしれません。
regeditを起動し、レジストリ キー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
まで辿る。
そこに番号付きサブキーが、0001、0002、0003…と並んでいる。それぞれのサブキー内のDriverDesc 値に文字列値が、「プライマリ IDE チャネル」または「セカンダリ IDE チャネル」となっている番号付きのサブキーをクリックして、
○ [編集] メニューの [新規] をポイントし、[DWORD 値] をクリックし、
○ ResetErrorCountersOnSuccess と入力し、Enter キーを押し、
○ [編集] メニューの [修正] (または [変更]) をクリックし、
○ [1] と入力し、[OK] をクリックして、再起動。
この変更を全てのプライマリないしセカンダリ IDE チャンネルであるサブキーについて行う。
PC環境によって、IDEコントローラの数が異なると、上記のサブキーの番号も異なるようなので、注意が必要なようです。