Ubuntu'da çok çekirdekli bir işlemciden faydalanabilecek hangi sıkıştırma araçları bulunmaktadır.
Ubuntu'da çok çekirdekli bir işlemciden faydalanabilecek hangi sıkıştırma araçları bulunmaktadır.
Yanıtlar:
İki ana araç var. lbzip2
ve 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
lbzip2
rastgele verilerde kazanan görünüyor. Biraz daha az sıkıştırılmış fakat daha hızlıdır. YMMV.
/dev/urandom
rastgele 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 .
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ış).
wget http://mattmahoney.net/dc/enwik8.zip
Wikipedia'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 .
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)
lrzip
kullanılarak sıkıştırılmayabilir pbzip2
.
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.
pixz
arşivler standart xz
formatla uyumlu değil , pxz
olur.
pixz
sıkıştırmasını xz
arşivleri ve xz
sıkıştırmasını pixz
arşivleri. Ancak, komut satırı seçenekleri açık xz
ve pixz
farklıdır.
pixz
.
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
export XZ_DEFAULTS="-T 0"
ve ardından normal tar aramanızı kullanabilirsiniz tar cJf target.tar.xz source
.
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.
P7zip'in LZMA2 kompresörü sistemimde her iki çekirdeği kullanıyor.
Bu gerçekten bir cevap değil, ancak gerçek yaşam senaryosunda gerçek bir hanenin hızını gzip
ve hızını karşılaştıran kıyaslamalarımı paylaşmanın yeterince alakalı olduğunu düşünüyorum pigz
. Gibi pigz
ben şahsen bundan sonra kullanmayı seçtiniz parçacıklı evrimdir.
Meta veri:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + Nvme SSDXubuntu 17.10 (artful)
gzip
versiyon: 1.6
pigz
versiyon: 2.4
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
pigz
en iyisi (hayır zopfli
)
time pigz -9kMN ./db_dump.sql
real 1m54,383s
user 14m30,435s
sys 0m5,562s
pigz
+ zopfli
algoritma
time pigz -11kMN ./db_dump.sql
real 171m33,501s
user 1321m36,144s
sys 0m29,780s
Sonuç olarak, zopfli
algoritmayı tavsiye etmem çünkü sıkıştırma o kadar önemli olmayan bir disk alanı için çok fazla zaman aldı.
Ortaya çıkan dosya boyutları:
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.