gnu 병렬 멀티스레딩 파이프는 CPU%를 거의 사용하지 않지만 서버를 정지시킵니다.

gnu 병렬 멀티스레딩 파이프는 CPU%를 거의 사용하지 않지만 서버를 정지시킵니다.

나는 gnu를 사용하여 parallel여러 파일에 대해 파이프를 병렬로 실행합니다. 그러나 내 코드는 최대값을 지정하는 경우 해야 할 작업을 수행합니다. CPU 수(내 경우에는 64) 각 작업은 각 CPU에서 <5%를 사용합니다(기준 htop). 또한 작업 수와 thr. (다시 기반으로 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를 사용하면 각 작업이 실행되는 기간을 확인할 수 있습니다.

관련 정보