Какие инструменты сжатия доступны в Ubuntu, которые могут выиграть от многоядерного процессора.
compression
multi-core
Луис Альварадо
источник
источник
Ответы:
Есть два основных инструмента.
lbzip2
иpbzip2
. Это принципиально разные реализации компрессоров bzip2. Я сравнил их (вывод - исправленная версия, но вы должны иметь возможность запускать команды)lbzip2
оказывается победителем по случайным данным. Это немного менее сжато, но намного быстрее. YMMV.источник
/dev/urandom
Это не лучший выбор для тестирования инструментов сжатия, поскольку случайные данные по определению несжимаемы. Это отчасти объясняет, почему в обоих случаях выходной файл на ~ 450 МБ больше входного.00000000000000000000000000000000
. Вот как работает случайный;) То, о чем вы говорите - это практические средние. Это вряд ли вы будете генерировать 100MB файл только нули. И я согласен с духом того, что вы говорите, я просто не согласен с «по определению», потому что это не определение (потому что это неточно).wget http://mattmahoney.net/dc/enwik8.zip
получить 96 МБ (сжатый 21 МБ) текста из Википедии. Более полный набор тестов см. Здесь .Ну, ключевое слово было параллельным . После поиска всех параллельных инструментов сжатия я обнаружил следующее:
PXZ - Parallel 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
Небольшой тест на сжатие (с использованием теста, созданного Оли):
ОРИГИНАЛЬНЫЙ РАЗМЕР ФАЙЛА - 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, который в соответствии с README (Источник: https://github.com/vasi/pixz - я сам не проверял претензии ) имеет некоторые преимущества перед PXZ.
Другими словами, 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
быстрыйgzip
Лучшийpigz
быстрыйpigz
лучший (нетzopfli
)pigz
+zopfli
алгоритмКак итог, я бы не рекомендовал
zopfli
алгоритм, поскольку сжатие занимало огромное количество времени при не столь значительном объеме сэкономленного дискового пространства.Результирующие размеры файлов:
источник
Zstandard поддерживает многопоточность начиная с версии 1.2.0 ¹. Это очень быстрый компрессор и декомпрессор, предназначенный для замены gzip, и он также может сжимать так же эффективно - если не лучше - как LZMA2 / XZ на самых высоких уровнях.
Вы должны использовать artful или более новую версию или скомпилировать последнюю версию из исходного кода, чтобы получить эти преимущества. К счастью, это не влечет за собой много зависимостей.
источник