Многоядерные компрессионные инструменты

Какие инструменты сжатия доступны в 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.

Ну, ключевое слово было параллельным . После поиска всех инструментов сжатия, которые были также параллельны, я нашел следующее:

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% больше)

Небольшой тест сжатия (с использованием текстового файла):

ORIGINAL FILE SIZE – 70 KB Текстовый файл
PBZIP2 – 16,1 КБ (23%)
PXZ – 15,4 КБ (22%)
PLZIP – 15,5 КБ (22,1%)
LRZIP – 15,3 КБ (21,8%)
PIGZ – 17,4 КБ (24,8%)

Кроме того, хорошее резюме выше (спасибо Луису), в эти дни люди могут также хотеть рассмотреть PIXZ, который, согласно его README (источник: 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-файлов.

lzop также может быть жизнеспособным вариантом, хотя он однопоточный.

Он использует очень быстрый алгоритм сжатия lempel-ziv-oberhumer , который в моем наблюдении в 5-6 раз быстрее, чем gzip.

Примечание. Несмотря на то, что он еще не многопоточен, он, вероятно, опередит pigz на 1-4-ядерных системах. Вот почему я решил опубликовать это, даже если он не отвечает на ваш вопрос напрямую. Попробуйте, он может решить проблему с узким местом вашего процессора при использовании только одного процессора и сжатия немного хуже. Я часто обнаружил, что это лучшее решение, чем, например, свиньи.

Компрессор LZMA2 p7zip Установить p7zip использует оба ядра на моей системе.

Обновить:

XZ Utils поддерживает многопоточное сжатие с версии v5.2.0, оно было по ошибке задокументировано как многопоточная декомпрессия.

Например: tar -cf - source | xz --threads=0 > destination.tar.xz tar -cf - source | xz --threads=0 > destination.tar.xz

Zstandard поддерживает многопоточность, поскольку v1.2.0 ¹. Это очень быстрый компрессор и декомпрессор, предназначенный для замены gzip, и он также может сжимать как эффективный – если не лучше – как LZMA2 / XZ на самом высоком уровне.

Вы должны использовать искусную или более новую версию или скомпилировать последнюю версию из источника, чтобы получить эти преимущества. К счастью, он не тянет много зависимостей.

  1. Был также сторонний pzstd в v1.1.0 zstd.