Многоядерный процессор 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% времени упрощенного подхода.