Bzip2 по прежнему является одним из наиболее часто используемых инструментов сжатия в Linux, но он работает только с одним потоком, и я узнал , что lbzip2 имеет многопоточную bzip2 компрессию , которая должна привести к более высокой производительности на многоядерных системах.
lbzip2 не был установлен по умолчанию в Ubuntu 16.04, но его достаточно легко установить:
1 |
sudo apt install lbzip2 |
Я клонировал репозиторий mainline Linux на моей машине, так что давайте посмотрим, сколько времени требуется, чтобы сжать папку с помощью bzip2 (один поток):
1 2 3 4 5 6 7 |
time tar cjf linux.tar.bz2 linux real 9m22.131s user 7m42.712s sys 0m19.280s |
9 минут и 22 секунды. Теперь давайте повторим тест с lbzip2 используя все 8 ядер моего процессора AMD FX8350:
1 2 3 4 5 6 7 8 9 |
time tar cf linux2.tar.bz2 linux --use-compress-program=lbzip2 real 2m32.660s user 7m4.072s sys 0m17.824s |
2 минуты 32 секунд. Почти в 4x раза, не плохо. Это не в 8 раз быстрее, так как необходимо принять во внимание ввод / вывод и начальное сканирование диска, используется все 8-ядер, но не на полную мощность. Файлы были также сохранены в жестком диске, так что я бы предположил, что разница в производительности должна быть еще более заметной с SSD.
Мы можем видеть, что оба файла примерно такого же размера:
1 2 3 4 5 6 7 8 9 |
ls -l total 4377472 drwxrwxr-x 25 jaufranc jaufranc 4096 Dec 12 21:13 linux -rw-rw-r-- 1 jaufranc jaufranc 2241648426 Dec 16 10:17 linux2.tar.bz2 -rw-rw-r-- 1 jaufranc jaufranc 2240858174 Dec 15 20:50 linux.tar.bz2 |
Я не совсем уверен, почему существует разница около 771 KB, так как оба инструмента предлагают ту же степень сжатия.
Это был тест сжатия. Как насчет декомпрессии? Я распаковал файл с bzip2 первым:
1 2 3 4 5 6 7 8 9 |
time tar xf linux2.tar.bz2 -C linux-bzip2 real 2m49.671s user 2m46.500s sys 0m13.068s |
2 минуты и 49 секунд. Теперь давайте файл с lbzip2:
1 2 3 4 5 6 7 8 9 |
time tar xf linux.tar.bz2 --use-compress-program=lbzip2 -C linux-lbzip2 real 0m45.081s user 3m14.732s sys 0m10.088s |
45 секунд! Опять же, разница в производительности является довольно серьезной.
Если вы хотите всегда использовать lbzip2 вместо bzip2, вы можете создать псевдоним:
1 |
alias tar='tar --use-compress-program=lbzip2' |
Обратите внимание, что это приведет к конфликту ( “конфликтующие параметры сжатия”) при попытке сжать файлы с помощью -j / -bzip2 или -J, -xz варианты, так что вместо него, вы можете создать еще один псевдоним, например, tarfast.
lbzip2 не является единственным инструментом для поддержки многопоточного сжатия bzip2, а pbzip2 еще одна реализация. Тем не менее, один из отчетов указывает на то, что lbzip2 может быть в два раза быстрее, чем pbzip2 для сжатия файлов (скорость распаковки примерно такая же) что дает вам прекрасные возможности если вы регулярно делаете резервное копирование файлов.
tkaiser также тестировали различные алгоритмы сжатия (GZIP, pbzip2, LZ4, pigz) для сценария резервного копирования для Orange Pi платы, работающей на armbian, и измеряющую общую производительность PIPING для EMMC через различные компрессоры / Dev / null:
1 2 3 4 5 6 7 8 9 |
gzip -c: 10.4 MB/s 1065 MB pbzip2 -1 -c: 15.2 MB/s 1033 MB lz4 - -z -c -9 -B4: 18.0 MB/s 1276 MB pigz -c: 25.2 MB/s 1044 MB pigz --zip -c: 25.2 MB/s 1044 MB |
pigz выглядит лучшим решением (25,2 Мб / с) по сравнению с pbzip2 (15,2 МБ / с). lbzip2 эксперименты не проводились, но я думаю lbzip2 может показать лучшие результаты по сравнению с pigz как с точки зрения скорости, так и сжатия на основе предыдущего доклада, хотя фактические результаты могут отличаться в зависимости от используемого процессора.
Благодарим сайт cnx-software.com за предоставленную информацию.
Оригинал статьи тут