Delirios de un Informático

Compresión multihilo en Linux

Hace años que disponemos de procesadores con más de un núcleo que en la práctica el sistema operativo ve como varios procesadores, pero todavía hay mucho software que no aprovecha todo el potencial disponible. La compresión de archivos es una tarea bastante frecuente y el software generalmente hace uso sólo de 1 núcleo del procesador, desaprovechando el resto. La siguiente imagen lo ilustra perfectamente:

comparativa

El primer tramo es una compresión con el comando bzip2 sin más, y se ve que sólo utiliza 1 núcleo dejando los otros 7 sin uso. El segundo tramo (sobre el segundo 20) es una compresión del mismo archivo pero aprovechando todos los núcleos, y evidentemente se hace en mucho menos tiempo.

En Linux los compresores más utilizados (gzip y bzip2) no implementan multithreading, pero existen modificaciones que sí lo hacen: SMP mgzip y Parallel BZIP2. Estas dos utilidades sirven sólo para comprimir, generando archivos perfectamente compatibles con sus versiones estándar. También existe 7-Zip, que permite comprimir en múltiples formatos, incluyendo gzip y bzip2. Un ejemplo práctico:

7z a -m0=bzip2 -mmt=8 test.pdf.bzip2 test.pdf

Con ese comando se realiza una compresión en formato bzip2 utilizando 8 núcleos del procesador.