LZ4 - 극도로 빠른 압축
LZ4는 손실 없는(lossless) 압축 알고리즘으로, 코어당 500 MB/s 이상의 압축 속도를 제공하며 멀티코어 CPU에 맞춰 확장 가능합니다. 이 알고리즘은 매우 빠른 디코더를 특징으로 하며, 멀티코어 시스템에서 일반적으로 RAM 속도 한계치에 도달하는 GB/s 단위의 속도를 보여줍니다.
압축 속도는 "가속(acceleration)" 계수를 선택하여 동적으로 조정할 수 있으며, 이는 압축률과 더 빠른 속도 사이의 트레이드오프를 만듭니다. 반면, 개선된 압축률을 위해 CPU 시간을 희생하는 고압축 파생 버전인 LZ4_HC도 제공됩니다. 모든 버전은 동일한 압축 해제(decompression) 속도를 특징으로 합니다.
LZ4는 dictionary compression과도 호환되며, 이는 API 레벨과 CLI (-D) 레벨 모두에서 가능합니다. 이 알고리즘은 임의의 입력 파일을 딕셔너리로 사용할 수 있지만, 실제로 사용되는 것은 최종 64 KB에 한정됩니다. 이러한 기능은 Zstandard Dictionary Builder와 결합하여 소용량 파일의 압축 성능을 극적으로 향상시킬 수 있습니다.
LZ4 라이브러리는 BSD 2-Clause 라이선스를 사용하여 오픈소스 소프트웨어로 제공됩니다. lz4 명령줄 유틸리티는 GPL-2.0-or-later 라이선스 하에 제공됩니다.
벤치마크
이 벤치마크는 @inikep의 lzbench v2.4.1을 사용했으며, GCC v13.3.0으로 Linux 64비트(Ubuntu 24.04)에서 컴파일되었습니다. 참조 시스템은 Core i7-9700K CPU를 사용합니다. 이 벤치마크는 단일 스레드 모드에서 참조 Silesia Corpus의 압축을 평가했습니다.
| 압축기 | 계수 | 압축 속도 | 압축 해제 속도 |
|---|
| memcpy | 1.000 | 13700 MB/s | 13700 MB/s |
| ... | | zlib-ng 2.3.3 -1 | 2.252 |
| zlib deflate 1.3.2 -1 | 2.743 | 110 MB/s | 410 MB/s |
| LZ4 HC -9 (v1.11.0) | 2.717 | 40 MB/s | 4800 MB/s |
| zlib deflate 1.3.2 -6 | 3.106 | 36 MB/s | 430 MB/s |
설치 (Installation)
make
make install # 이 명령어는 root 권한이 필요할 수 있습니다
LZ4의 Makefile은 표준 Makefile 규칙을 지원하며, 여기에는 단계별 설치 (staged installs), 리디렉션, 또는 명령어 재정의가 포함됩니다.
또한 병렬 빌드(-j#)와도 호환됩니다.
대안 빌드 시스템 (CMake, Meson, Visual Studio)은 build/ 디렉터리에 제공됩니다.
vcpkg을 사용한 LZ4 빌드
vcpkg 의존성 관리자를 사용하여 LZ4를 다운로드하고 설치할 수 있습니다:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install lz4
vcpkg의 LZ4 포트는 Microsoft 팀원과 커뮤니티 기여자들에 의해 최신 상태로 유지됩니다. 버전이 오래된 경우, vcpkg 리포지토리에서 issue를 생성하거나 pull request를 작성해 주십시오.
문서 (Documentation)
원시 LZ4 블록 압축 형식은 lz4_Block_format에 자세히 설명되어 있습니다.
임의 길이의 파일이나 데이터 스트림은 스트리밍 요구 사항을 위해 여러 블록을 사용하여 압축됩니다. 이 블록들은 lz4_Frame_format에서 정의된 프레임으로 구성됩니다.
상호 운용 가능한 LZ4 버전 역시 프레임 형식을 준수해야 합니다.
라이브러리 API는 헤더 파일에 문서화되어 있습니다:
lz4.h (블록 API), lz4hc.h (고압축), 그리고 lz4frame.h (프레임 API).
다른 소스 버전
C 참조 소스를 넘어, 많은 기여자들이 여러 언어(Java, C#, Python, Perl, Ruby 등)로 lz4 버전을 만들었습니다. 알려진 소스 포트는 LZ4 Homepage에서 유지 관리됩니다.
패키징 상태
대부분의 배포판은 liblz4 라이브러리와 lz4 명령줄 인터페이스를 모두 쉽게 설치할 수 있는 패키지 매니저와 함께 번들링됩니다.
Packaging status
특별 감사
- 이 프로젝트의 전 기간 동안 탁월한 최고 수준의 지원을 해주신 Takayuki Matsuoka (@t-mat)님께