Alat kompresi apa yang tersedia di Ubuntu yang dapat memanfaatkan CPU multi-core.
compression
multi-core
Luis Alvarado
sumber
sumber
Jawaban:
Ada dua alat utama.
lbzip2
danpbzip2
. Mereka pada dasarnya implementasi yang berbeda dari kompresor bzip2. Saya telah membandingkan mereka (outputnya adalah versi yang sudah dirapikan tetapi Anda harus dapat menjalankan perintah)lbzip2
tampaknya menjadi pemenang pada data acak. Ini sedikit kurang terkompresi tetapi jauh lebih cepat. YMMV.sumber
/dev/urandom
bukanlah pilihan input untuk alat kompresi benchmarking, karena data acak, menurut definisi, tidak dapat dimampatkan. Itu sebagian menjelaskan mengapa dalam kedua kasus file output ~ 450MiB lebih besar dari input.00000000000000000000000000000000
. Begitulah cara kerja acak;) Yang Anda bicarakan adalah rata-rata praktis. Tidak mungkin Anda akan menghasilkan file 100MB hanya nol. Dan saya setuju dengan semangat apa yang Anda katakan, saya hanya tidak setuju dengan "oleh definisi" karena itu bukan definisi (karena itu tidak akurat).wget http://mattmahoney.net/dc/enwik8.zip
untuk mengambil 96MB (terkompresi 21MB) teks dari Wikipedia. Untuk serangkaian tolok ukur yang jauh lebih komprehensif, lihat di sini .Yah, kata kunci itu paralel . Setelah mencari semua alat kompresi yang juga paralel, saya menemukan yang berikut:
PXZ - Parallel XZ adalah utilitas kompresi yang mengambil keuntungan dari menjalankan kompresi LZMA dari berbagai bagian file input pada banyak core dan prosesor secara bersamaan. Tujuan utamanya adalah untuk memanfaatkan semua sumber daya untuk mempercepat waktu kompresi dengan pengaruh minimal yang mungkin pada rasio kompresi.
sudo apt-get install pxz
PLZIP - Lzip adalah kompresor data lossless berdasarkan pada algoritma LZMA, dengan pemeriksaan integritas yang sangat aman dan antarmuka pengguna yang mirip dengan salah satu dari gzip atau bzip2. Lzip mendekompresi hampir secepat gzip dan kompres lebih baik daripada bzip2, yang membuatnya cocok untuk distribusi perangkat lunak dan pengarsipan data.
Plzip adalah versi paralel besar (multi-threaded) dari lzip menggunakan format file lzip; file yang dihasilkan oleh plzip sepenuhnya kompatibel dengan lzip.
Plzip dimaksudkan untuk kompresi / dekompresi file besar yang lebih cepat pada mesin multiprosesor, yang membuatnya sangat cocok untuk distribusi file perangkat lunak besar dan pengarsipan data skala besar. Pada file yang cukup besar, plzip dapat menggunakan ratusan prosesor.
sudo apt-get install plzip
PIGZ - pigz, yang merupakan singkatan dari Implementasi Paralel GZip, adalah pengganti yang berfungsi penuh untuk gzip yang mengambil keuntungan dari banyak prosesor dan banyak inti saat mengompresi data.
sudo apt-get install pigz
PBZIP2 - pbzip2 adalah implementasi paralel dari kompresor blok-sortir file bzip2 yang menggunakan pthreads dan mencapai speedup dekat-linear pada mesin SMP. Output dari versi ini sepenuhnya kompatibel dengan bzip2 v1.0.2 (yaitu: apa pun yang dikompresi dengan pbzip2 dapat didekompresi dengan bzip2).
sudo apt-get install pbzip2
LRZIP - Program kompresi multithreaded yang dapat mencapai rasio dan kecepatan kompresi yang sangat tinggi saat digunakan dengan file besar. Ini menggunakan algoritma kompresi gabungan zpaq dan lzma untuk kompresi maksimum, lzo untuk kecepatan maksimum, dan redundansi jarak jauh pengurangan rzip. Ini dirancang untuk meningkatkan skala dengan peningkatan ukuran RAM, meningkatkan kompresi lebih lanjut. Pilihan optimasi ukuran atau kecepatan memungkinkan kompresi yang lebih baik daripada yang bisa disediakan oleh lzma, atau kecepatan yang lebih baik daripada gzip, tetapi dengan level kompresi berukuran bzip2.
sudo apt-get install lrzip
Benchmark Kompresi kecil (Menggunakan tes yang dibuat Oli):
UKURAN FILE ASLI - 100 MB
PBZIP2 - 101 MB (1% Lebih Besar)
PXZ - 101 MB (1% Lebih Besar)
PLZIP - 102 MB (1% Lebih Besar)
LRZIP - 101 MB (1% Lebih Besar)
PIGZ - 101 MB (1% Lebih Besar) )
Benchmark Kompresi kecil (Menggunakan file Teks):
UKURAN FILE ASLI - 70 KB File Teks
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%)
sumber
lrzip
dapat dikompresi menggunakanpbzip2
, misalnya.Selain ringkasan yang bagus di atas (terima kasih Luis), orang-orang hari ini mungkin juga ingin mempertimbangkan PIXZ, yang menurutnya README (Sumber: https://github.com/vasi/pixz - Saya belum memverifikasi klaim sendiri ) memiliki beberapa keunggulan dibandingkan PXZ.
Dengan kata lain, PIXZ seharusnya lebih banyak memori dan disk efisien, dan memiliki fitur pengindeksan opsional yang mempercepat dekompresi masing-masing komponen file tar terkompresi.
sumber
pixz
arsip tidak kompatibel denganxz
format standarpxz
.pixz
dapat mendekompresixz
arsip danxz
dapat mendekompresipixz
arsip. Namun, opsi baris perintah aktifxz
danpixz
berbeda.pixz
.Memperbarui:
XZ Utils mendukung kompresi multi-berulir sejak v5.2.0, awalnya didokumentasikan secara salah sebagai dekompresi multi-berulir.
Sebagai contoh:
tar -cf - source | xz --threads=0 > destination.tar.xz
sumber
export XZ_DEFAULTS="-T 0"
dan kemudian hanya menggunakan panggilan tar biasa, yaitutar cJf target.tar.xz source
.lzop juga bisa menjadi opsi yang layak, meskipun ini single-threaded.
Ini menggunakan algoritma kompresi lempel-ziv-oberhumer yang sangat cepat yang 5-6 kali lebih cepat daripada gzip dalam pengamatan saya.
Catatan: Meskipun belum multi-threaded, itu mungkin akan mengungguli pigz pada 1-4 sistem inti. Itu sebabnya saya memutuskan untuk memposting ini bahkan jika itu tidak langsung menjawab pertanyaan Anda. Cobalah, ini dapat memecahkan masalah kemacetan CPU Anda saat menggunakan hanya satu CPU dan mengompresi sedikit lebih buruk. Saya menemukan itu sering menjadi solusi yang lebih baik daripada, misalnya pigz.
sumber
Kompresor LZMA2 dari p7zip menggunakan kedua core pada sistem saya.
sumber
Ini sebenarnya bukan jawaban, tapi saya pikir itu cukup relevan untuk berbagi tolok ukur saya membandingkan kecepatan
gzip
danpigz
pada HW nyata dalam skenario kehidupan nyata. Sepertipigz
evolusi multithreaded saya pribadi telah memilih untuk digunakan mulai sekarang.Metadata:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + Nvme SSDXubuntu 17.10 (artful)
gzip
versi:1.6
pigz
versi:2.4
gzip
cepatgzip
terbaikpigz
cepatpigz
terbaik (tidakzopfli
)pigz
+zopfli
algoritmaSebagai bottomline saya tidak akan merekomendasikan
zopfli
algoritma karena kompresi membutuhkan banyak waktu untuk jumlah ruang disk yang tidak terlalu signifikan.Ukuran file yang dihasilkan:
sumber
Zstandard mendukung multi-threading sejak v1.2.0 ¹. Ini adalah kompresor dan dekompresor yang sangat cepat yang dimaksudkan untuk mengganti gzip dan juga dapat mengompres dengan efisien - jika tidak lebih baik - seperti LZMA2 / XZ pada level tertinggi.
Anda harus menggunakan artful atau rilis yang lebih baru, atau kompilasi versi terbaru dari sumber untuk mendapatkan manfaat ini. Untungnya itu tidak menarik banyak ketergantungan.
sumber