Quick Benchmark: Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZO
EDIT: Add zstd
Contents
[hide]
1 Selected archives2 Test conditions3 The file test results
3.1 Compressed file size in bytes3.2 Compression ratio3.3 Compression time3.4 Decompression time3.5 Memory requirements on compression3.6 Memory requirements on decompression4 Stream test
4.1 Time to compress4.2 Time to decompress4.3 Memory used4.4 Compression ratio
4.4.1 With the benchmark application5 Graphics6 Quick benchmark on ARM64
Selected archives
I have selected:
Source of the kernel to test source compressionStream protocol with flush
Test conditions
Tests were run on a desktop:
Intel Core i5 CPU 750 at 2.67GHz8GB of DDR3 memorytmpfs as ram disk is usedLinux kernel 3.3.2, gentoo amd64CFLAGS: -pipe -O2 -g -floop-block -floop-interchange -fgraphitebzip2-1.0.6-r3, xz-utils-5.0.3, gzip-1.4
Only normal mode will be tested firstly.
The file test results
Note: The first column with numbers 1..9 indicates the compression setting passed to gzip, bzip2 and lzmash (e.g. "gzip -9").
Tarball mode from linux-3.3, original size: 466083840 (445M)
Compressed file size in bytes
gzipbzip2lzmalzma -exzxz -elz4lzop gzipbzip2lzmalzma -exzxz -elz4lzop1124875819 (120M)93997047 (90M)85618192 (82M)72042179 (69M)85630688 (82M)72069084 (69M)165844264 (159M)168012430 (161M)2119040249 (114M)87741348 (84M)81480824 (78M)70264395 (68M)81492504 (78M)70282944 (68M)165844264 (159M)166987891 (160M)3114931686 (110M)84816957 (81MB)79575087 (76MB)69015118 (66MB)79586568 (76MB)69029204 (66MB)165844264 (159M)166987891 (160M)5102328357 (98M)81837328 (79M)69557610 (67M)67879362 (65M)69583428 (67M)67875988 (65M)-166987891 (160M)7100128597 (96M)80197758 (77M)67276420 (65M)66868212 (64M)67294092 (65M)66852780 (64M)-116205578 (111M)999740486 (96M)78963640 (76M)65841213 (63M)65362226 (63M)65859432 (63M)65372696 (63M)-114824102 (110M)
Compression ratio
gzipbzip2lzmalzma -exzxz -elz4lzop gzipbzip2lzmalzma -exzxz -elz4lzop126.8%20.2%18.4%15.5%18.4%15.5%35.6%36.0%225.5%18.8%17.5%15.1%17.5%15.1%35.6%35.8%324.7%18.2%17.1%14.8%17.1%14.8%35.6%35.8%522.0%17.6%14.9%14.6%14.9%14.6%-35.8%721.5%17.2%14.4%14.3%14.4%14.3%-24.9%921.4%16.9%14.1%14.0%14.1%14.0%-24.6%
Compression time
gzipbzip2lzmalzma -exzxz -elz4lzop gzipbzip2lzmalzma -exzxz -elz4lzop18.1s58.3s31.7s4m37s32.2s4m40s1.3s1.6s28.5s58.4s40.7s4m49s41.9s4m53s1.4s1.6s39.6s59.1s1m2s4m36s1m1s4m39s1.3s1.5s514s1m1s3m5s5m3m6s4m53s-1.5s721s1m2s4m14s5m52s4m13s5m57s-35s933s1m3s4m48s6m40s4m51s6m40s-1m5s
gzip -1 vs lz4 -1 on x86: lz4 6.2x more fastgzip -1 vs lz4 -1 on ARM: lz4 3.6x more fast
Decompression time
gzipbzip2lzmalzma -exzxz -elz4lzop gzipbzip2lzmalzma -exzxz -elz4lzop13.5s3.4s6.7s5.9s7.2s6.5s0.4s1.5s23s15.76.3s5.6s6.8s6.3s0.3s1.4s33.2s15.9s6s5.6s6.7s6.2s0.4s1.4s53.2s16s5.5s5.4s6.2s6s-1.5s73s15s5.3s5.3s5.9s5.8s-1.3s93s15s5s5.1s5.6s5.6s-1.2s
Memory requirements on compression
gzipbzip2lzmalzma -exzxz -elz4lzop gzipbzip2lzmalzma -exzxz -elz4lzop10.4MB1.1MB8.3MB12.6MB8.3MB12.5MB12MB0.7MB20.4MB1.9MB15.8MB24MB15.8MB24MB12MB0.7MB30.4MB2.7MB30.7MB46.9MB30.8MB47M13.2MB0.7MB50.4MB4.2MB93MB93MB93MB93MB-0.7MB70.4MB5.7MB185MB185MB185MB185MB-0.9MB90.4MB7.2MB672MB673MB673MB673MB-0.9MB
Note: lz4 it's the program using this size, the code for internal lz4 use very less memory
Memory requirements on decompression
gzipbzip2lzmalzma -exzxz -elz4lzop gzipbzip2lzmalzma -exzxz -elz4lzop10.1MB0.3MB1MB1MB1MB1MB13MB0.2MB20.1MB0.9MB2.1MB2.1MB2.1MB2.1MB12MB0.2MB30.1MB1.1MB4.1MB4.1MB4.0MB4.0MB13MB0.2MB50.1MB1.9MB8.1MB8.1MB8.1MB8.1MB-0.2MB70.1MB2.6MB16MB16MB16MB16MB-0.2MB90.1MB3.4MB64MB64MB64MB64MB-0.2MB
Note: lz4 it's the program using this size, the code for internal lz4 use very less memory
Cli used for -1 compression:
time gzip -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;time gunzip linux-3.3.tar*time bzip2 -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;time bunzip2 linux-3.3.tar.bz2time lzma -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unlzma linux-3.3.tar*time lzma -e -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unlzma linux-3.3.tar*time xz -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unxz linux-3.3.tar*time xz -e -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unxz linux-3.3.tar*time /home/user/lz4-read-only/lz4demo64 -c0 linux-3.3.tar linux-3.3.tar.lz4;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time /home/user/lz4-read-only/lz4demo64 -d linux-3.3.tar.lz4 linux-3.3.tar;rm linux-3.3.tar.*time lzop -1 linux-3.3.tar;rm linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time lzop -d linux-3.3.tar*;rm linux-3.3.tar.*
Stream test
Time to compress
gzipzliblz4lz4hcnone gzipzliblz4lz4hcnone1376368130311102371391 3378362 5390392 7389387 9393384
Time to decompress
gzipzliblz4lz4hcnone gzipzliblz4lz4hcnone1179717788097969218411831 317711780 518061960 718611851 918351806
Messured with:
timespec tstart,tstop;
clock_gettime(CLOCK_REALTIME, &tstart);
//compression/decompression
clock_gettime(CLOCK_REALTIME, &tstop);
compressionTime+=((quint64)tstop.tv_sec * 1000000LL + (quint64)tstop.tv_nsec / 1000LL)-((quint64)tstart.tv_sec * 1000000LL + (quint64)tstart.tv_nsec / 1000LL);
Memory used
gzipzliblz4lz4hcnonegzipzliblz4lz4hcnone0.5MB0.5MB0MB0MB0MB
The socket is always used as full duplex, then it's compression + decompression memory.
Compression ratio
It's transferred size/raw size (lower is better)
With the benchmark application
Uploaded at: https://github.com/alphaonex86/debug-devel/tree/master/QTcpCompressionBenchmark
gzipzliblz4lz4hcnonegzipzliblz4lz4hcnone0.990.971.591.591
The most over-head of small packet (3Bytes) is drop by high compression with zlib/gzip for the big packet.
Graphics
Quick benchmark on ARM64
A quick benchmark on ARM64 (odroid, Cortex A53), on kernel Image (12MB), use default compression level (-6) because no way to configure the compression level of btrfs
The speed is on compressed stream, mean the hdd.
xzgziplz4zstdSize4.2M5.5M7.8M5.8MCompression speed0.2 MB/s1.8 MB/s21.4 MB/s2.8 MB/sDecompression speed4.8 MB/s13.6 MB/s48.4 MB/s19.1 MB/s