Çok Çekirdekli Sıkıştırma araçları


61

Ubuntu'da çok çekirdekli bir işlemciden faydalanabilecek hangi sıkıştırma araçları bulunmaktadır.


Sadece kayıt için, paralel olarak bağımsız arşivler oluşturmak için bir alternatif olabilir. Böylece, myfiles.8core.xz oluşturmak yerine, myfiles1.xz dosyasını myfiles8.xz 'ye paralel olarak yaratırsınız. Bu bir satış acentesi gerektirecektir. Her iki yaklaşımın tamamlayıcı avantajları ve dezavantajları vardır.
Acumenus

2
Bzip2 kullanarak 7GB'lık bir dosyayı açmaya çalıştım, yalnızca 8 çekirdeğimin hepsini kullanmadığını öğrenmek için. Okumak ve pbzip2 denemeye karar verdi. Hala sadece bir çekirdekte çalışıyor. Sonra pbzip2'nin kendi sıkıştırdığı dosyaların sıkıştırmasını tamamen paralelleştirebileceğini söyleyen yorumları gördüm. Aynı yorumlar, lbzip2'nin gerçekte doğru olan herhangi bir bz2 dosyasına tamamen paralel hale gelebileceğini - tüm çekirdeğimin neredeyse tamamen kullanıldığını (CPU'nun% 80-90'ı) ve daha hızlı şekilde açıldığını öne sürdü.
Edi Bice

Yanıtlar:


34

İki ana araç var. lbzip2ve pbzip2. Temelde bzip2 kompresörlerin farklı uygulamalarıdır. Onları karşılaştırdım (çıktı düzenli bir sürümdür, ancak komutları çalıştırabilmelisiniz)

cd /dev/shm  # we do all of this in RAM!
dd if=/dev/urandom of=bigfile bs=1024 count=102400

$ lbzip2 -zk bigfile 
Time: 0m3.596s
Size: 105335428 

$ pbzip2 -zk bigfile
Time: 0m5.738s6
Size: 10532460

lbzip2rastgele verilerde kazanan görünüyor. Biraz daha az sıkıştırılmış fakat daha hızlıdır. YMMV.


5
pbzip2 Boyutu bir rakam eksik gibi görünüyor
Wayne Walker

4
/dev/urandomrastgele veriler tanım gereği sıkıştırılamaz olduğundan, kıyaslama sıkıştırma araçları için mükemmel bir seçim değildir. Bu kısmen her iki durumda da çıktı dosyasının girişden ~ 450MiB daha büyük olduğunu açıklar .
ali_m

1
Kusura bakma, gerçekten bilgiçlik açıyorum ama gerçekten rastgele veriler olabilir süper sıkıştırılabilir olması. 32 bit için mükemmel bir RNG isteyebilir ve alabilirsiniz 00000000000000000000000000000000. Bu şekilde rastgele işler;) Bahsettiğiniz şey pratik ortalamalar. Bu var olası sadece sıfırlar 100MB dosyası oluşturmak gerekir. Ve söylediklerinizin ruhuna katılıyorum, sadece "tanım gereği" ile aynı fikirde değilim, çünkü tanım bu değil (çünkü yanlış).
Oli

2
Farklı sıkıştırma yöntemlerinin performansını değerlendirirken, gerçekten ilgilendiğimiz şey, sıkıştırmak istediğimiz verilerin gelecekteki örnekleri için beklenen çıktı büyüklüğüdür. Bu veriler gerçekten rasgele ise dizileri için çok o zaman, sıkıştırma yararlanmak için hiçbir istatistiki düzenlilik içeren N biz hiç için umut olabilir en iyi beklenen bir çıkış uzunluğudur rastgele bayt N bayt. Bazı örnekler için biraz daha iyi yapabiliriz, bazıları için biraz daha kötü yapabiliriz (pratikte neredeyse her zaman daha kötüsünü yaparız), ancak beklenen çıktı uzunluğu aynı kalır.
ali_m

5
Kelimenin tam anlamıyla sıkıştırılamazlık olarak tanımlanan Kolmogorov anlamında "rastgele" demek istiyorum . Farklı algoritmalar farklı veri türleri için daha iyi çalıştığından sıkıştırma için evrensel bir ölçüt yoktur. İyi bir başlangıç, sadece bir metni metin haline getirmek, örneğin wget http://mattmahoney.net/dc/enwik8.zipWikipedia'dan 96 MB (21 MB sıkıştırılmış) metin almak olabilir. Daha kapsamlı bir kıyaslama paketi için buraya bakınız .
ali_m

72

Anahtar kelime paraleldi . Ayrıca paralel olan tüm sıkıştırma araçlarını aradıktan sonra şunu buldum:

PXZ - Paralel XZ, bir giriş dosyasının farklı bölümlerinin LZMA sıkıştırmasını aynı anda birden fazla çekirdek ve işlemcide çalıştırma avantajını kullanan bir sıkıştırma aracıdır. Birincil hedefi, sıkıştırma oranını minimum düzeyde etkileyerek sıkıştırma süresini hızlandırmak için tüm kaynakları kullanmaktır.

sudo apt-get install pxz

PLZIP - Lzip, çok güvenli bir bütünlük kontrolü ve gzip veya bzip2'den birine benzer bir kullanıcı arayüzü ile LZMA algoritmasına dayanan kayıpsız bir veri kompresörüdür. Lzip, gzip kadar hızlı bir şekilde açılır ve bzip2'den daha iyi sıkıştırır, bu da yazılım dağıtımı ve veri arşivlemesi için uygun olmasını sağlar.

Plzip, lzip dosya biçimini kullanan, büyük ölçüde paralel (çok iş parçacıklı) bir lzip sürümüdür; plzip tarafından üretilen dosyalar tamamen lzip ile uyumludur.

Plzip, büyük dosyaların çok işlemcili makinelerde daha hızlı sıkıştırılması / sıkıştırılması için tasarlanmıştır; bu, büyük yazılım dosyalarının dağıtımı ve büyük ölçekli veri arşivlemesi için özellikle uygun olmasını sağlar. Yeterince büyük dosyalarda, plzip yüzlerce işlemci kullanabilir.

sudo apt-get install plzip

GZip'in Paralel Uygulaması anlamına gelen PIGZ - pigz, veri sıkıştırırken çoklu işlemcilerden ve çoklu çekirdeklerden faydalanan gzip için tamamen işlevsel bir alternatiftir.

sudo apt-get install pigz

PBZIP2 - pbzip2, SMP makinelerinde pthreads kullanan ve doğrusalya yakın hızlanma sağlayan bzip2 blok sıralama dosya kompresörünün paralel bir uygulamasıdır. Bu sürümün çıktısı bzip2 v1.0.2 ile tamamen uyumludur (yani: pbzip2 ile sıkıştırılmış herhangi bir şey bzip2 ile açılabilir).

sudo apt-get install pbzip2

LRZIP - Büyük dosyalar ile kullanıldığında çok yüksek sıkıştırma oranları ve hızı sağlayabilen çok iş parçacıklı bir sıkıştırma programı. Maksimum sıkıştırma için zpaq ve lzma birleşik sıkıştırma algoritmaları, maksimum hız için lzo ve rzip'in uzun menzilli artıklık azaltması kullanılır. Sıkıştırmayı daha da artırarak RAM boyutuyla artışlarla ölçeklendirmek için tasarlanmıştır. Boyut veya hız optimizasyonlarından oluşan bir seçenek, ya lzma'nın sağlayabileceğinden daha iyi sıkıştırma sağlar ya da gzip'ten daha iyi hız sağlar, ancak bzip2 boyutlu sıkıştırma seviyeleri vardır.

sudo apt-get install lrzip

Küçük bir Sıkıştırma Benchmark (Oli testini kullanarak):

ORİJİNAL DOSYA BOYUTU - 100 MB
PBZIP2 - 101 MB (% 1 Daha Büyük)
PXZ - 101 MB (% 1 Daha Büyük)
PLZIP - 102 MB (% 1 Daha Büyük)
LRZIP - 101 MB (% 1 Daha Büyük)
PIGZ - 101 MB (% 1 Daha Büyük) )

Küçük bir Sıkıştırma Benchmark'ı (Bir Metin dosyası kullanarak):

ORİJİNAL DOSYA BOYUTU - 70 KB Metin Dosyası
PBZIP2 - 16,1 KB (% 23)
PXZ - 15,4 KB (% 22)
PLZIP - 15,5 KB (% 22,1)
LRZIP - 15,3 KB (% 21,8)
PIGZ - 17,4 KB (% 24,8)


Örnekler çok iyi olurdu.
earthmeLon

@earthmeLon Örnek dosyanın nasıl oluşturulduğundan bahseden Oli'nin cevabını okuyun. Sonra kullandığım komutlarla devam edin.
Luis Alvarado

Umarım bunların çıktısı birbiriyle uyumludur. örneğin, çıktı lrzipkullanılarak sıkıştırılmayabilir pbzip2.
Vineet Menon

10

Ayrıca güzel özeti yukarıdaki (teşekkürler Luis), bugünlerde millet de README (Kaynak var göre PIXZ, düşünebilirsiniz: https://github.com/vasi/pixz - Ben iddiaları kendim kontrol etmediniz ) PXZ'e göre bazı avantajlara sahiptir.

[Compared to PIXZ, PXZ has these advantages and disadvantages:]

    * Simpler code
    * Uses OpenMP instead of pthreads
    * Uses streams instead of blocks, not indexable
    * Uses temp files and doesn't combine them until the whole file is compressed, high disk/memory usage

Başka bir deyişle, PIXZ'nin daha fazla bellek ve disk verimli olduğu ve sıkıştırılmış tar dosyalarının bileşenlerinin ayrı ayrı sıkıştırılmasını hızlandıran isteğe bağlı bir indeksleme özelliği vardır.


Ancak benim anladığım kadarıyla pixzarşivler standart xzformatla uyumlu değil , pxzolur.
Mxx,

5
@ MX: Dosya formatları uyumludur. pixzsıkıştırmasını xzarşivleri ve xzsıkıştırmasını pixzarşivleri. Ancak, komut satırı seçenekleri açık xzve pixzfarklıdır.
Kartopu

Endekslenebilir dosyalar için büyük bir kazançtır pixz.
ostrokach

8

Güncelleme:

XZ Utils , v5.2.0'dan bu yana çok iş parçacıklı sıkıştırmayı destekliyor; yanlışlıkla çok iş parçacıklı dekompresyon olduğu kanıtlandı.

Örneğin: tar -cf - source | xz --threads=0 > destination.tar.xz


Ayrıca koşabilir export XZ_DEFAULTS="-T 0" ve ardından normal tar aramanızı kullanabilirsiniz tar cJf target.tar.xz source.
scai

4

lzop , tek iş parçacıklı olmasına rağmen uygulanabilir bir seçenek olabilir.

Benim gözlemimde gzip'ten 5-6 kat daha hızlı olan çok hızlı lempel-ziv-oberhumer sıkıştırma algoritmasını kullanıyor.

Not: Henüz çok parçacıklı olmasa da, 1-4 çekirdekli sistemlerde domuzdan daha iyi performans gösterecektir. Bu yüzden sorunuzu doğrudan cevaplamasa bile bunu göndermeye karar verdim. Deneyin, sadece bir CPU kullanırken ve biraz daha kötü sıkıştırarak CPU darboğaz probleminizi çözebilir. Pigz'den daha iyi bir çözüm olduğunu genellikle buldum.


Basınç düşürmede daha iyi değil mi? Sıkıştırma, gzip ile aynı (veya daha kötü) sürer
Lennart Rolland

Ayrıca, lzop'un süper hızlı olduğunu kanıtlayabilirim . Proxmox varsayılan olarak sanal makinelerin yedekleme için lzop kullanır.
Lonnie Best

1
lz4 daha hızlıdır (ve çok dişli bir versiyonuna sahiptir).
David Balažic


3

Bu gerçekten bir cevap değil, ancak gerçek yaşam senaryosunda gerçek bir hanenin hızını gzipve hızını karşılaştıran kıyaslamalarımı paylaşmanın yeterince alakalı olduğunu düşünüyorum pigz. Gibi pigzben şahsen bundan sonra kullanmayı seçtiniz parçacıklı evrimdir.

Meta veri:

  • Kullanılan donanım: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(4c / 8t) + Nvme SSD
  • GNU / Linux dağıtımı: Xubuntu 17.10 (artful)
  • gzip versiyon: 1.6
  • pigz versiyon: 2.4
  • Sıkıştırılmış dosya 9.25 GiB SQL dökümüdür.

gzip hızlı

time gzip -1kN ./db_dump.sql

real    1m22,271s
user    1m17,738s
sys     0m3,330s

gzip en iyi

time gzip -9kN ./db_dump.sql 

real    10m6,709s
user    10m2,710s
sys     0m3,828s

pigz hızlı

time pigz -1kMN ./db_dump.sql 

real    0m26,610s
user    1m55,389s
sys     0m6,175s

pigzen iyisi (hayır zopfli)

time pigz -9kMN ./db_dump.sql 

real    1m54,383s
user    14m30,435s
sys     0m5,562s

pigz+ zopflialgoritma

time pigz -11kMN ./db_dump.sql 

real    171m33,501s
user    1321m36,144s
sys     0m29,780s

Sonuç olarak, zopflialgoritmayı tavsiye etmem çünkü sıkıştırma o kadar önemli olmayan bir disk alanı için çok fazla zaman aldı.

Ortaya çıkan dosya boyutları:

  • en iyi s: 1309M
  • hızlı s: 1680M
  • zopfli : 1180M

2

Zstandard beri çoklu iş parçacığı destekler v1.2.0 ¹. Gzip'in yerini alması amaçlanan çok hızlı bir kompresör ve dekompresördür ve ayrıca en yüksek seviyelerinde LZMA2 / XZ olarak verimli - daha iyi değilse - de sıkıştırabilir.

Bu avantajları elde etmek için sanatsal veya daha yeni bir sürüm kullanmanız veya kaynaktaki en son sürümü derlemeniz gerekir. Neyse ki çok fazla bağımlılık çekmiyor.

  1. Ayrıca, zstd v1.1.0’ında 3. parti bir pzstd vardı.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.