Многоядерные средства сжатия

53

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

    
задан Luis Alvarado 19.02.2013 в 13:50
источник

8 ответов

31

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

    
ответ дан Oli 19.02.2013 в 14:14
источник
65

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

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%)

    
ответ дан Luis Alvarado 19.02.2013 в 15:22
10

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

ответ дан nturner 14.12.2013 в 20:56
6

Обновление:

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

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

    
ответ дан donbradken 09.12.2016 в 16:33
4

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

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

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

    
ответ дан ce4 25.02.2014 в 13:48
3

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

    
ответ дан David Foerster 14.12.2013 в 23:35
2

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

Метаданные:

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

gzip быстро

time gzip -1kN ./db_dump.sql

real    1m22,271s
user    1m17,738s
sys     0m3,330s

gzip best

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 best (нет zopfli )

time pigz -9kMN ./db_dump.sql 

real    1m54,383s
user    14m30,435s
sys     0m5,562s

pigz +% алгоритм co_de%

time pigz -11kMN ./db_dump.sql 

real    171m33,501s
user    1321m36,144s
sys     0m29,780s

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

Результирующие размеры файлов:

  • лучший s: 1309M
  • быстрый s: 1680M
  • zopfli : 1180M
ответ дан helvete 19.01.2018 в 16:39
1

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

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

  1. Был также сторонний pzstd в v1.1.0 zstd.
ответ дан LiveWireBT 26.07.2017 в 22:17