[Tip] bzip2 vs pbzip2: Comprimir con bzip2 en forma paralela

Ya todos conocemos “bzip2“, un algoritmo de compresión sin perdida, pero no todos conocen la existencia del proyecto “pbzip2“, una implementación “paralela” del anterior; un algoritmo de compresión, basado en bzip2, que aprovecha los recursos de una máquina con SMP (Symmetric Multi-Processing).

PBZIP2 is a parallel implementation of the bzip2 block-sorting file compressor that uses pthreads and achieves near-linear speedup on SMP machines. The output of this version is fully compatible with bzip2 v1.0.2 or newer

(Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz)

En la imagen pueden ver los 3 procesos de pbzip2 consumiendo los 2 CPUs al 100%, de esta forma el tiempo de compresión es practicamente la mitad.
A simple vista, si bzip2 se demora 30 segundos, pbzip2 demora 15. Por ejemplo, con un archivo de texto (el típico dump sql) de tamaño 137Mb:
$ time bzip2 poc.sql

real 0m33.010s
user 0m32.788s
sys 0m0.147s

Y con pbzip2:
$ time pbzip2 poc.sql

real 0m19.827s
user 0m36.868s
sys 0m0.960s

Parallel-bzip2 se encuentra oficialmente en la mayoría de los repositorios, por ejemplo en:
Debian
Archlinux
OpenSuSe

El software se instala y se usa identico al bzip2 normal.

3 comentarios

  1. Se ve súper interesante, aunque cabe destacar que, si la teoría no me falla, nunca va a llegar a una mejora del performance equivalente al número de cores (exáctamente). Pasa que la gente a veces se hace falsas ilusiones. Aún así, está la raja.

    Corrígeme si me equivoqué.

  2. Zerial

    junio 13, 2011 a las 11:22 am

    Hola JoJO!

    Entiendo lo que quieres decir. En este caso las pruebas que hice fueron con archivos de distintos tamaños (siempre archivos de texto), si con 1 core demora 10 segs, con 2 demoro 5. Depende obviamente que otros procesos estes ejecutando con los procesadores. Puede estar trabajando con 1 core ao 95% y con otro al 100%, ahi no seria exactamente la mitad, seria un poco mas. Se entiende? Pero siempre, mientras mas cores usemos en este caso, sera mas rapido. Es como si distribuyeras la carga.

    Si tienes 50GB y quieres comprimirlo con 5 cores, cada uno se encarga de comprimir 10GB, por lo que el tiempo es menor. No es EXACTAMENTE asi, pero se entiende la “teoria”.

    saludos

  3. Zerial

    junio 13, 2011 a las 11:24 am

    El “rendimiento” en este caso no seria “comprimir mas” sino “comprimir en menos tiempo”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.