Alat kompresi apa yang tersedia di Ubuntu yang dapat memanfaatkan CPU multi-core.
Alat kompresi apa yang tersedia di Ubuntu yang dapat memanfaatkan CPU multi-core.
Jawaban:
Ada dua alat utama. lbzip2
dan pbzip2
. 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)
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
tampaknya menjadi pemenang pada data acak. Ini sedikit kurang terkompresi tetapi jauh lebih cepat. YMMV.
/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%)
lrzip
dapat dikompresi menggunakan pbzip2
, 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.
[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
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.
pixz
arsip tidak kompatibel dengan xz
format standar pxz
.
pixz
dapat mendekompresi xz
arsip dan xz
dapat mendekompresi pixz
arsip. Namun, opsi baris perintah aktif xz
dan pixz
berbeda.
pixz
.
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
export XZ_DEFAULTS="-T 0"
dan kemudian hanya menggunakan panggilan tar biasa, yaitu tar 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.
Kompresor LZMA2 dari p7zip menggunakan kedua core pada sistem saya.
Ini sebenarnya bukan jawaban, tapi saya pikir itu cukup relevan untuk berbagi tolok ukur saya membandingkan kecepatan gzip
dan pigz
pada HW nyata dalam skenario kehidupan nyata. Seperti pigz
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
cepat
time gzip -1kN ./db_dump.sql
real 1m22,271s
user 1m17,738s
sys 0m3,330s
gzip
terbaik
time gzip -9kN ./db_dump.sql
real 10m6,709s
user 10m2,710s
sys 0m3,828s
pigz
cepat
time pigz -1kMN ./db_dump.sql
real 0m26,610s
user 1m55,389s
sys 0m6,175s
pigz
terbaik (tidak 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
Sebagai bottomline saya tidak akan merekomendasikan zopfli
algoritma karena kompresi membutuhkan banyak waktu untuk jumlah ruang disk yang tidak terlalu signifikan.
Ukuran file yang dihasilkan:
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.