Translate

domingo, 10 de agosto de 2014

PBZIP2: BZIP2 optimizado para múltiples cores

Quienes utilizan entornos basados en *nix (Linux, OS X, FreeBSD, etc.) sin dudas conocerán el compresor BZIP2, que genera los archivos con extensión bz2. También muy utilizado junto con tar, especificando el modificador j en lugar de z para generar archivos ".tar.bz2".

Sabrán que BZIP2 tiene la ventaja de obtener ratios de compresión mucho más altos que el clásico GZIP, gracias a que utiliza el algorimo de Burrows-Wheeler, que es mucho más eficaz que el clásico "deflate" de GZIP.

Sin embargo bzip2 muchas veces no es utilizado, porque es muy (PERO MUY) lento comprimiendo, comparado con GZIP. 

Pero hay situaciones donde se justifica la espera, por ejemplo cuando vamos a transferir un archivo muy grande a través de una red lenta. En esa situación estaba hoy, esperando que el bzip2 terminara de comprimir un archivo bastante grande, cuando encuentro que existe una versión "multithreaded" de BZIP2 llamada PBZIP2 (Parallel BZIP2). Esta versión obtiene mejoras de performance prácticamente lineales al número de cores presentes en el sistema (a.k.a. con 8 cores, se obtiene casi x8 de mejora de performance).

Para instalarla en Linux, utilizar los clásicos apt o yum según la distribución. En OS X lo instalé mediante homebrew (brew install pbzip2). Luego se utiliza de forma análoga a BZIP2.

Como tip final comento una de las formas de utilizarlo desde el tar:

tar --use-compress-program=pbzip2 -cvf archivo.tar.bz2 carpetaAComprimir/

Algo muy bueno es que el bzip2 clásico es lento pero sólo para comprimir, para descomprimir es mucho más ágil, por lo tanto podemos comprimir tranquilamente en formato bz2 con pbzip2 en nuestro equipo, y luego descomprimir con el bzip2 (o tar xvfj) en otro equipo destino, sin necesidad de instalar allí el pbzip2.


No hay comentarios:

Publicar un comentario