¿Qué herramientas de compresión están disponibles en Ubuntu que pueden beneficiarse de una CPU de múltiples núcleos?
compression
multi-core
Luis Alvarado
fuente
fuente
Respuestas:
Hay dos herramientas principales.
lbzip2
ypbzip2
. Son implementaciones esencialmente diferentes de los compresores bzip2. Los he comparado (el resultado es una versión ordenada, pero debería poder ejecutar los comandos)lbzip2
parece ser el ganador en datos aleatorios. Está un poco menos comprimido pero mucho más rápido. YMMV.fuente
/dev/urandom
No es una gran opción de entrada para las herramientas de compresión de evaluación comparativa, ya que los datos aleatorios son, por definición, incompresibles. Eso explica en parte por qué en ambos casos el archivo de salida es ~ 450MiB más grande que la entrada.00000000000000000000000000000000
. Así es como funciona el azar;) De lo que estás hablando es de promedios prácticos. Es poco probable que genere un archivo de 100 MB de ceros. Y estoy de acuerdo con el espíritu de lo que estás diciendo, simplemente no estoy de acuerdo con "por definición" porque esa no es la definición (porque es inexacta).wget http://mattmahoney.net/dc/enwik8.zip
para obtener 96MB (21MB comprimido) de texto de Wikipedia. Para obtener un conjunto de puntos de referencia mucho más completo, consulte aquí .Bueno, la palabra clave era paralela . Después de buscar todas las herramientas de compresión que también eran paralelas , encontré lo siguiente:
PXZ : Parallel XZ es una utilidad de compresión que aprovecha la ejecución de la compresión LZMA de diferentes partes de un archivo de entrada en múltiples núcleos y procesadores simultáneamente. Su objetivo principal es utilizar todos los recursos para acelerar el tiempo de compresión con la mínima influencia posible en la relación de compresión.
sudo apt-get install pxz
PLZIP : Lzip es un compresor de datos sin pérdidas basado en el algoritmo LZMA, con una comprobación de integridad muy segura y una interfaz de usuario similar a la de gzip o bzip2. Lzip descomprime casi tan rápido como gzip y comprime mejor que bzip2, lo que lo hace muy adecuado para la distribución de software y el archivo de datos.
Plzip es una versión masivamente paralela (multiproceso) de lzip que utiliza el formato de archivo lzip; los archivos producidos por plzip son totalmente compatibles con lzip.
Plzip está diseñado para una compresión / descompresión más rápida de archivos grandes en máquinas multiprocesador, lo que lo hace especialmente adecuado para la distribución de archivos de software grandes y el archivo de datos a gran escala. En archivos lo suficientemente grandes, plzip puede usar cientos de procesadores.
sudo apt-get install plzip
PIGZ - pigz, que significa Implementación Paralela de GZip, es un reemplazo completamente funcional para gzip que aprovecha múltiples procesadores y múltiples núcleos al comprimir datos.
sudo apt-get install pigz
PBZIP2 - pbzip2 es una implementación paralela del compresor de archivos de clasificación de bloques bzip2 que usa pthreads y logra una aceleración casi lineal en máquinas SMP. El resultado de esta versión es totalmente compatible con bzip2 v1.0.2 (es decir: cualquier cosa comprimida con pbzip2 puede descomprimirse con bzip2).
sudo apt-get install pbzip2
LRZIP : un programa de compresión multiproceso que puede lograr relaciones y velocidades de compresión muy altas cuando se usa con archivos grandes. Utiliza los algoritmos de compresión combinados de zpaq y lzma para una compresión máxima, lzo para la velocidad máxima y la reducción de redundancia de largo alcance de rzip. Está diseñado para escalar con aumentos con el tamaño de RAM, mejorando aún más la compresión. Una opción de optimización de tamaño o velocidad permite una mejor compresión de la que incluso puede proporcionar lzma, o una mejor velocidad que gzip, pero con niveles de compresión de tamaño bzip2.
sudo apt-get install lrzip
Una pequeña referencia de compresión (utilizando la prueba que creó Oli):
TAMAÑO DE ARCHIVO ORIGINAL - 100 MB
PBZIP2 - 101 MB (1% más grande)
PXZ - 101 MB (1% más grande)
PLZIP - 102 MB (1% más grande)
LRZIP - 101 MB (1% más grande)
PIGZ - 101 MB (1% más grande) )
Una pequeña referencia de compresión (usando un archivo de texto):
TAMAÑO DE ARCHIVO ORIGINAL - 70 KB Archivo de texto
PBZIP2 - 16.1 KB (23%)
PXZ - 15.4 KB (22%)
PLZIP - 15.5 KB (22.1%)
LRZIP - 15.3 KB (21.8%)
PIGZ - 17.4 KB (24.8%)
fuente
lrzip
se puede descomprimir usandopbzip2
, por ejemplo.Además del bonito resumen anterior (gracias Luis), en estos días la gente también podría querer considerar PIXZ, que según README (Fuente: https://github.com/vasi/pixz , no he verificado las afirmaciones por mí mismo ) tiene algunas ventajas sobre PXZ.
En otras palabras, PIXZ supuestamente es más eficiente en memoria y disco, y tiene una función de indexación opcional que acelera la descompresión de componentes individuales de archivos tar comprimidos.
fuente
pixz
archivos no son compatibles con elxz
formato estándar , comopxz
sería.pixz
puede descomprimirxz
archivos yxz
puede descomprimirpixz
archivos. Sin embargo, las opciones de línea de comando enxz
ypixz
difieren.pixz
.Actualizar:
XZ Utils admite la compresión multiproceso desde la versión 5.2.0, originalmente se documentó erróneamente como descompresión multiproceso.
Por ejemplo:
tar -cf - source | xz --threads=0 > destination.tar.xz
fuente
export XZ_DEFAULTS="-T 0"
y luego simplemente usar su llamada tar habitual, es decirtar cJf target.tar.xz source
.lzop también puede ser una opción viable, aunque es de un solo subproceso.
Utiliza el muy rápido algoritmo de compresión lempel-ziv-oberhumer que es 5-6 veces más rápido que gzip en mi observación.
Nota: Aunque todavía no es multiproceso, probablemente superará a pigz en sistemas de 1-4 núcleos. Es por eso que decidí publicar esto incluso si no responde directamente a su pregunta. Pruébelo, puede resolver su problema de cuello de botella de CPU mientras usa solo una CPU y comprime un poco peor. A menudo me pareció una mejor solución que, por ejemplo, pigz.
fuente
El compresor LZMA2 de p7zip usa ambos núcleos en mi sistema.
fuente
En realidad no es una respuesta, pero creo que es lo suficientemente relevante para compartir mis puntos de referencia que comparan la velocidad de
gzip
ypigz
en una verdadera HW en un escenario de la vida real. Comopigz
es la evolución multiproceso que personalmente he elegido usar de ahora en adelante.Metadatos
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + SSD NvmeXubuntu 17.10 (artful)
gzip
versión:1.6
pigz
versión:2.4
gzip
rápidogzip
mejorpigz
rápidopigz
mejor (nozopfli
)pigz
+zopfli
algoritmoComo resultado final, no recomendaría el
zopfli
algoritmo ya que la compresión tomó una gran cantidad de tiempo para ahorrar una cantidad no significativa de espacio en disco.Tamaños de archivo resultantes:
fuente
Zstandard admite subprocesos múltiples desde v1.2.0 ¹. Es un compresor y descompresor muy rápido destinado a reemplazar gzip y también puede comprimir de manera tan eficiente, si no mejor, como LZMA2 / XZ en sus niveles más altos.
Debe utilizar una versión ingeniosa o más reciente, o compilar la última versión de la fuente para obtener estos beneficios. Afortunadamente, no atrae muchas dependencias.
fuente