параллельный многопоточный конвейер GNU использует мало ресурсов ЦП, но тормозит сервер

параллельный многопоточный конвейер GNU использует мало ресурсов ЦП, но тормозит сервер

Я использую gnu parallelдля параллельного запуска конвейера на нескольких файлах. Мой код делает то, что должен, однако, если указать макс. количество ЦП (в моем случае 64), каждое задание использует <5% от каждого ЦП (на основе htop). Кроме того, количество задач и thr. (опять же на основе htop) зашкаливает, что в конечном итоге убивает сервер. Если я указываю только 30 ядер в gnu, parallelон работает нормально. Кто-нибудь знает, как макс. увеличить мощность сервера?

Моя команда представляет собой набор различных инструментов для обрезки геномных прочтений:

parallel --jobs 64 "echo -e '\n'{} processing 1>&2 ; \
gunzip -c {} | scriptA.sh | scriptB.sh -outfmt fasta \
| java -jar scriptC.jar |bgzip \
> ${output}/tmp/{/.}.filtered.tmp.fa.gz " ::: ${input} 2> ${output}/0log_parallel_stderr.log

решение1

Как говорит Лучано в комментарии, наиболее вероятной причиной является дисковый ввод-вывод.

Причина получения большего количества процессов заключается в том, что ваш конвейер запустит не менее 5 процессов. Таким образом, вы должны увидеть запуск не менее 64*5 процессов. Некоторые из них также могут запустить несколько потоков.

Параллельный дисковый ввод-вывод очень непредсказуем (см.https://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/), и на практике невозможно сказать, какое количество параллельных работ будет оптимальным, поскольку это зависит от очень многих факторов.

Поэтому для оптимизации вашего потока я бы отрегулировал количество заданий, пока вы не получите максимальную пропускную способность. Вы можете использовать --joblog, чтобы узнать, как долго выполняется каждое задание.

Связанный контент