gnu multithreading pipe paralelo usa pouca CPU% mas bloqueia o servidor

1

Eu uso o gnu parallel para executar um pipe em vários arquivos em paralelo. Meu código faz o que deveria, no entanto, se especificar o valor máximo número de CPU (no meu caso 64) cada trabalho usa < 5% de cada CPU (com base em htop ). Além disso, o número de tarefas e thr. (novamente com base em htop ) ir até o telhado que eventualmente mata o servidor. Se eu especificar apenas 30 núcleos no gnu parallel , ele será executado corretamente. Alguém sabe como max. o poder do servidor?

Meu comando é um conjunto de diferentes ferramentas para aparar leituras genômicas:

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
    
por Feliks 28.09.2016 / 15:21

1 resposta

0

Como Luciano diz no comentário, a E / S do disco é provavelmente a causa.

O motivo para obter mais processos é que seu pipeline iniciará pelo menos 5 processos. Então você deve ver pelo menos 64 * 5 processos sendo iniciados. Alguns deles também podem iniciar vários threads.

A E / S de disco paralela é muito imprevisível (consulte link ), e é praticamente impossível dizer quantos trabalhos em paralelo é o ideal, porque depende de muitos fatores.

Então, para otimizar seu fluxo, eu ajustaria o número de trabalhos até obter o maior rendimento. Você pode usar --joblog para ajudá-lo a ver quanto tempo cada trabalho é executado.

    
por 29.09.2016 / 08:21