Первый шаг - выяснить, что является узким местом: дисковый ввод-вывод, сетевой ввод-вывод или ЦП?
Если узким местом является дисковый ввод-вывод, тут мало что можно сделать. Убедитесь, что диски не обслуживают много параллельных запросов, так как это может только снизить производительность.
Если узким местом является сетевой ввод-вывод, запустите процесс сжатия на машине, где хранятся файлы: запуск его на машине с более мощным ЦП помогает только в том случае, если ЦП является узким местом.
Если узким местом является ЦП, то в первую очередь следует рассмотреть возможность использования более быстрого алгоритма сжатия. Bzip2 не обязательно плохой выбор - его основная слабость - скорость распаковки - но вы можете использовать gzip и пожертвовать некоторым размером ради скорости сжатия или попробовать другие форматы, такие как lzop или lzma.Вы также можете настроить уровень сжатия: по умолчанию для bzip2 установлено значение -9
(максимальный размер блока, то есть максимальное сжатие, но также и максимальное время сжатия); установите для переменной среды BZIP2
значение вроде -3
, чтобы попробовать уровень сжатия 3. Этот поток и этот поток обсуждают общие алгоритмы сжатия ; в частности это сообщение в блоге , процитированное Деробертом, дает некоторые тесты, которые показывают, что gzip -9
или bzip2
с низким уровнем могут быть хорошим компромиссом по сравнению с ] bzip2 -9
. Этот другой тест , который также включает lzma (алгоритм 7zip, поэтому вы можете использовать 7z
вместо tar --lzma
), предполагает, что lzma
на низком уровне может быстрее достичь степени сжатия bzip2. Практически любой выбор, кроме bzip2, улучшит время распаковки. Имейте в виду, что степень сжатия зависит от данных, а скорость сжатия зависит от версии программы сжатия, от того, как она была скомпилирована, и от процессора, на котором она выполняется.
Другой вариант, если узким местом является ЦП и у вас несколько ядер, - распараллелить сжатие. Это можно сделать двумя способами. Один, который работает с любым алгоритмом сжатия, - это сжатие файлов по отдельности (индивидуально или в нескольких группах) и использование parallel
для параллельного выполнения команд архивирования / сжатия.Это может уменьшить степень сжатия, но увеличивает скорость извлечения отдельного файла и работает с любым инструментом. Другой подход - использовать параллельную реализацию инструмента сжатия; эта ветка перечисляет несколько.