· kaynak Hacker News – Front Page (native)
Açık kaynak sıkıştırıcısı bzip3, Perl derlem testinde bzip2 ve xz karşısında büyük oran zaferi iddia ediyor
bzip3, sonek dizilimli Burrows-Wheeler dönüşümünü bağlam karışımlı entropi kodlamasıyla birleştiriyor; yazarının 262 Perl sürümü üzerindeki testi, boyut konusunda bzip2, xz ve zstd'yi geride bırakıyor.
bzip3 nedir
GitHub deposu üzerinden Hacker News ana sayfasında öne çıkan açık kaynak dosya sıkıştırıcısı bzip3, kendisini bzip2'nin çağdaş halefi olarak konumlandırıyor. Selefi gibi metin ve kaynak kodu üzerinde en güçlüsü, ancak projenin README'sine göre eski iç yapısını üç yeni yapı taşıyla değiştiriyor: sıra-0 bağlam karışımlı entropi kodlayıcı, sonek dizilimleriyle (suffix array) gerçekleştirilen bir Burrows-Wheeler dönüşümü ve LZ77 tarzı dizgi eşleştirmesini PPM tarzı bağlam modellemesiyle harmanlayan, uzunluk-kodlama aşamasıyla birleştirilmiş bir Lempel-Ziv+Prediction geçişi.
Runtime kodunun telif hakkı Kamila Szewczyk'ya ait ve proje yalnızca LGPLv3 altında lisanslandığını, çift lisans bulunmadığını belirtiyor. Sonek dizilimi motoru Ilya Grebnov'un Apache 2.0 lisanslı libsais kütüphanesinden geliyor ve Burrows-Wheeler çıktısı için post-coder, Ilya Muravyov'un kamuya mal olmuş uygulamasından türetilmiş. Standart bir autotools zinciriyle derleniyor ve macOS'ta Homebrew üzerinden de edinilebilir.
Test sayıları
Deponun en gözde testi, yazarın CPAN'daki her Perl 5 sürümünü indirerek — 262 tar dosyası — tek bir arşivde toplayıp çeşitli araçlarla sıkıştırmasıyla oluşturduğu derlem:
- 16 iş parçacığıyla 9. seviyede xz (LZMA): 2.056.645.240 bayt
- seviyede bzip2: 3.441.163.911 bayt
- 256 blok ayarıyla bzip3: 1.001.957.587 bayt
- 511 blok ayarıyla bzip3: 546.456.978 bayt
- 12 iş parçacığıyla 16. seviyede zstd: 3.076.143.966 bayt
Dolayısıyla en büyük bzip3 yapılandırması xz'in çıktısının kabaca dörtte biri ve bzip2'nin yaklaşık altıda biri kadar üretti. Gerçek süre olarak sıkıştırma her iki bzip3 çalışması için de yaklaşık yedi dakika sürdü; 12 dakikayla xz ve 17 dakikayla bzip2'den hızlıydı, zstd'nin 6,5 dakikasına yakındı. Sabit diske açma işleminde paralel kipteki bzip3 4:06 sürdü ve 4:40'lık xz'in önünde, 3:51'lik zstd'nin ise hafif gerisinde kaldı; bzip2 ise 9:22'ye ihtiyaç duydu.
İkinci bir test önce arşivi uzun menzilli tekilleştirme için lrzip'ten geçirdi. Bu zincir bzip3 ile 60.672.608 bayta, LZMA'lı lrzip ile 64.774.202 bayta ve bzip2'li lrzip ile 75.685.065 bayta ulaştı.
İki uyarı vurgulanmayı hak ediyor. Aynı kod tabanının art arda gelen yüzlerce sürümünden oluşan bir derlem alışılmadık ölçüde yedeklidir ve bu, geniş bir pencere boyunca benzerlikleri modelleyebilen sıkıştırıcıları kayırır. Ayrıca rakamlar bağımsız bir değerlendirme değil yazarın kendisine ait; yine de README, okuyucuları bzip3, bzip2, bsc ve diğerlerini kapsayan powturbo'nun üçüncü taraf bir testine yönlendiriyor.
Pratik ödünleşimler
Oran kazançları bir bellek maliyeti getiriyor. Yukarıdaki çalışmalarda 511 bloklu yapılandırma yaklaşık 12 GB, 256 bloklu çalışma yaklaşık 18 GB tepe bellek bildirirken zstd 687 MB kullandı. Verim de büyük ölçüde derlemeye bağlı: proje, x86-64 Linux üzerinde clang 13 derlemeleri için iş parçacığı başına kabaca 17 MiB/s sıkıştırma ve 23 MiB/s açma hızına kadar ulaşıldığını, Windows ve 32-bit hedeflerde daha yavaş sonuçlar beklendiğini belirtiyor. Testler x86-64, aarch64, ppc64le, mips, sparc ve s390x dahil on mimariyi kapsadı.
README ayrıca alışılmadık derecede sert bir uyarı taşıyor. Yazar, algoritmaların karmaşıklığı ve koddaki nadir özel durumlar göz önüne alındığında kalan hataların olasılığı dışlanamaz diyor ve kullanıcılar, verilerin kurtarılamama ihtimalinin küçük olduğunu kabul etmeye hazırlıklı olmadıkça veri sıkıştırmamalı. Aynı bölüm bzip3'ün ve kütüphanesinin özenle inşa edildiğini ve kapsamlı biçimde test edildiğini vurguluyor.
Neden önemli
bzip2 onlarca yıldır Unix boru hatlarının ve arşiv biçimlerinin değişmez bir parçasıydı ve yaşlandığını gösteriyor: yavaş, tek iş parçacıklı ve modern standartlara göre zayıf. bzip3, Burrows-Wheeler soyunu sonek dizilimleri, bağlam karışımı ve paralel işleme etrafında yeniden inşa edarak güncel tutma girişimi ve bu kanıta göre xz'i bile boyut konusunda rekabetçi hızlarda geçecek kadar büyük iyileştirmeler sunuyor. Kaynak ağaçları, günlükler ya da dokümantasyon gibi metin ağırlıklı materyal arşivleyen geliştiriciler için bu birleşim, — gigabaytlarca bellek ayak izine, projenin görece gençliğine ve öne çıkan sayıların bizzat yazarından geldiğine gözü açık bakarak — test etmeye değer.
- #compression
- #open-source
- #command-line
- #benchmarks
- #algorithms