Gnu 병렬 다중 스레드 파이프라인은 CPU%를 거의 사용하지 않지만 서버 정지를 유발합니다.

Gnu 병렬 다중 스레드 파이프라인은 CPU%를 거의 사용하지 않지만 서버 정지를 유발합니다.

저는 Gnu를 사용하여 parallel여러 파일에 대한 파이프라인을 병렬로 실행하고 있습니다. 그러나 최대값을 지정하면 내 코드는 예상된 작업을 수행합니다. 각 작업은 CPU당 CPU 수(제 경우에는 64개)를 기준으로 5% 미만을 사용합니다 htop. 또한 작업의 수와 타이밍. (다시 기반 htop) 옥상을 통과하여 결국 서버를 죽입니다. GNU에서 코어를 30개만 지정하면 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

Luciano가 의견에서 말했듯이 디스크 I/O가 원인일 가능성이 높습니다.

더 많은 프로세스를 확보하는 이유는 파이프라인이 최소 5개의 프로세스를 시작하기 때문입니다. 따라서 최소한 64*5 프로세스가 시작되는 것을 볼 수 있습니다. 그 중 일부는 여러 스레드를 시작할 수도 있습니다.

병렬 디스크 I/O는 예측하기가 매우 어렵습니다(참조:https://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/), 여러 요인에 따라 달라지므로 병렬화에 최적인 작업 수를 말하는 것은 실제로 불가능합니다.

따라서 프로세스를 최적화하기 위해 최대 처리량을 얻을 때까지 작업 수를 조정합니다. --joblog를 사용하면 각 작업을 실행하는 데 걸리는 시간을 확인할 수 있습니다.

관련 정보