xref: /aosp_15_r20/external/lz4/README.md (revision 27162e4e17433d5aa7cb38e7b6a433a09405fc7f)
1*27162e4eSAndroid Build Coastguard WorkerLZ4 - Extremely fast compression
2*27162e4eSAndroid Build Coastguard Worker================================
3*27162e4eSAndroid Build Coastguard Worker
4*27162e4eSAndroid Build Coastguard WorkerLZ4 is lossless compression algorithm,
5*27162e4eSAndroid Build Coastguard Workerproviding compression speed > 500 MB/s per core,
6*27162e4eSAndroid Build Coastguard Workerscalable with multi-cores CPU.
7*27162e4eSAndroid Build Coastguard WorkerIt features an extremely fast decoder,
8*27162e4eSAndroid Build Coastguard Workerwith speed in multiple GB/s per core,
9*27162e4eSAndroid Build Coastguard Workertypically reaching RAM speed limits on multi-core systems.
10*27162e4eSAndroid Build Coastguard Worker
11*27162e4eSAndroid Build Coastguard WorkerSpeed can be tuned dynamically, selecting an "acceleration" factor
12*27162e4eSAndroid Build Coastguard Workerwhich trades compression ratio for faster speed.
13*27162e4eSAndroid Build Coastguard WorkerOn the other end, a high compression derivative, LZ4_HC, is also provided,
14*27162e4eSAndroid Build Coastguard Workertrading CPU time for improved compression ratio.
15*27162e4eSAndroid Build Coastguard WorkerAll versions feature the same decompression speed.
16*27162e4eSAndroid Build Coastguard Worker
17*27162e4eSAndroid Build Coastguard WorkerLZ4 is also compatible with [dictionary compression](https://github.com/facebook/zstd#the-case-for-small-data-compression),
18*27162e4eSAndroid Build Coastguard Workerboth at [API](https://github.com/lz4/lz4/blob/v1.8.3/lib/lz4frame.h#L481) and [CLI](https://github.com/lz4/lz4/blob/v1.8.3/programs/lz4.1.md#operation-modifiers) levels.
19*27162e4eSAndroid Build Coastguard WorkerIt can ingest any input file as dictionary, though only the final 64KB are used.
20*27162e4eSAndroid Build Coastguard WorkerThis capability can be combined with the [Zstandard Dictionary Builder](https://github.com/facebook/zstd/blob/v1.3.5/programs/zstd.1.md#dictionary-builder),
21*27162e4eSAndroid Build Coastguard Workerin order to drastically improve compression performance on small files.
22*27162e4eSAndroid Build Coastguard Worker
23*27162e4eSAndroid Build Coastguard Worker
24*27162e4eSAndroid Build Coastguard WorkerLZ4 library is provided as open-source software using BSD 2-Clause license.
25*27162e4eSAndroid Build Coastguard Worker
26*27162e4eSAndroid Build Coastguard Worker
27*27162e4eSAndroid Build Coastguard Worker|Branch      |Status   |
28*27162e4eSAndroid Build Coastguard Worker|------------|---------|
29*27162e4eSAndroid Build Coastguard Worker|dev         | [![Build status][AppveyorDevBadge]][AppveyorLink]  |
30*27162e4eSAndroid Build Coastguard Worker
31*27162e4eSAndroid Build Coastguard Worker[AppveyorDevBadge]: https://ci.appveyor.com/api/projects/status/github/lz4/lz4?branch=dev&svg=true "Windows test suite"
32*27162e4eSAndroid Build Coastguard Worker[AppveyorLink]: https://ci.appveyor.com/project/YannCollet/lz4-1lndh
33*27162e4eSAndroid Build Coastguard Worker
34*27162e4eSAndroid Build Coastguard Worker
35*27162e4eSAndroid Build Coastguard WorkerBenchmarks
36*27162e4eSAndroid Build Coastguard Worker-------------------------
37*27162e4eSAndroid Build Coastguard Worker
38*27162e4eSAndroid Build Coastguard WorkerThe benchmark uses [lzbench], from @inikep
39*27162e4eSAndroid Build Coastguard Workercompiled with GCC v8.2.0 on Linux 64-bits (Ubuntu 4.18.0-17).
40*27162e4eSAndroid Build Coastguard WorkerThe reference system uses a Core i7-9700K CPU @ 4.9GHz (w/ turbo boost).
41*27162e4eSAndroid Build Coastguard WorkerBenchmark evaluates the compression of reference [Silesia Corpus]
42*27162e4eSAndroid Build Coastguard Workerin single-thread mode.
43*27162e4eSAndroid Build Coastguard Worker
44*27162e4eSAndroid Build Coastguard Worker[lzbench]: https://github.com/inikep/lzbench
45*27162e4eSAndroid Build Coastguard Worker[Silesia Corpus]: http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia
46*27162e4eSAndroid Build Coastguard Worker
47*27162e4eSAndroid Build Coastguard Worker|  Compressor             | Ratio   | Compression | Decompression |
48*27162e4eSAndroid Build Coastguard Worker|  ----------             | -----   | ----------- | ------------- |
49*27162e4eSAndroid Build Coastguard Worker|  memcpy                 |  1.000  | 13700 MB/s  |  13700 MB/s   |
50*27162e4eSAndroid Build Coastguard Worker|**LZ4 default (v1.9.0)** |**2.101**| **780 MB/s**| **4970 MB/s** |
51*27162e4eSAndroid Build Coastguard Worker|  LZO 2.09               |  2.108  |   670 MB/s  |    860 MB/s   |
52*27162e4eSAndroid Build Coastguard Worker|  QuickLZ 1.5.0          |  2.238  |   575 MB/s  |    780 MB/s   |
53*27162e4eSAndroid Build Coastguard Worker|  Snappy 1.1.4           |  2.091  |   565 MB/s  |   1950 MB/s   |
54*27162e4eSAndroid Build Coastguard Worker| [Zstandard] 1.4.0 -1    |  2.883  |   515 MB/s  |   1380 MB/s   |
55*27162e4eSAndroid Build Coastguard Worker|  LZF v3.6               |  2.073  |   415 MB/s  |    910 MB/s   |
56*27162e4eSAndroid Build Coastguard Worker| [zlib] deflate 1.2.11 -1|  2.730  |   100 MB/s  |    415 MB/s   |
57*27162e4eSAndroid Build Coastguard Worker|**LZ4 HC -9 (v1.9.0)**   |**2.721**|    41 MB/s  | **4900 MB/s** |
58*27162e4eSAndroid Build Coastguard Worker| [zlib] deflate 1.2.11 -6|  3.099  |    36 MB/s  |    445 MB/s   |
59*27162e4eSAndroid Build Coastguard Worker
60*27162e4eSAndroid Build Coastguard Worker[zlib]: http://www.zlib.net/
61*27162e4eSAndroid Build Coastguard Worker[Zstandard]: http://www.zstd.net/
62*27162e4eSAndroid Build Coastguard Worker
63*27162e4eSAndroid Build Coastguard WorkerLZ4 is also compatible and optimized for x32 mode (`-mx32`),
64*27162e4eSAndroid Build Coastguard Workerfor which it provides additional speed performance.
65*27162e4eSAndroid Build Coastguard Worker
66*27162e4eSAndroid Build Coastguard Worker
67*27162e4eSAndroid Build Coastguard WorkerInstallation
68*27162e4eSAndroid Build Coastguard Worker-------------------------
69*27162e4eSAndroid Build Coastguard Worker
70*27162e4eSAndroid Build Coastguard Worker```
71*27162e4eSAndroid Build Coastguard Workermake
72*27162e4eSAndroid Build Coastguard Workermake install     # this command may require root permissions
73*27162e4eSAndroid Build Coastguard Worker```
74*27162e4eSAndroid Build Coastguard Worker
75*27162e4eSAndroid Build Coastguard WorkerLZ4's `Makefile` supports standard [Makefile conventions],
76*27162e4eSAndroid Build Coastguard Workerincluding [staged installs], [redirection], or [command redefinition].
77*27162e4eSAndroid Build Coastguard WorkerIt is compatible with parallel builds (`-j#`).
78*27162e4eSAndroid Build Coastguard Worker
79*27162e4eSAndroid Build Coastguard Worker[Makefile conventions]: https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
80*27162e4eSAndroid Build Coastguard Worker[staged installs]: https://www.gnu.org/prep/standards/html_node/DESTDIR.html
81*27162e4eSAndroid Build Coastguard Worker[redirection]: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
82*27162e4eSAndroid Build Coastguard Worker[command redefinition]: https://www.gnu.org/prep/standards/html_node/Utilities-in-Makefiles.html
83*27162e4eSAndroid Build Coastguard Worker
84*27162e4eSAndroid Build Coastguard Worker### Building LZ4 - Using vcpkg
85*27162e4eSAndroid Build Coastguard Worker
86*27162e4eSAndroid Build Coastguard WorkerYou can download and install LZ4 using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
87*27162e4eSAndroid Build Coastguard Worker
88*27162e4eSAndroid Build Coastguard Worker    git clone https://github.com/Microsoft/vcpkg.git
89*27162e4eSAndroid Build Coastguard Worker    cd vcpkg
90*27162e4eSAndroid Build Coastguard Worker    ./bootstrap-vcpkg.sh
91*27162e4eSAndroid Build Coastguard Worker    ./vcpkg integrate install
92*27162e4eSAndroid Build Coastguard Worker    ./vcpkg.exe install lz4
93*27162e4eSAndroid Build Coastguard Worker
94*27162e4eSAndroid Build Coastguard WorkerThe LZ4 port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
95*27162e4eSAndroid Build Coastguard Worker
96*27162e4eSAndroid Build Coastguard WorkerDocumentation
97*27162e4eSAndroid Build Coastguard Worker-------------------------
98*27162e4eSAndroid Build Coastguard Worker
99*27162e4eSAndroid Build Coastguard WorkerThe raw LZ4 block compression format is detailed within [lz4_Block_format].
100*27162e4eSAndroid Build Coastguard Worker
101*27162e4eSAndroid Build Coastguard WorkerArbitrarily long files or data streams are compressed using multiple blocks,
102*27162e4eSAndroid Build Coastguard Workerfor streaming requirements. These blocks are organized into a frame,
103*27162e4eSAndroid Build Coastguard Workerdefined into [lz4_Frame_format].
104*27162e4eSAndroid Build Coastguard WorkerInteroperable versions of LZ4 must also respect the frame format.
105*27162e4eSAndroid Build Coastguard Worker
106*27162e4eSAndroid Build Coastguard Worker[lz4_Block_format]: doc/lz4_Block_format.md
107*27162e4eSAndroid Build Coastguard Worker[lz4_Frame_format]: doc/lz4_Frame_format.md
108*27162e4eSAndroid Build Coastguard Worker
109*27162e4eSAndroid Build Coastguard Worker
110*27162e4eSAndroid Build Coastguard WorkerOther source versions
111*27162e4eSAndroid Build Coastguard Worker-------------------------
112*27162e4eSAndroid Build Coastguard Worker
113*27162e4eSAndroid Build Coastguard WorkerBeyond the C reference source,
114*27162e4eSAndroid Build Coastguard Workermany contributors have created versions of lz4 in multiple languages
115*27162e4eSAndroid Build Coastguard Worker(Java, C#, Python, Perl, Ruby, etc.).
116*27162e4eSAndroid Build Coastguard WorkerA list of known source ports is maintained on the [LZ4 Homepage].
117*27162e4eSAndroid Build Coastguard Worker
118*27162e4eSAndroid Build Coastguard Worker[LZ4 Homepage]: http://www.lz4.org
119*27162e4eSAndroid Build Coastguard Worker
120*27162e4eSAndroid Build Coastguard Worker### Packaging status
121*27162e4eSAndroid Build Coastguard Worker
122*27162e4eSAndroid Build Coastguard WorkerMost distributions are bundled with a package manager
123*27162e4eSAndroid Build Coastguard Workerwhich allows easy installation of both the `liblz4` library
124*27162e4eSAndroid Build Coastguard Workerand the `lz4` command line interface.
125*27162e4eSAndroid Build Coastguard Worker
126*27162e4eSAndroid Build Coastguard Worker[![Packaging status](https://repology.org/badge/vertical-allrepos/lz4.svg)](https://repology.org/project/lz4/versions)
127*27162e4eSAndroid Build Coastguard Worker
128*27162e4eSAndroid Build Coastguard Worker
129*27162e4eSAndroid Build Coastguard Worker### Special Thanks
130*27162e4eSAndroid Build Coastguard Worker
131*27162e4eSAndroid Build Coastguard Worker- Takayuki Matsuoka, aka @t-mat, for exceptional first-class support throughout the lifetime of this project
132