
Tengo algunos archivos tar.gz que suman muchos gigabytes en un sistema CentOS. La mayoría de los archivos tar.gz son bastante pequeños, pero los que tienen imágenes son grandes. Uno es de 7,7G, otro de aproximadamente 4G y un par de aproximadamente 1G.
Ya descomprimí los archivos una vez y ahora quiero una segunda copia de todos esos archivos.
Supuse que copiar los archivos descomprimidos sería más rápido que volver a descomprimirlos. Pero comencé a ejecutar cp -R hace unos 10 minutos y hasta ahora se han copiado menos de 500 M. Estoy seguro de que el proceso de desembalaje fue más rápido.
¿Estoy en lo cierto?
Y si es así, ¿por qué? No parece tener sentido que desempacar sea más rápido que simplemente duplicar estructuras existentes.
Respuesta1
Considere los dos escenarios:
- Copiar requiere que lea el archivo completo del disco y lo escriba en el disco.
- Tar-Gzip requiere que lea un archivo más pequeño del disco, lo descomprima y lo escriba en el disco.
Si su CPU no se ve afectada por el proceso de descompresión, es lógico que las operaciones de E/S sean limitantes. Según ese argumento (y dado que hay que escribir la misma cantidad en ambos casos), leer un archivo más pequeño (el tar.gz) lleva menos tiempo que leer un archivo más grande. También se ahorra tiempo porque es más rápido leer un solo archivo que leer muchos archivos pequeños.
El tiempo ahorrado depende de la diferencia entre el tiempo necesario para leer (E/S) y descomprimir (CPU). Por lo tanto, para archivos que son mínimamente comprimibles (por ejemplo, archivos ya comprimidos como mp3, jpg, zip, etc.), donde el tiempo requerido para la descompresión probablemente sea mayor que el tiempo ahorrado en la operación de lectura, de hecho será más lento para descomprimir que para copiar.
(Vale la pena señalar que cuanto más lenta sea la E/S, más tiempo se ahorrará al utilizar el archivo comprimido; uno de esos escenarios sería si el origen y el destino de la operación de copia estuvieran en el mismo disco físico).
Respuesta2
Leer un archivo muy pequeño es mucho más rápido que leer un montón de archivos grandes. Esto suele ser cierto incluso si la CPU tiene que descomprimirlo.