LZ4 — это алгоритм сжатия без потерь, обеспечивающий скорость сжатия > 500 МБ/с на ядро, масштабируемый с помощью многоядерного процессора. Он оснащен чрезвычайно быстрым декодером со скоростью несколько ГБ/с на ядро, обычно достигающим пределов скорости оперативной памяти в многоядерных системах.
Скорость можно настраивать динамически, выбирая коэффициент «ускорения», который меняет степень сжатия на более высокую скорость. С другой стороны, также предоставляется производная версия с высокой степенью сжатия LZ4_HC, в которой время процессора используется для улучшения степени сжатия. Все версии имеют одинаковую скорость декомпрессии.
LZ4 также совместим со сжатием словаря как на уровне API, так и на уровне CLI. Он может использовать любой входной файл в качестве словаря, но используются только последние 64 КБ. Эту возможность можно объединить с Zstandard Dictionary Builder, чтобы значительно улучшить производительность сжатия небольших файлов.
Библиотека LZ4 предоставляется как программное обеспечение с открытым исходным кодом с использованием лицензии BSD 2-Clause.
Ветвь | Статус |
---|---|
разработчик |
В тесте используется lzbench от @inikep, скомпилированный с помощью GCC v8.2.0 в 64-разрядной версии Linux (Ubuntu 4.18.0-17). В эталонной системе используется процессор Core i7-9700K с частотой 4,9 ГГц (с турбонаддувом). Бенчмарк оценивает сжатие эталонного Silesia Corpus в однопоточном режиме.
Компрессор | Соотношение | Сжатие | Декомпрессия |
---|---|---|---|
память | 1.000 | 13700 МБ/с | 13700 МБ/с |
LZ4 по умолчанию (v1.9.0) | 2.101 | 780 МБ/с | 4970 МБ/с |
ЛЗО 2.09 | 2.108 | 670 МБ/с | 860 МБ/с |
QuickLZ 1.5.0 | 2.238 | 575 МБ/с | 780 МБ/с |
Моментальный 1.1.4 | 2.091 | 565 МБ/с | 1950 МБ/с |
Зстандарт 1.4.0 -1 | 2,883 | 515 МБ/с | 1380 МБ/с |
ЛЗФ v3.6 | 2,073 | 415 МБ/с | 910 МБ/с |
zlib выкачивать 1.2.11 -1 | 2.730 | 100 МБ/с | 415 МБ/с |
LZ4 HC-9 (v1.9.0) | 2,721 | 41 МБ/с | 4900 МБ/с |
zlib выкачивать 1.2.11 -6 | 3.099 | 36 МБ/с | 445 МБ/с |
LZ4 также совместим и оптимизирован для режима x32 ( -mx32
), для которого он обеспечивает дополнительную производительность.
make
make install # this command may require root permissions
Makefile
LZ4 поддерживает стандартные соглашения Makefile, включая поэтапную установку, перенаправление или переопределение команд. Он совместим с параллельными сборками ( -j#
).
Вы можете скачать и установить LZ4 с помощью менеджера зависимостей vcpkg:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg.exe install lz4
Порт LZ4 в vcpkg постоянно обновляется членами команды Microsoft и участниками сообщества. Если версия устарела, создайте проблему или запрос на извлечение в репозитории vcpkg.
Формат сжатия необработанных блоков LZ4 подробно описан в lz4_Block_format.
Файлы или потоки данных произвольной длины сжимаются с использованием нескольких блоков в соответствии с требованиями потоковой передачи. Эти блоки организованы в кадр, определенный в lz4_Frame_format. Совместимые версии LZ4 также должны соблюдать формат кадра.
Помимо справочного источника C, многие участники создали версии lz4 на нескольких языках (Java, C#, Python, Perl, Ruby и т. д.). Список известных исходных портов хранится на домашней странице LZ4.
Большинство дистрибутивов поставляются с менеджером пакетов, который позволяет легко установить как библиотеку liblz4
, так и интерфейс командной строки lz4
.