web-dev-qa-db-ja.com

コピーするとフラッシュドライブの速度が低下するのはなぜですか?

コピーの数分後、それはますます遅くなります。どうして?

例えば20 MByte/secで始まり、終了すると@ 10 MByte/sになります。

大小さまざまなファイル.

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

28
LanceBaynes

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

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

例1:大容量のキャッシュを備えたコントローラー(優れたRAID5コントローラーなど)があり、ディスクにフラッシュする必要がある前に約500 mbのデータをすばやくキャッシュできる場合、効果は本当に顕著です。

例2:ファイルコピーが「終了」すると同時にフラッシュドライブを引き出すと、再生時にキャッシュを確認できます。この時点で、ファイルはディスクとキャッシュの間で分割されます。そのため、オペレーティングシステムに関する限り、コピーは「終了」しますが、ディスクコントローラーは、キャッシュに残っているものをディスクに書き込む必要があります。フラッシュドライブを元に戻し、ファイルを検査すると、ファイルがすべてではないことがわかります。

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

さらに、それがnot作業中のディスクキャッシングである場合、表示されているのは断片化の影響である可能性があります。ディスクがどんどんいっぱいになると、隣接する空き領域が少なくなり、ファイルシステムは、ファイルを配置する場所を見つけるためにさらに努力する必要があります。

25
ta.speot.is

キャッシングはこれを引き起こしますが、唯一の要因ではありません。キャッシュが唯一の要因である場合は、書き込み速度が数百MB/sからドライブの実際の書き込み速度まで急速に低下し、残りの書き込みの間そこにとどまると予想されます。ただし、これは、ディスクとの間で大量の転送を実行するときに観察したものではありません(ブートイメージの書き込みなど)。代わりに、私が観察しているのは、操作全体の過程で速度が徐々に低下することです。

このスローダウンは、データの保存に使用されるフラッシュチップ上のデータの残留が原因で発生し、一部のブロックが複数回書き込まれる必要があります。

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

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

したがって、コンピューターがフラッシュドライブに大量のデータを書き込んでいる場合、その方法について(完全に正確ではありませんが、十分です)の説明を次に示します。

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

コンピュータがドライブに書き込んでいるとき、ドライブに初めてブロックを書き込んでいる速度を報告しています。以前のブロックも同時に書き換える必要があるため、バージンブロックに使用できる総スループットは、発生する必要のある書き換えの数が増えると低下します。したがって、見かけの書き込み速度は時間の経過とともに低下します。

1
AJMansfield

ファイルがフラッシュUSBドライブでもハードドライブでも、ドライブに書き込まれると、データが読み取られて一致するかどうかが確認されません。それは永遠にかかります。書き込みの検証はハードウェアによって行われ(巡回冗長検査)、エラーが発生した場合は、ハードウェアからアプリケーションにポストされ、エラーが検出されます。発生して停止する(一時停止に至るまでも)ストールは、デバイスが処理できるよりも速くCPUが書き込むことが原因です。あなたはこれが内部のハードドライブに起こっているのを見つけることができません。 Windows OSで実際に何が起こっているのかは決してわかりませんが、Linuxでは、USBハードウェアが続行してもよいと言うまでCPUが一時停止しているのが実際にわかります。

0
stevedonato