
Ich habe einige tar.gz-Dateien, die auf einem CentOS-System insgesamt mehrere Gigabyte groß sind. Die meisten tar.gz-Dateien sind eigentlich ziemlich klein, aber die mit Bildern sind groß. Eine ist 7,7 G groß, eine andere etwa 4 G und ein paar etwa 1 G.
Ich habe die Dateien bereits einmal entpackt und möchte nun eine zweite Kopie aller dieser Dateien.
Ich ging davon aus, dass das Kopieren der entpackten Dateien schneller geht als das erneute Entpacken. Aber ich habe vor etwa 10 Minuten begonnen, cp -R auszuführen, und bisher wurden weniger als 500 MB kopiert. Ich bin sicher, dass der Entpackvorgang schneller war.
Habe ich recht?
Und wenn ja, warum? Es erscheint mir unlogisch, dass das Auspacken schneller wäre als das einfache Duplizieren vorhandener Strukturen.
Antwort1
Betrachten Sie die beiden Szenarien:
- Zum Kopieren müssen Sie die gesamte Datei von der Festplatte lesen und auf die Festplatte schreiben.
- Tar-Gzip erfordert, dass Sie eine kleinere Datei von der Festplatte lesen, dekomprimieren und auf die Festplatte schreiben.
Wenn Ihre CPU durch den Dekomprimierungsprozess nicht belastet wird, ist es naheliegend, dass die E/A-Operationen einschränkend sind. Aus diesem Grund (und da Sie in beiden Fällen die gleiche Menge schreiben müssen) dauert das Lesen einer kleineren Datei (der tar.gz) weniger Zeit als das Lesen einer größeren Datei. Außerdem wird Zeit gespart, da das Lesen einer einzelnen Datei schneller ist als das Lesen vieler kleiner Dateien.
Die Zeitersparnis hängt von der Differenz zwischen der zum Lesen (E/A) und zum Dekomprimieren (CPU) benötigten Zeit ab. Bei Dateien, die nur minimal komprimierbar sind (z. B. bereits komprimierte Dateien wie MP3, JPG, ZIP usw.), ist die zum Dekomprimieren benötigte Zeit wahrscheinlich größer als die beim Lesen eingesparte Zeit. Daher ist das Dekomprimieren tatsächlich langsamer als das Kopieren.
(Es ist zu beachten, dass durch die Verwendung der komprimierten Datei mehr Zeit gespart wird, je langsamer die E/A ist. Dies wäre beispielsweise der Fall, wenn sich Quelle und Ziel des Kopiervorgangs auf derselben physischen Festplatte befinden.)
Antwort2
Das Lesen einer sehr kleinen Datei ist viel schneller als das Lesen einer Menge großer Dateien. Dies gilt im Allgemeinen auch dann, wenn die CPU die Datei dekomprimieren muss.