Які засоби стиснення доступні в Ubuntu, які можуть отримати користь від багатоядерного процесора.
Які засоби стиснення доступні в Ubuntu, які можуть отримати користь від багатоядерного процесора.
Відповіді:
Є два основних інструменти. lbzip2
і pbzip2
. Вони по суті відрізняються реалізацією компресорів bzip2. Я порівнював їх (вихід - примірний варіант, але ви повинні мати можливість запускати команди)
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
виявляється переможцем у випадкових даних. Це трохи менше стискається, але набагато швидше. YMMV.
/dev/urandom
не є великим вибором даних для інструментів стиснення бенчмаркінгу, оскільки випадкові дані, за визначенням, не стискаються. Це частково пояснює, чому в обох випадках вихідний файл ~ 450MiB більший за вхідний.
00000000000000000000000000000000
. Ось так працює випадково;) Те, про що ви говорите, - це практичні середні показники. Навряд чи ви генеруєте 100 МБ файл просто нулів. І я згоден з духом того, що ви говорите, я просто не згоден з "за визначенням", тому що це не визначення (тому що це неточне).
wget http://mattmahoney.net/dc/enwik8.zip
схопити 96 МБ (стиснутого 21 МБ) тексту з Вікіпедії. Більш детальний набір орієнтирів дивіться тут .
Ну, ключове слово було паралельне . Після пошуку всіх інструментів стиснення, які також були паралельними, я виявив наступне:
PXZ - Паралельний XZ - це утиліта стиснення, яка використовує перевагу виконання компресії LZMA різних частин вхідного файлу на декількох ядрах і процесорах одночасно. Основна його мета - використовувати всі ресурси для прискорення часу стиснення з мінімальним можливим впливом на коефіцієнт стиснення.
sudo apt-get install pxz
PLZIP - Lzip - компресор даних без втрат на основі алгоритму LZMA, що забезпечує дуже безпечну перевірку цілісності та інтерфейс користувача, подібний до gzip або bzip2. Lzip декомпресується майже так само швидко, як gzip і стискає краще, ніж bzip2, що робить його добре придатним для розповсюдження програмного забезпечення та архівування даних.
Plzip - це масово паралельна (багатопотокова) версія lzip з використанням формату файлу lzip; файли, створені plzip, повністю сумісні з lzip.
Plzip призначений для швидшого стиснення / декомпресії великих файлів на багатопроцесорних машинах, що робить його особливо придатним для розповсюдження великих програмних файлів та великого масштабування архівів даних. У файлах, достатньо великих, plzip може використовувати сотні процесорів.
sudo apt-get install plzip
PIGZ - pigz, який розшифровується як паралельне впровадження GZip, є повністю функціональною заміною gzip, яка використовує переваги декількох процесорів і декількох ядер при стисненні даних.
sudo apt-get install pigz
PBZIP2 - pbzip2 - це паралельна реалізація компресора файлів сортування файлів bzip2, яка використовує pthreads і досягає майже лінійного прискорення на машинах SMP. Вихід цієї версії повністю сумісний з bzip2 v1.0.2 (тобто: все, що стискається з pbzip2, може бути декомпресоване bzip2).
sudo apt-get install pbzip2
LRZIP - багатопотокова програма стиснення, яка може досягти дуже високих коефіцієнтів стиснення та швидкості при використанні з великими файлами. Він використовує комбіновані алгоритми стиснення zpaq та lzma для максимальної компресії, lzo для максимальної швидкості та зменшення надмірності надмірності дальнього відстані rzip. Він призначений для збільшення масштабів із збільшенням розміру оперативної пам’яті, в подальшому покращуючи стиснення. Вибір оптимізації розміру або швидкості дозволяє отримати кращу компресію, ніж навіть lzma, або швидкість, ніж gzip, але з рівнями стиснення розміром bzip2.
sudo apt-get install lrzip
Невеликий показник стиснення (використовуючи створений тест Oli):
Оригінальний розмір файлу - 100 МБ
PBZIP2 - 101 МБ (1% більший)
PXZ - 101 МБ (1% більший)
PLZIP - 102 МБ (1% більший)
LRZIP - 101 МБ (1% більший)
PIGZ - 101 МБ (1% більший) )
Невеликий показник стиснення (Використання текстового файлу):
ОРИГІНАЛЬНИЙ РОЗМІР ФАЙЛУ - 70 КБ Текстовий файл
PBZIP2 - 16,1 КБ (23%)
PXZ - 15,4 КБ (22%)
PLZIP - 15,5 КБ (22,1%)
LRZIP - 15,3 КБ (21,8%)
PIGZ - 17,4 КБ (24,8%)
lrzip
може бути нестисненим, використовуючи pbzip2
, наприклад.
Крім того, приємне резюме вище (спасибі Луїс), в ці дні люди можуть також захотіти розглянути питання PIXZ, який відповідно до цього читає (Джерело: https://github.com/vasi/pixz - я ще не перевірив претензії сам ) має деякі переваги перед 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
Іншими словами, PIXZ, мабуть, більш ефективний у пам’яті та на диску, і має додаткову функцію індексації, яка прискорює декомпресію окремих компонентів стислих файлів tar.
pixz
архіви не сумісні зі стандартним xz
форматом, як це pxz
було б.
pixz
може декомпресувати xz
архіви і xz
може розпакувати pixz
архіви. Однак параметри командного рядка увімкнено xz
і pixz
відрізняються.
pixz
.
XZ Utils підтримує багатопотокове стиснення, починаючи з v5.2.0, спочатку було помилково зафіксовано як багатопотокове декомпресію.
Наприклад: tar -cf - source | xz --threads=0 > destination.tar.xz
export XZ_DEFAULTS="-T 0"
а потім просто скористатися звичайним дзвінким тарифом, тобто tar cJf target.tar.xz source
.
lzop також може бути життєздатним варіантом, хоча він є однопоточним.
Він використовує дуже швидкий алгоритм стиснення lempel-ziv-oberhumer , який в 5-6 разів швидший, ніж gzip в моєму спостереженні.
Примітка. Хоча вона ще не є багатопотоковою, вона, мабуть, перевершить pigz у 1-4 основних системах. Тому я вирішив опублікувати це, навіть якщо це не відповідає безпосередньо на ваше запитання. Спробуйте, це може вирішити вашу проблему з вузьким процесором, використовуючи лише один процесор і трохи стиснути. Я часто вважав це кращим рішенням, ніж, наприклад, pigz.
Компресор LZMA2 p7zip використовує обидва ядра моєї системи.
Це насправді не відповідь, але я вважаю, що це досить релевантно, щоб поділитися моїми орієнтирами, порівнюючи швидкість gzip
та pigz
реальний HW у реальному сценарії життя. Як pigz
і багатопотокова еволюція, яку я особисто вирішив використовувати відтепер.
Метадані:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + Nvme SSDXubuntu 17.10 (artful)
gzip
версія: 1.6
pigz
версія: 2.4
gzip
швидкий
time gzip -1kN ./db_dump.sql
real 1m22,271s
user 1m17,738s
sys 0m3,330s
gzip
найкращий
time gzip -9kN ./db_dump.sql
real 10m6,709s
user 10m2,710s
sys 0m3,828s
pigz
швидкий
time pigz -1kMN ./db_dump.sql
real 0m26,610s
user 1m55,389s
sys 0m6,175s
pigz
найкращий (ні zopfli
)
time pigz -9kMN ./db_dump.sql
real 1m54,383s
user 14m30,435s
sys 0m5,562s
pigz
+ zopfli
алгоритм
time pigz -11kMN ./db_dump.sql
real 171m33,501s
user 1321m36,144s
sys 0m29,780s
В якості нижнього рядка я б не рекомендував zopfli
алгоритм, оскільки для стиснення знадобилося величезна кількість часу, не витраченого на дисковий простір.
Отримані розміри файлів:
Zstandard підтримує багатопотоковість з v1.2.0 ¹. Це дуже швидкий компресор і декомпресор, призначений замінити gzip, а також може стискати настільки ж ефективно - якщо не краще - як LZMA2 / XZ на його найвищих рівнях.
Щоб отримати ці переваги, ви повинні використовувати хитрую чи новішу версію, або скласти останню версію з джерела. На щастя, це не тягне за собою багато залежностей.