Инструменты многоядерного сжатия

Какие инструменты сжатия доступны в Ubuntu, которые могут выиграть от многоядерного процессора.

61
задан 13 April 2017 в 15:23

9 ответов

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

0
ответ дан 13 April 2017 в 15:23

Есть два основных инструмента. 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.

0
ответ дан 13 April 2017 в 15:23

Обновление:

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

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

0
ответ дан 13 April 2017 в 15:23

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

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

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

0
ответ дан 13 April 2017 в 15:23

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

0
ответ дан 13 April 2017 в 15:23

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

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. Это разработано для масштабирования с увеличениями с размером RAM, улучшив сжатие далее. Выбор или размера или оптимизации скорости допускает или лучшее сжатие, чем даже lzma, может обеспечить, или лучшая скорость, чем gzip, но с bzip2 измерил уровни сжатия.

sudo apt-get install lrzip

Маленький Сравнительный тест Сжатия (Используя тест Oli создал):

ИСХОДНЫЙ РАЗМЕР ФАЙЛА - 100 МБ
PBZIP2 - (На 1% Больше) 101 МБ
PXZ - (На 1% Больше) 101 МБ
PLZIP - (На 1% Больше) 102 МБ
LRZIP - (На 1% Больше) 101 МБ
PIGZ - (На 1% Больше) 101 МБ

Маленький Сравнительный тест Сжатия (Используя Текстовый файл):

ИСХОДНЫЙ РАЗМЕР ФАЙЛА - текстовый файл на 70 КБ
PBZIP2 - 16,1 КБ (23%)
PXZ - 15,4 КБ (22%)
PLZIP - 15,5 КБ (22,1%)
LRZIP - 15,3 КБ (21,8%)
PIGZ - 17,4 КБ (24,8%)

72
ответ дан 13 April 2017 в 15:23

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

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

  1. Был также сторонний pzstd в v1.1.0 из zstd.
0
ответ дан 13 April 2017 в 15:23

Это не действительно ответ, но я думаю, что достаточно необходимо совместно использовать мои сравнительные тесты, сравнивающие скорость gzip и pigz на реальном HW в реальном сценарии. Как pigz многопоточная эволюция, которую я лично принял решение использовать с этого времени.

Метаданные:

  • Аппаратные средства использовали: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (4c/8t) + GNU/дистрибутив Linux Nvme SSD
  • : Xubuntu 17.10 (artful)
  • gzip версия: 1.6
  • pigz версия: 2.4
  • сжимаемый файл дамп SQL на 9,25 гибибайт

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 алгоритм, так как сжатие заняло огромное количество времени для not-that-significant количества сэкономленного дискового пространства.

Получающиеся размеры файла:

  • лучший с: 1309M
  • быстрый с: 1680M
  • zopfli: 1180M
0
ответ дан 13 April 2017 в 15:23

Соответствующая запись Arch Wiki: https://wiki.archlinux.org/index.php/Makepkg#Utilizing_multiple_cores_on_compression

# lzma compression
xz --threads=0

# drop-in parallel gzip replacement
# -p/--processes flag can be used to employ less cores
pigz

# drop-in parallel bzip2 replacement
# -p# flag can be used to employ less cores
# (note: no space between the -p and number of cores)
pbzip2

# modern zstd compression
# is used to build Arch packages by default
# since somewhere 2020
zstd --threads=0 
0
ответ дан 28 August 2020 в 21:43

Другие вопросы по тегам:

Похожие вопросы: