Comparativa de algoritmos de compresión II - Multicore

@kahun

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