Siguiendo la línea de la comparativa de algoritmos de compresión que hice hace tiempo y viendo el avance que ha habido en procesadores con múltiples núcleos quería volver a repetir las pruebas usando aplicaciones que puedan aprovechar todos los núcleos para ver como mejoran los resultados.
Entorno de pruebas
- Sistema operativo: Debian Wheezy 64 bits
- Directorio database sin comprimir: 32G
- CPUs: 2 x Intel Xeon E5-2690 @ 2.90GHz
- Cores: 32
Todas las aplicaciones están en los repositorios oficiales, excepto pxz pero se puede instalar sin problema el paquete de sid.
Multi Core
Cada aplicación afronta el problema de una forma distinta y usa distintos algoritmos de compresión. Por lo general el fichero empaquetado y comprimido es compatible y se puede descomprimir usando la aplicación original, aunque para la descompresión apenas tiene efecto el multiproceso, en determinados casos puede suponer una mejora.
Hay que tener en cuenta que al usar todos los cores también aumenta considerablemente tanto la carga del servidor como el consumo de ram, aunque según el caso nos puede compensar ampliamente. Estos han sido los resultados de los tests:
pigz 2.2.4
Compresión: Tiempo: 1m48.863s Tamaño: 8,3G
time tar --use-compress-program=pigz -cf database.tar.gz database
Descompresión: Tiempo: 5m3.773s
time tar --use-compress-program=pigz -xf database.tar.gz
plzip 0.9
Compresión: Tiempo: 23m43.777s Tamaño: 4,4G
time tar --use-compress-program=plzip -cf database.tar.gz database
Descompresión: Tiempo: 2m36.047s
time tar --use-compress-program=plzip -xf database.tar.gz
lrzip 0.608
Compresión: Tiempo: 17m26.387s Tamaño: 4,1G
time tar --use-compress-program=lrzip -cf database.tar.lrz database
Descompresión: Tiempo: 5m27.053s
time tar --use-compress-program=lrzip -xf database.tar.lrz
pbzip2 1.1.8
Compresión: Tiempo: 3m46.977s Tamaño: 6,5G
time tar --use-compress-program=pbzip2 -cf database.tar.bz2 database
Descompresión: Tiempo: 2m33.358s
time tar --use-compress-program=pbzip2 -xf database.tar.bz2
pxz 4.999.9beta
Compresión: Tiempo: 16m14.513s Tamaño: 4,2G
time tar --use-compress-program=pxz -cf database.tar.xz database
Descompresión: Tiempo: 7m39.383s
time tar --use-compress-program=pxz -xf database.tar.xz
Conclusiones
Como era de esperar el uso de varios cores mejora considerablemente el rendimiento. Si buscamos velocidad el mejor resultado nos lo va a dar pigz, aunque el archivo final ocupa bastante comparado con el resto de aplicaciones el minuto y medio que tarda en comprimir 32G es impresionante. Por otro lado, si lo que buscamos es compresión lrzip o pxz son las mejores opciones. Y por último pbzip2 alcanza muy buenas medidas tanto en tiempo como en factor de compresión.
Single Core
Para ver mejor las diferencias he repetido el mismo test usando las aplicaciones tradicionales que usan un único core. Los resultados hablan por sí mismos:
gzip 1.5
Compresión: Tiempo: 23m52.998s Tamaño: 8,3G
time tar -zcf database.tar.gz database
Descompresión: Tiempo: 4m48.058s
time tar -zxf database.tar.gz
bzip2 1.0.6
Compresión: Tiempo: 54m33.632s Tamaño: 6,5G
time tar -jcf database.tar.bz2 database
Descompresión: Tiempo: 14m43.567s
time tar -jxf database.tar.bz2
xz 5.1.0alpha
Compresión: Tiempo: 24m53.738s Tamaño: 5,8G
export XZ\_OPT=-0
time tar -Jcf database.tar.xz database
Descompresión: Tiempo: 9m26.219s
time tar -Jxf database.tar.xz