LZ4 es un algoritmo de compresión sin pérdidas que proporciona una velocidad de compresión > 500 MB/s por núcleo, escalable con CPU de múltiples núcleos. Cuenta con un decodificador extremadamente rápido, con una velocidad de varios GB/s por núcleo, que normalmente alcanza los límites de velocidad de RAM en sistemas multinúcleo.
La velocidad se puede ajustar dinámicamente, seleccionando un factor de "aceleración" que cambia la relación de compresión por una velocidad más rápida. En el otro extremo, también se proporciona un derivado de alta compresión, LZ4_HC, que intercambia tiempo de CPU por una relación de compresión mejorada. Todas las versiones cuentan con la misma velocidad de descompresión.
LZ4 también es compatible con la compresión de diccionarios, tanto a nivel API como CLI. Puede ingerir cualquier archivo de entrada como diccionario, aunque solo se utilizan los 64 KB finales. Esta capacidad se puede combinar con Zstandard Dictionary Builder para mejorar drásticamente el rendimiento de compresión en archivos pequeños.
La biblioteca LZ4 se proporciona como software de código abierto utilizando la licencia BSD de 2 cláusulas.
Rama | Estado |
---|---|
desarrollador |
El punto de referencia utiliza lzbench, de @inikep compilado con GCC v8.2.0 en Linux de 64 bits (Ubuntu 4.18.0-17). El sistema de referencia utiliza una CPU Core i7-9700K a 4,9 GHz (con turbo boost). Benchmark evalúa la compresión del Silesia Corpus de referencia en modo de un solo subproceso.
Compresor | Relación | Compresión | Descompresión |
---|---|---|---|
memcpy | 1.000 | 13700MB/s | 13700MB/s |
LZ4 predeterminado (v1.9.0) | 2.101 | 780 MB/s | 4970MB/s |
LZO 2.09 | 2.108 | 670 MB/s | 860 MB/s |
QuickLZ 1.5.0 | 2.238 | 575 MB/s | 780 MB/s |
Rápido 1.1.4 | 2.091 | 565 MB/s | 1950MB/s |
Estándar Z 1.4.0 -1 | 2.883 | 515 MB/s | 1380MB/s |
LZF v3.6 | 2.073 | 415 MB/s | 910 MB/s |
zlib desinflar 1.2.11 -1 | 2.730 | 100 MB/s | 415 MB/s |
LZ4 HC-9 (v1.9.0) | 2.721 | 41MB/s | 4900MB/s |
zlib desinflar 1.2.11 -6 | 3.099 | 36MB/s | 445 MB/s |
LZ4 también es compatible y está optimizado para el modo x32 ( -mx32
), para el cual proporciona un rendimiento de velocidad adicional.
make
make install # this command may require root permissions
Makefile
de LZ4 admite convenciones estándar de Makefile, incluidas instalaciones por etapas, redirección o redefinición de comandos. Es compatible con compilaciones paralelas ( -j#
).
Puede descargar e instalar LZ4 usando el administrador de dependencias vcpkg:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg.exe install lz4
Los miembros del equipo de Microsoft y los contribuyentes de la comunidad mantienen actualizado el port LZ4 en vcpkg. Si la versión no está actualizada, cree un problema o una solicitud de extracción en el repositorio de vcpkg.
El formato de compresión de bloques LZ4 sin formato se detalla en lz4_Block_format.
Los archivos o flujos de datos arbitrariamente largos se comprimen utilizando múltiples bloques para cumplir con los requisitos de transmisión. Estos bloques están organizados en un marco, definido en lz4_Frame_format. Las versiones interoperables de LZ4 también deben respetar el formato de trama.
Más allá de la fuente de referencia de C, muchos contribuyentes han creado versiones de lz4 en varios idiomas (Java, C#, Python, Perl, Ruby, etc.). En la página de inicio de LZ4 se mantiene una lista de puertos de origen conocidos.
La mayoría de las distribuciones incluyen un administrador de paquetes que permite una fácil instalación tanto de la biblioteca liblz4
como de la interfaz de línea de comandos lz4
.