web-dev-qa-db-ja.com

2つのファイルを同時にコピーする方が、次々にコピーするよりも遅いですか?

私の上司は、ハードドライブがディスク上の2つの場所間でヘッドを切り替え続ける必要があるため、2つのファイルを同時にコピーする方が、一方をコピーするよりも時間がかかると言っていました。これは本当ですか?オペレーティングシステムは、これを修正するのに十分スマートであるように思えます(つまり、それらを順番にコピーすることを知っている必要があります)。 USBポートに接続されたドライブにコピーする場合、これは本当ですか?

編集:考慮に入れるファイルシステムに関する他の要因はありますか?たとえば、10個のファイルを含む1つのディレクトリをコピーするのと、ディスク全体から10個のファイルをコピーするのでは違いがありますか? 1つのソースメディアと1つの宛先メディア(複数のドライブからの読み取りなし)についてのみ疑問に思っています。

15
Celeritas

この質問 まで延期します。同じディスク上で2つのコピー操作を同時に実行すると(別々のコピー操作から開始されますが)、競合する操作間でヘッドがシークしているため、レイテンシが発生するため、実際には時間がかかるようです。

ただし、コピー操作が同時に開始された場合、最新のオペレーティングシステムの大多数は、転送を1つずつエンキューするのに十分スマートだと言っています。もう1つは、コピー時間が多少速くなるはずです。

Teracopy および FastCopy のように、ファイルコピー操作を強制的にキューに入れて順次実行するために利用できるアプリケーションがいくつかあるようです。

ただし、複数の物理ボリュームに対して並行コピー操作を実行することは、まったく別の問題です。代替プロトコルを介してファイルを転送するように。

USBポートに接続されたドライブへのコピーに関する質問に関しては、ドライブが使用するメモリのタイプと使用されているUSB仕様(確かに、USB 1.0および2.0の注目すべきボトルネック)に大きく依存します。コピー元のボリュームに関する要因を述べた。

12
bosco

これに影響を与える可能性のある要因はたくさんあります。

  • ソースドライブ-この回転ディスクまたはSSDですか?ディスクを回転させる場合、ファイルのレイアウトがパフォーマンスに影響を与える可能性があります。 2つのファイルはディスクの異なる部分にある可能性が高いため、ヘッドシークのペナルティが発生します。すでに述べたように、2つのファイルを同時に選択し、その方法でコピーを開始すると、OSはコピーを順次処理します。
  • ファイルレイアウト-ファイルの断片化(ソースと宛先の両方で)は非SSDドライブのパフォーマンスに影響を与える可能性があります
  • 宛先-単一のターゲットに書き込む2つの書き込みストリームがある場合、ヘッドシークの問題に戻り(これもSSDではないと想定)、ファイルを大幅にインターリーブできます。私は以前、高性能のストレージを作っている会社で働いていましたが、彼らにとって大きな問題の1つは、ビデオのリアルタイムストリームがいくつ読み書きできるかでした(2kビデオには1秒あたり約300 MBが必要です)。書き込みを交互に行うと、コピープロセスが遅くなり、ファイルの読み取りも遅くなります。もちろん、ディスクが断片化して開始した場合、ファイルはインターリーブされて書き込まれます。
  • 単一/複数のソース/ターゲット-ファイルがすべて1つのドライブからのものか、すべてが1つのドライブに書き込まれているかに応じて、ヘッドシークの問題は多かれ少なかれ
  • ファイルサイズ-本当に小さいファイルの場合、ヘッドシークの問題は関係ありません。ヘッドは次のファイルを探すためにシークする必要があるためです(つまり、ファイル間を行き来する代わりに、ヘッドはファイルを順番に読み取ります)。

OSがこれを修正するのに十分スマートであるかどうかに関しては、一般的にはそうです。つまり、複数のファイルを同時にコピーする場合(たとえば、一度に複数のファイルを選択してドラッグアンドドロップすることを考える)。

もちろん、2つのcpコマンドを開始すると、2つのコマンドが実行されます。Windowsでは、個別のファイルをコピーして貼り付け、画面に2つの「コピー」進行状況ウィンドウが表示されたら、最適化は行われません。この場合、2つのコピーを同時に実行するようにOSに明示的に指示しているため、一方のコピーが他方よりも重要であると判断してキューに入れ始めることはありません。

16
ernie

GUIから、または "copy C:\ folder * D:\ folder \"のようなコマンドを使用して複数を選択してコピーする場合、ファイルはとにかく順次コピーされ、問題が疑わしくなります。

一部のファイルをコピーし、それらがコピーしている間に、GUIからの2つの別々の操作、または "cp -r/usr/bin// opt/bin /& cp -r/usr/local/bin// opt/local/bin/"-その後、パフォーマンスはほぼ確実に低下します-少し(ハイエ​​ンドソリッドステートドライブ、両方のコピー操作で大きなファイル)、または多分TON(回転ディスク、一方または両方の操作での比較的小さなファイル)優れたオペレーティングシステムはパフォーマンスの低下をある程度軽減する可能性があります。たとえば、最近のLinuxカーネルはCFQ(Completely Fair Queueing)I/Oスケジューラーを使用します。これにより、ある程度の「バッチ」ブロック操作で効率が向上しますが、パフォーマンスヒット。回転ディスクはシーケンシャルI/OよりもランダムI/Oの方が劇的に遅いため、場合によってはヒットが非常に大きくなる可能性があります(潜在的に2桁以上遅いため、最新のI/Oスケジューラが問題を緩和するために最善を尽くす理由です)不要なシークを最小限に抑えるために操作をバッチ処理およびキャッシュする。

TL; DR-パフォーマンスが心配な場合は、operationに含まれる個々のファイルの数に関係なく、一度に1つのコピーのみoperationを実行します。

1
Jim Salter