コピー中にフラッシュドライブの速度が遅くなるのはなぜですか?

コピー中にフラッシュドライブの速度が遅くなるのはなぜですか?

コピーを数分間続けると、だんだん遅くなります。なぜでしょうか?

たとえば、最初は 20 MByte/秒で始まり、終了時には 10 MByte/秒になります。

大きいファイル、小さいファイルなど、さまざまなファイル。

更新: 質問はさまざまなオペレーティング システムに関するものなので、「一般的な質問」です。

答え1

この動作はフラッシュ ドライブに特有のものではなく、ハード ドライブでも同様に発生します。これは、ほとんどのオペレーティング システムとディスクが小さな書き込みを高速化するために採用しているキャッシュ メカニズムに関係しています。

表示される 20 MB/秒は、ディスク キャッシュ (通常は高速ですが、メモリが小さい) に書き込まれるデータです。このキャッシュがいっぱいになると、ディスクにフラッシュする必要があります。そして、今度は遅いディスクによってボトルネックが発生します。

例 1: 大きなキャッシュを備えたコントローラー (優れた RAID5 コントローラーなど) を使用している場合、約 500 MB のデータをディスクにフラッシュする前にすばやくキャッシュできると、効果が顕著になります。

例 2: ファイルのコピーが「完了」すると同時にフラッシュ ドライブを取り外すと、キャッシュが機能していることがわかります。この時点で、ファイルはディスクとキャッシュに分割されているため、オペレーティング システムに関する限りコピーは「完了」していますが、ディスク コントローラはキャッシュに残っているものをディスクに書き込む必要があります。フラッシュ ドライブを再度挿入してファイルを調べると、すべてがそこに保存されているわけではないことがわかります。

免責事項: オペレーティング システムまたはディスク上で書き込みキャッシュが有効になっていない場合、これらの例は機能しません。

さらに、もしそれがないディスク キャッシュが機能している場合、断片化の影響が見られる可能性があります。ディスクがいっぱいになるにつれて、連続した空き領域が少なくなり、ファイル システムはファイルを置く場所を見つけるために多くの作業を行う必要があります。

答え2

キャッシュは確かにこの原因の一部ですが、唯一の要因ではありません。キャッシュが唯一の要因であれば、書き込み速度が数百 MB/秒からドライブの実際の書き込み速度まで急速に低下し、書き込みの残りの間はその速度を維持するはずです。ただし、ディスクとの間で大規模な転送 (ブート イメージの書き込みなど) を実行するときに私が観察したのは、このような状況ではありません。代わりに、操作全体にわたって速度が徐々に低下するのを観察しました。

この速度低下は、データを保存するために使用されるフラッシュ チップ上のデータ残留によって発生し、一部のブロックに複数回書き込む必要があります。

フラッシュ チップ内には、書き込み可能なデータ ブロックがあります。書き込み時にコンピューターが実行できる操作は 2 つだけです。ブロック全体を消去するか、ブロック内のビットの一部 (またはすべて) を 0 から 1 に変更します。

ただし、これらのブロックの中には、特に低品質のフラッシュ ドライブでは他のブロックよりも優れているものがあり、その結果、新しいデータを書き込むときに、一部のビットが書き込まれた直後に自動的に 0 に戻り、変更されないことがあります。したがって、ブロックに書き込むときに、OS はすべてのデータが正しく書き込まれたかどうかを確認する必要があり、正しく書き込まれていない場合は、データが固定されるまで同じデータを同じブロックに 2 回または 3 回書き込むことでブロックをやり直す必要があります。

それで、コンピュータがフラッシュ ドライブに大量のデータを書き込むとき、それがどのように行われるかについて、次のように説明します (完全に正確ではありませんが、十分に理解できます)。

  1. 書き込むブロックの最初のセットを取得し、すべてを書き込みます。
  2. 先ほど書いたブロックをすべて読み返し、一致しないブロックのリストを作成します。
  3. 前回正しく書き込まれなかったブロックとともに、次のブロックのセットを書き込みます。
  4. すべてのブロックが正しく書き込まれるまで、2 ~ 3 を繰り返します。

コンピュータがドライブに書き込むとき、ブロックをドライブに初めて書き込む速度が報告されます。同時に以前のブロックも再書き込みする必要があるため、必要な再書き込み回数が増えるにつれて、未使用ブロックに使用できる合計スループットが低下します。したがって、見かけの書き込み速度は時間の経過とともに低下します。

答え3

私はOSXでこの問題に悩まされていましたが、大幅に改善することができました。まず、Spotlight Indexがターゲットドライブのインデックス作成を試行するのを止めました。次に、ターゲットドライブでのサムネイル生成(55Kの画像をコピー)を止めました。

そして最終的にGUIの使用をあきらめ、rsync -a source targetを使用してコマンドラインに切り替えました。

おそらく、他のオペレーティング システムでも同様のことができるでしょう。

答え4

フラッシュ USB ドライブやハード ドライブなどのドライブにファイルが書き込まれると、データが一致するかどうかを確認するためにデータが読み戻されることはありません。それには永遠に時間がかかります。書き込みの検証はハードウェアによって行われ (巡回冗長検査)、エラーが発生した場合は、エラーが検出されたハードウェアからアプリケーションにポストバックされます。CPU の書き込み速度がデバイスの処理能力を超えているため、停止して速度が低下する (一時停止する場合もあります) ことがあります。これは、内蔵ハード ドライブでは発生しません。Windows OS で実際に何が起こっているかはわかりませんが、Linux では、USB ハードウェアが続行してもよいと判断するまで CPU が一時停止しているのが実際に確認できます。

関連情報