web-dev-qa-db-ja.com

rsync --info = progress2大きなディレクトリのコピー完了率は不均一ですか?

rsync --info = progress2%の大きなディレクトリのコピー完了は、最後の10%が最初の90%よりも時間がかかるように見えるという点で不均一です。

なぜこれなのか、より均一な進行状況インジケーターにする方法はありますか?

1
eyn

観察された動作の理由は、可能性が高いa ファイルシステムキャッシュ

ファイルが(rsyncのように)書き込まれると、通常、データは最初に(メモリ内の)キャッシュに書き込まれ、書き込み操作はほぼ即座に戻ります。その後、データはバックグラウンドでディスクに書き込まれますが、ユーザーはすでに他のことを実行できます。

キャッシュが、書き込まれるデータを保持するのに十分な大きさである場合、これは巨大な書き込み速度を装います。

書き込むデータがファイルシステムキャッシュに収まらない場合、書き込み操作が完了する前に余分なデータが実際にディスクに書き込まれ、ディスクへの書き込みはインメモリキャッシュへの書き込みよりも遅くなります。

余分なデータはキャッシュをバイパスしませんが、以前のコンテンツがキャッシュからディスクに移動されるまで待機し、キャッシュ内の空き領域を再び確保するため、新しいデータはキャッシュに書き込まれます。

したがって、データの最初の部分(あなたの場合は90%)は瞬時に(キャッシュに)書き込まれているように見えますが、最後の10%は実際のディスク操作が開始されるため、時間がかかります。

2
PerlDuck

PerlDuckの答えに加えて、1つの大きなファイルを書き込む方が、同じサイズになる膨大な数のファイルを書き込むよりも速いことに注意する価値があります。

例:4GBファイルと、1GBになる合計100000ファイルを含むディレクトリをコピーします。単一のファイルが最初に転送される場合、最初の80%が最後の20%よりもはるかに高速になります。

1
danzel