LZ4 - Extremely fast compression

LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.

A high compression derivative, called LZ4_HC, is also provided. It trades CPU time for compression ratio.

BranchStatus
masterBuild Status
devBuild Status
visualBuild status

Branch Policy:

  • The “master” branch is considered stable, at all times.
  • The “dev” branch is the one where all contributions must be merged before being promoted to master.
    • If you plan to propose a patch, please commit into the “dev” branch. Direct commit to “master” are not permitted.
  • Feature branches can also exist, for dedicated tests of larger modifications before merge into “dev” branch.

Benchmarks

The benchmark uses the Open-Source Benchmark program by m^2 (v0.14.3) compiled with GCC v4.8.2 on Linux Mint 64-bits v17. The reference system uses a Core i5-4300U @1.9GHz. Benchmark evaluates the compression of reference Silesia Corpus in single-thread mode.

CompressorRatioCompressionDecompression
memcpy1.0004200 MB/s4200 MB/s
LZ4 fast (r129)1.607680 MB/s2220 MB/s
LZ4 (r129)2.101385 MB/s1850 MB/s
LZO 2.062.108350 MB/s510 MB/s
QuickLZ 1.5.1.b62.238320 MB/s380 MB/s
Snappy 1.1.02.091250 MB/s960 MB/s
zlib 1.2.8 -12.73059 MB/s250 MB/s
LZ4 HC (r129)2.72022 MB/s1830 MB/s
zlib 1.2.8 -63.09918 MB/s270 MB/s

The LZ4 block compression format is detailed within lz4_Block_format.

Block format doesn't deal with header information, nor how to handle arbitrarily long files or data streams. This is the purpose of the Frame format. Interoperable versions of LZ4 should use the same frame format, defined into lz4_Frame_format.