Открытие костыльного цеха

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

Но моя ебанца покоя не даёт, вот и в этот раз сижу, думаю: а хули так долго всё сжимается? У меня 32 ядра на сервере с репликой, диск не самый плохой. А оно еле ворочается.

Пошёл ковырять кишочки, оказывается, у меня gzip хуярит на одном ядре. Не понял. Так и есть. Говорят, что с версии 1.7 всё изменилось и оно само подстраивается под железо. НИХУЯ, у меня 1.10. Из коробки работает одно ядро.

Хм, может, для gzip есть какой-то ключ? Бегло пробежался, в хелпах про threads ничего нет.

Ну раз так. Расчехляем свиней. PIGZ!

PIGZ (Parallel Implementation of GZIP) — это утилита для сжатия файлов, которая использует параллельные вычисления для ускорения процесса сжатия данных.

Ставится из репы: apt install pigz, а где-то уже сразу установлена.

Давай затестим. Создаём 10-гигабайтный файл.

truncate -s 10G bashdays

Запускаем тесты:

time gzip -k -c bashdays > /dev/null

real 0m46.590s
time pigz -k -c bashdays > /dev/null

real 0m8.535s
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Хуясе, да! PIGZ сжал 10 гигабайт за 8 секунд. А gzip понадобилось аж 46 секунд. Разница ОЩУТИМА!

Понятно, тесты синтетические, но мне их достаточно.

Ради интереса открыл htop, всё верно. gzip усирается на одном ядрышке. А «свиньи» сразу жрут всё с костями. Прекрасно!

Теперь pigz нужно подружить с tar

С этим всё просто, через pipe:

tar cf - bashdays | pigz -k -c > bashdays.tar.gz

Либо, как вариант, через ключ --use-compress-program:

tar --use-compress-program="pigz --best --recursive" -cf bashdays.tar.gz bashdays

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

tar cf - bashdays | pigz -k -c | pv > bashdays.tar.gz

Тут используется утилита pv, про неё писал в этом посте.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Короче, pigz прям тема и гибко конфигурируется. Я в восторге.

Например, можешь сказать ей, чтобы использовала только два ядра и два потока. Почитай хелпину, если интересно. Основное я тебе рассказал. Изучай.

Увидимся! Пойду адаптировать под свои бэкапы.