
CentOS システムには、合計で数ギガバイトになる tar.gz ファイルがいくつかあります。ほとんどの tar.gz ファイルは実際にはかなり小さいのですが、イメージを含むファイルは大きいです。1 つは 7.7G、もう 1 つは約 4G、2 つは約 1G です。
すでにファイルを一度解凍しましたが、今度はそれらすべてのファイルの 2 番目のコピーが必要です。
解凍されたファイルをコピーする方が、再度解凍するよりも速いだろうと想定していました。しかし、約 10 分前に cp -R を実行し始めましたが、これまでのところ 500 MB 未満しかコピーされていません。解凍プロセスの方が速かったのは確かだと思います。
私の言う通りでしょうか?
もしそうなら、それはなぜでしょうか? 既存の構造を単純に複製するよりも、解凍の方が速いというのは意味がないように思われます。
答え1
次の 2 つのシナリオを考えてみましょう。
- コピーするには、ディスクからファイル全体を読み取り、ディスクに書き込む必要があります。
- Tar-Gzip では、ディスクから小さなファイルを読み取り、解凍してディスクに書き込む必要があります。
解凍プロセスによって CPU に負担がかかっていない場合、I/O 操作が制限されていると考えるのが妥当です。この議論によれば (また、どちらの場合も同じ量を書き込む必要があるため)、小さいファイル (tar.gz) の読み取りは、大きいファイルの読み取りよりも時間がかかりません。また、多数の小さいファイルを読み取るよりも 1 つのファイルを読み取る方が速いため、時間の節約にもなります。
節約される時間は、読み取り (I/O) と解凍 (CPU) にかかる時間の差によって決まります。したがって、圧縮が最小限のファイル (mp3、jpg、zip などの既に圧縮されているファイルなど) の場合、解凍に必要な時間は読み取り操作で節約される時間よりも長くなる可能性があり、実際にはコピーよりも解凍の方が遅くなります。
(I/O が遅いほど、圧縮ファイルを使用することで時間が節約されることに注意してください。このようなシナリオの 1 つは、コピー操作のソースとターゲットが同じ物理ディスク上にある場合です。)
答え2
非常に小さなファイルを読み取る方が、大量の大きなファイルを読み取るよりもはるかに高速です。これは、CPU がファイルを解凍する必要がある場合でも、一般的に当てはまります。