ギガビット接続では、Teracopyは31MB / sを実行しますが、Windows 8は毎秒109MBを実行しますか?
これは正確に何が原因ですか?また、Teracopyを使用してこのような速度を有効にできますか?私はTeracopyが持っている余分な機能を本当に掘り下げます、確かに今それらを逃します:D
2つの単語:検証とキャッシュ
技術説明
これは、Windowsエクスプローラーでファイルをコピーする一般的な手順です。
- ソースドライブからメモリにデータのチャンクを読み取ります
- システムを介してチャンクを送信します
- 宛先ドライブにチャンクを書き込みます
- まだ完了していない場合は、手順1に戻ります
これは、単純で十分に短いようです。この転送アルゴリズムでは、ファイルの各バイトは2回だけ処理されます。1回の読み取りと1回の書き込みです。
しかし、さらに、Windowsは一部のデータをキャッシュするためにメモリを使用します(ドライブ自体も同様)。だからではなく、書かれたばかりの仕上げに、以前のチャンクを待っている、のしてから次のチャンクを読んで、新しいチャンクを読み取ることができる一方で、前の1はまだ書かれています。明らかにこれは永遠に持ちこたえることはできませんが、Windowsは、メモリに読み込まれているファイルのすべてではないにしても、ほとんどを保存するための一時バッファとして残りの空きメモリをすべて使い果たすことができます。
1つのドライブから別のドライブに大きなファイル(または多くのファイルを含むフォルダー)をコピーし、すぐに2つを比較することにより、キャッシュの動作を確認できます。その時点では、ファイルがまだメモリ内にあるため、後で行う場合よりも比較がはるかに高速になります。したがって、実際にはドライブからファイルを読み取っていません。
メモリは非常に高速であり、読み取り速度は書き込み速度よりもやや速い傾向があるため、最終的な転送速度は、宛先ドライブの書き込み速度によってのみ制限されます。
Teracopyは、エクスプローラーでは実行できないファイル転送の速度を低下させる可能性がある2つのことを実行できます。
キャッシュを忘れて、ドライブから直接読み取る
宛先が正しく書き込まれたことを確認します
転送中に基本的なエラーのみをチェックするExplorerとは異なり、Teracopyは、転送メディア(ネットワーク/ドライブケーブルなど)の問題によって発生する可能性のあるデータ破損を防ぐために、データが宛先ドライブに正しく書き込まれたことを実際に確認できます。 )またはドライブ自体(不良セクタなど)これを行うと、宛先からファイルを読み取って元のファイルと比較する必要があります。
使用するアルゴリズムとファイルのサイズに応じて、エクスプローラーの2つとは対照的に、ファイル/ファイルチャンクごとに3つ以上のドライブ操作(最低でも)で検証を最適化できます。ソースからファイルを読み取り、宛先にファイルし、宛先からファイルを読み取ります。
Teracopy(HDDに最適化されたアルゴリズム)でファイルをコピーするとどうなるかを見てください。
- ソースドライブからチャンクを読み取る
- ソースドライブから読み取ったチャンクをハッシュする
- システムを介してチャンクを送信します
- 宛先ドライブに書き込みます
- キャッシュをクリアする
- 宛先ドライブからチャンクを読み戻す
- 宛先ドライブからチャンクをハッシュします
- ハッシュを比較する
- 次のステップを決定する
- ハッシュが一致しない場合、エラーを表示し、ユーザーにアクションを促します
- ハッシュが一致して終了していない場合は、手順1に戻ります
問題は、転送中にファイルをキャッシュすると、宛先ドライブ上の実際のデータを読み取らず、ソースからメモリにキャッシュされたコピーを読み取るため、比較が役に立たなくなることです。したがって、適切に検証するには、キャッシュをクリアする必要があります。これは、読み取りと書き込みのたびに(これは、任意の重要なサイズのファイルに対して数え切れないほど行われる追加の操作です)、またはファイル全体が転送された後に一度だけ行うことができます。
以下のスクリーンショットによると、TeraCopyはファイルの転送中ではなく転送後に検証を実行します。これは、代わりにこのCPU / RAMに最適化された転送アルゴリズムを使用することを意味します。
- ソースドライブからチャンクを読み取る
- システムを介してチャンクを送信します
- 宛先ドライブに書き込みます
- まだ完了していない場合は、手順1に戻ります
- コピーが完了したので、キャッシュをクリアして検証中です
- ソースドライブからチャンクを読み取る
- 宛先ドライブからチャンクをハッシュします
- 宛先ドライブからチャンクを読み取ります
- 宛先ドライブからチャンクをハッシュします
- ハッシュを比較する
- 次のステップを決定する
- ハッシュが一致しない場合、エラーを表示し、ユーザーにアクションを促します
- ハッシュが一致して終了していない場合は、手順6に戻ります
このアルゴリズムはCPUとRAMの負担をわずかに軽減しますが、各ファイルを4回処理する必要があるため、ドライブの負担も大きくなります。ソースからファイル全体を読み取り、宛先に書き込みます。 、それからソースから、そしてデスティネーションから再びそれを読みます。
(TeraCopyがネットワーク転送用に最適化されている場合、検証のためにファイル全体を2回送信することを避け、はるかに小さいハッシュのみを送信できますが、現在はそうではないようで、ネットワークドライバーは同じように扱われますローカルドライブとして、実際にソースを再読み取りします。)
デフォルトでは、TeraCopyはキャッシュを検証または使用しません。検証しないと転送が高速になります(より正確には、速度が低下しません)が、キャッシュを使用しないと速度が低下します。
応用
特定の速度結果を判断するには、設定を確認して、変更していないかどうかを確認する必要があります。その後、さまざまな設定でどのような速度が得られるかを概算してみてください(それらは相互作用する可能性があるため、加算または減算の単純な問題ではないことに注意してください)。
そうは言っても、あなたの数字を使って大まかな計算をしましょう:
- ローカルファイル転送:875Mbps(つまり、ドライブ速度)
- ネットワーク速度:1Gbps = 119.21 MBps
- Windowsエクスプローラーでコピー:109MBps
- TeraCopyを介したコピー:34MBps
すぐに、Explorerのファイル転送がネットワークスループットをほぼ最大限に活用していることがわかります。1Gbpsリンクは1,000,000,000 ビット /秒に相当し、これはバイトのバイナリ単位で119MBpsです。Explorerは109MBpsをクロッキングしており、残りの10MBps(これは以前の最大値でしたが、十分に面白い)は、オーバーヘッド、バックグラウンドロード、およびフラグメンテーションによって簡単に説明できます。 :^Þ
(転送速度はネットワーク速度とほぼ等しいため、Explorerのファイル転送は一方向であり、各ファイルのコピーが1つだけ送信されると推測できます。)Explorerは、ファイルごとに2つのファイルアクセスに対して110MBpsを取得します。
TeraCopyの場合。TeraCopyはExplorerの速度のほぼ正確に3分の1を獲得しているようです。
設定ダイアログが使用するアルゴリズムを正確に示しているかどうかに応じて、TeraCopyはコピーを確認できるように、実際にソースファイル全体を2回送信している可能性があります。これにより、スループットが半分になります。キャッシュがオンになっている場合、新しいチャンクを送信する前に各書き込みが完了するのを待機する必要があるため、速度も低下します。検証と組み合わせると、さらにノックダウンできます。
検証をオンにしてキャッシュをオフにすると、34MBpsの転送速度が妥当と思われます。検証をオフにしてキャッシュをオンにすると、Explorerとほぼ同じになります(TeraCopyが使用するファイル転送コードとExplorerが使用するファイル転送コードの違いによっては、わずかに減少する場合があります)。
10GB近くを転送したい場合は、設定を変更し、4つの順列ごとに転送をやり直して、取得する速度を書き留めてください(安全のために、キャッシュが実行の間にオフ:)V+C+, V+C-, V-C+, V-C-
。