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


27

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

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

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

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


コピーする量と、コンピューターの空きメモリの量を比較してください。
KCotreau

PC-> USB-FLASHドライブ:数百
ギガバイト

1
ファイルを最初にメモリにキャッシュしておくと、ファイルはすぐに転送され、ハードドライブから移動を開始すると速度が低下すると思われます。あなたの場合はわかりませんが。
KCotreau

「sync」コマンドをより頻繁に使用するように勧めていますか?
ランスベインズ

syncコマンドの意味がわかりません。あなたは質問に文脈を与えませんでした。どのOSなのかさえわかりません。
-KCotreau

回答:


25

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

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

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

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

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

さらに、ディスクキャッシュが機能していない場合は、断片化の影響である可能性があります。ディスクが一杯になると、連続した空きスペースが少なくなり、ファイルシステムはファイルを置く場所を見つけるために一生懸命働く必要があります。


また、フラッシュドライブであることにも注意してください。ハードウェアの速度は決して最適化されておらず、手頃な価格です。
surfasb

長いファイルのコピー中にパフォーマンスが低下する理由を説明できるとは思いません。むしろ、ドライブの寿命にわたってパフォーマンスが低下しますか?
ta.speot.is

それは完全に理にかなっています。これらは、持続的な運用ではなく、バースト速度用に最適化されています。フラッシュドライブにロードされるファイルの平均サイズを考えてください。30秒の長いファイル転送を最適化しますか、2秒の長い転送を最適化しますか?これを2つの例に追加すると、十分に説明されます。
surfasb

一度に平均的なドアを通って2人を詰め込もうとするようなものです。最初は計算できます。うわー、私はそのドアを一度にゼロ人から2人に行きました。私のスピードは素晴らしいです。その後、ラインが長くなり、サンプリングが改善され、最終的に小さなサンプル=悪い数学であることがわかります。。。
surfasb

@ ta.speot.isあなたが言及したこのディスクキャッシュは、ハードディスク上のOSによって処理され、ハードドライブが内部に持っているハードウェアキャッシュとは異なると思いますか?
2014

1

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

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

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

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

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

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

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


NTFSとしてフォーマットされた真新しいUSB 3.0フラッシュドライブに12 Gig 7zipファイルを書き込みます。最初の1分間は約100 MB / sでしたが、約1分間で25ish MB / sに低下し、約10分間で約11 MBに低下しました。緩やかな下り坂ではなく、3つの異なる台地でした。
エリック

16ギガバイトのRAMを搭載した古いi7ラップトップからアーカイブをコピーしていました。32ギガのRAMを搭載した私の新しいXeonラップトップ上の同じサムドライブからこの同じ7zipアーカイブをコピーするのに2分かかり、速度の低下はありませんでした。
エリック

0

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


異なるストレージデバイスの書き込み速度の違いは極端な場合があります。たとえば、古いSDカードの書き込み速度をSATA III SSDの書き込み速度と比較します。
karel

3
個人的なin辱を控えてください。投稿は正しいかもしれませんが、コミュニティの標準に準拠するように編集する必要があります
ベンN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.