Serbest Yazılar

20 Şubat 2016

LZ4 ve diğer popüler algoritmalar ile sıkıştırma testleri

Egzersiz amacıyla Java'da ufak bir uygulama yazma niyetim vardı. Sıkıştırma algoritmalarına bakıyordum. İş arkadaşım Emre GILBAZ'ın yıllar önce kullandığı Lempel-Ziv-Oberhumer (LZO) metodunu hatırladım. Bir değişiklik var mı diye araştırdığımda, bu algoritmanın LZ4 adında iyileştirilmiş bir hâlini buldum. Bu arada bahsetmeden geçmeyelim, LZ4 algoritmasını Yann Collet geliştirmiş. Kendisi Facebook'ta veri sıkıştırma uzmanı olarak çalışıyor.

Emre'nin yaptığı testlerde, LZO güzel sonuçlar vermişti. LZ4'ün performansı anlamak içinse popüler sıkıştırma metodlarıyla karşılaştırmaya karar verdim. Testler esnasında her sıkıştırma metodunun 'default' sıkıştırma seviyesiyle çalıştım. Elde ettiğim sonuçları aşağıda bulabilirsiniz. Çıkan sonuçlara göre LZ4 çok ciddi zaman kazandırıyor. Disk kullanımı ise diğerlerine nazaran bir miktar fazla. Kazandığımız zamanı düşününce, bu fazla kullanımın rahatlıkla ihmâl edilebileceğine inanıyorum. Kaldı ki, LZ4 algoritmasında işlemci kullanımı çok daha düşük seyrediyor. RAR ve 7zip ise, iyi sıkıştırmakla birlikte hâyli yüksek işlemci kullanıyor.

Öncelikle sıkıştırma yapacağımız dosyaların boyutuna bakıyoruz. Toplam 6.4GB'lık bir veri setimiz var. Bu klasör içinde düz metin (text) dosyaları olduğu gibi, resim, PDF vb. dosyalar da var. Bu yüzden çok büyük sıkıştırma oranları elde etmek güç.

$:/home/user/DataFolder$ du -hs
6,4G
		

Artık sırayla sıkıştırma yöntemlerini sınayabiliriz:

# SIKISTIRMA TESTLERI

# LZ4
$ tar cf - /home/user/DataFolder | lz4 -z -1 - DataFolder.tar.lz4
real	1m7.508s
user	0m8.424s
sys     0m11.484s

# LZOP
$ tar --lzop -cf DataFolder.tar.lzop /home/user/DataFolder
real    1m5.294s
user    0m8.384s
sys     0m10.928s

# GZIP
$ tar cf - /home/user/DataFolder | gzip -c -6 > DataFolder.tar.gz
real    4m8.277s
user    3m52.992s
sys     0m11.844s

# RAR
$ rar a -ol -m3 -Idp -- DataFolder.rar /home/user/DataFolder
real    7m57.601s
user    17m40.616s
sys     0m26.340s

# 7Zip
$ tar cf - /home/user/DataFolder | 7za a -si  DataFolder.tar.7z
real    18m14.112s
user    33m10.176s
sys     0m22.700s

# ZIP
$ zip -r DataFolder.zip /home/user/DataFolder
real    4m25.172s
user    3m54.240s
sys     0m6.120s
		

Sıkıştırılmış dosya boyutlarını kontrol ediyoruz:

$ ls -ltrh
total 30G
-rw-rw-r-- 1 user group 5,2G Şub 20 22:32 DataFolder.tar.lz4
-rw-rw-r-- 1 user group 5,1G Şub 20 22:37 DataFolder.tar.gz
-rw-rw-r-- 1 user group 4,8G Şub 20 22:48 DataFolder.rar
-rw-rw-r-- 1 user group 5,1G Şub 20 23:14 DataFolder.zip
-rw-rw-r-- 1 user group 5,4G Şub 20 23:22 DataFolder.tar.lzop
-rw-rw-r-- 1 user group 4,5G Şub 20 23:49 DataFolder.tar.7z	
	

Sıkıştırılmış dosyaları, geri açıyoruz:

# GERI ACMA TESTLERI

# LZ4
$ time lz4 -d DataFolder.tar.lz4
real    1m9.165s
user    0m5.080s
sys     0m6.012s

# LZOP
$ time tar --lzop -xf DataFolder.tar.lzop
real    1m12.269s
user    0m8.056s
sys     0m13.620s

# GZIP
$ time gunzip DataFolder.tar.gz
real    1m46.118s
user    0m48.676s
sys     0m4.896s

# RAR
$ time rar e -r DataFolder.rar 
real    2m23.604s
user    1m21.900s
sys     0m9.816s

# 7Zip
$ time 7z e DataFolder.tar.7z 
real    6m37.784s
user    6m11.076s
sys     0m5.596s

# ZIP
$ time unzip DataFolder.zip
real    1m46.163s
user    0m51.780s
sys     0m5.640s
	

Şimdi de testlerimizin sonuçlarını bir tablo üzerinde toplayalım:

SIKIŞTIRMA TESTLERİNE AİT SONUÇLAR
Algoritma Dosya Boyutu (GB) Sıkıştırılmış Boyut (GB) Azalma Yüzdesi Sıkıştırma Süresi (sn.) Geri Açma Süresi (sn.)
LZ4 6.4 5.2 %18.52 67.8 69.2
LZOP 5.4 %15.63 65.2 72.3
GZIP 5.1 %20.31 248.2 106.1
RAR 4.8 %25 477.6 143.6
7Zip 4.5 %29.69 1094.1 397.7
ZIP 5.1 %20.31 265.1 106.1


Yaptığım örnekler dışında birçok karşılaştırma sonucuna, İnternet'te rastlamak mümkün. Sonuçların genellikle LZ4'ün lehine çıktığını siz de göreceksiniz. Ürünle ilgili daha fazla detay ve benchmark için LZ4 proje sitesini ziyaret edebilirsiniz.


Çağatay ÇEBİ