MHDD のスキャンが DOS で行うように、Linux で ATA read-verify(0x40) コマンドを使用してハード ドライブをスキャンする C プログラムを作成しています。
HDIO_DRIVE_TASK を使用してコマンドを発行し、CLOCK_MONOTONIC を使用して ioctl のブロック時間を測定します。
プログラムをルートとして実行し、そのioniceをリアルタイムに設定しましたが、読み出しは常にMHDDが示すものよりも大きくなります。また、MHDD の結果はあまり変化しませんが、私のプログラムの結果はしばしば大きく異なります。
各ブロックに対してコマンドを 2 回発行し、2 回目の実行のブロック時間を測定します。これで問題の一部は修正されますが、結果は依然として大きく異なります。
コマンドが遅くなる要因は何ですか? どうすればそれらを回避できますか?
PS テスト用に、状態が異なる予備のドライブがいくつかあります。