Многоядерный процессор gzip большой файл

Как я могу использовать все ядра процессора на моем сервере (имеет 4 ядра) linux Debian поверх OpenVZ для ускорения сжатия одного большого файла?

Я пытаюсь использовать эти команды, но я не могу собрать воедино

получить количество ядер CORES=$(grep -c '^processor' /proc/cpuinfo)

это для разделения большого файла в более split -b100 file.big

это для использования команды gzip с несколькими ядрами find /source -type f -print0 | xargs -0 -n 1 -P $CORES gzip --best

Я не знаю, если это лучший способ для оптимизации процесса gzip больших файлов..

2 ответа

Решение

Использование pigz параллельная реализация gzip.

В отличие от parallel с gzip, pigz производит единственный поток gzip.

Попробуйте GNU Parallel

cat bigfile | parallel --pipe --recend '' -k gzip -9 >bigfile.gz

Это будет использовать все ваши ядра для gzip параллельно.

Для сравнения, на моем Mac под управлением OSX Mavericks и с использованием файла 6,4 ГБ на твердотельном диске, эта команда

time gzip -9 <bigger >/dev/null

занимает 4 минуты 23 с и использует 1-2 процессора примерно на 50%.

В то время как версия GNU Parallel ниже

time cat bigger | parallel --pipe --recend '' -k gzip -9 >/dev/null

занимает 1 минуту 44 секунды и держит все 8 ядер на 80+% занятыми. Очень существенная разница: GNU Parallel работает менее чем за 40% времени упрощенного подхода.

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