Para distribuir archivos a través de Internet, las siguientes cosas son generalmente una prioridad:
- Relación de compresión (es decir, qué tan pequeño hace los datos el compresor);
- Tiempo de descompresión (requisitos de CPU);
- Requisitos de memoria de descompresión; y
- Compatibilidad (qué tan extendido es el programa de descompresión)
Los requisitos de memoria de compresión y CPU no son muy importantes, ya que puede usar una máquina grande y rápida para eso, y solo tiene que hacerlo una vez.
En comparación con bzip2, xz tiene una mejor relación de compresión y un menor (mejor) tiempo de descompresión. Sin embargo, en las configuraciones de compresión que se usan típicamente, requiere más memoria para descomprimir [1] y está algo menos extendido. Gzip usa menos memoria que cualquiera de los dos.
Por lo tanto, los archivos en formato gzip y xz se publican, lo que le permite elegir:
- Necesita descomprimir en una máquina con memoria muy limitada (<32 MB): gzip. Dado, no es muy probable cuando se habla de fuentes de kernel.
- Necesidad de descomprimir las herramientas mínimas disponibles: gzip
- Quiere ahorrar tiempo de descarga y / o ancho de banda: xz
No existe realmente una combinación realista de factores que lo lleve a elegir bzip2. Por lo tanto, se está eliminando gradualmente.
Miré las comparaciones de compresión en una publicación de blog . No intenté replicar los resultados, y sospecho que algunos de ellos han cambiado (en su mayoría, espero que xz
hayan mejorado, ya que es el más nuevo).
(Hay algunos escenarios específicos donde una buena implementación de bzip2 puede ser preferible a xz: bzip2 puede comprimir un archivo con muchos ceros y secuencias de ADN del genoma mejor que xz. Las versiones más nuevas de xz ahora tienen un modo de bloque (opcional) que permite la recuperación de datos después del punto de corrupción y compresión paralela y [en teoría] descompresión. Anteriormente, solo bzip2 ofrecía estos. [2] Sin embargo, ninguno de estos es relevante para la distribución del núcleo)
1: en tamaño de archivo, xz -3
está alrededor bzip -9
. Entonces xz usa menos memoria para descomprimir. Pero xz -9
(como, por ejemplo, se usa para tarballs del kernel de Linux) usa mucho más que bzip -9
. (E incluso xz -0
necesita más que gzip -9
).
2: Cambio amplio del sistema F21: lbzip2 como implementación predeterminada de bzip2
En primer lugar, esta pregunta no está directamente relacionada con
tar
. Tar solo crea un archivo sin comprimir, la compresión se aplica luego.Se sabe que Gzip es relativamente rápido en comparación con LZMA2 y bzip2. Si la velocidad es importante,
gzip
(especialmente la implementación multiprocesopigz
) suele ser un buen compromiso entre la velocidad de compresión y la relación de compresión. Aunque hay alternativas si la velocidad es un problema (por ejemplo, LZ4).Sin embargo, si se desea una alta relación de compresión, LZMA2 late
bzip2
en casi todos los aspectos. La velocidad de compresión a menudo es más lenta, pero se descomprime mucho más rápido y proporciona una relación de compresión mucho mejor a costa de un mayor uso de memoria.Ya no hay muchas razones para usar
bzip2
, excepto la compatibilidad con versiones anteriores. Además, LZMA2 se diseñó teniendo en cuenta el subprocesamiento múltiple y muchas implementaciones por defecto utilizan CPU multinúcleo (desafortunadamentexz
en Linux todavía no lo hace). Esto tiene sentido ya que las velocidades del reloj ya no aumentarán, pero la cantidad de núcleos lo hará.Hay
bzip2
implementaciones multiproceso (ppbzip
. Ej. ), Pero a menudo no se instalan de manera predeterminada. También tenga en cuenta que los subprocesos múltiplesbzip2
solo rinden frutos durante la compresión, mientras que la descompresión usa un solo subproceso si el archivo se comprimió con un solo subprocesobzip2
, en contraste con LZMA2. Lasbzip2
variantes paralelas solo pueden aprovechar las CPU multinúcleo si el archivo se comprimió con unabzip2
versión paralela , que a menudo no es el caso.fuente
z
opción.xz
será multiproceso de forma predeterminada, por lo que nopixz
se requerirá instalación en el futuro. En algunas plataformas, elxz
subproceso ya es compatible. Mientras quebzip2
es poco probable que sea multiproceso ya que el formato no fue diseñado teniendo en cuenta el multiproceso. Además,pbzip2
solo acelera la descompresión si el archivo se ha comprimido usando lopbzip2
que a menudo no es el caso.Respuesta corta : xz es más eficiente en términos de relación de compresión. Por lo tanto, ahorra espacio en disco y optimiza la transferencia a través de la red.
Puede ver este punto de referencia rápido para descubrir la diferencia mediante pruebas prácticas.
fuente
LZMA2 es un sistema de compresión de bloques mientras que gzip no lo es. Esto significa que LZMA2 se presta a subprocesos múltiples. Además, si se produce corrupción en un archivo, generalmente puede recuperar datos de bloques posteriores con LZMA2 pero no puede hacerlo con gzip. En la práctica, pierde todo el archivo con gzip después del bloque dañado. Con un archivo LZMA2, solo pierde los archivos afectados por los bloques dañados. Esto puede ser importante en archivos más grandes con múltiples archivos.
fuente