Linux 서버: 병렬 프로세스에 메모리는 어떻게 할당됩니까?

Linux 서버: 병렬 프로세스에 메모리는 어떻게 할당됩니까?

저는 완전 초보자이므로 저의 무지 및/또는 잘못된 용어를 이해해 주시기 바랍니다.

나는 뇌 이미지 처리를 위해 SSH를 통해 Ubuntu 서버를 사용하고 있으며(하나의 명령에는 여러 프로그램이 포함되어 있으며 각 뇌 실행에는 약 4-5시간이 소요됨) 터미널을 통해 이미지를 실행합니다. 서버의 저장공간이 제한되어 있고(~200GB) 뇌 데이터가 대용량(입력 2~3GB, 출력 500MB)이기 때문에 FileZilla를 사용해 처리된 데이터를 다운로드하고 새로운 보류 데이터를 업로드하고 있습니다.

뇌 이미지 처리는 RAM을 많이 소모하고 메모리 문제로 인해 여러 번 실패했습니다. 따라서 이제 두 프로그램을 별도로 수동으로 실행하고 있습니다(프로그램 1 = 뇌 이미지 처리 대 프로그램 2 = 업로드/다운로드). 한 가지 일을 하고 있으면서 동시에 다른 일을 하지 않습니다. 하지만 뇌 이미지 처리가 실패하지 않도록 하면서 이를 수행할 수 있는 더 효율적인 방법이 있는지 궁금합니다.

간단히 말해서 프로세스 1이 필요한 RAM을 사용하고 "나머지"는 프로세스 2에 할당되기를 원합니다. 현재 8개 코어를 모두 프로세스 1에 할당하고 있지만 (프로그램 작성 방식으로 인해) 8개 코어를 모두 매우 자주 사용합니다. 이상적으로는 여전히 FileZilla를 사용할 수 있도록 하는 방법이 있습니까? (터미널을 통한 업로드/다운로드에 반대하지는 않지만 매우 빠르고 쉽기 때문입니다.) 예를 들어, 내가 먼저 시작하는 프로세스가 "우선순위"를 가지며 특정 시점에 필요한 메모리만 차지하는 반면 다른 프로세스는 남은 메모리만 차지하는 경우가 가능합니까? 아니면 동시에 실행되는 프로세스 간에 RAM을 할당하는 방법은 무엇입니까(특히 중요한 경우 다른 소프트웨어에서 실행되는 경우)?

이 모든 것이 이해되길 바랍니다. 미리 감사드립니다!

답변1

이것은 GNU Parallel의 작업처럼 들립니다.

16개의 브레인을 병렬로 실행할 수 있을 만큼 충분한 CPU 성능이 있고 데이터 전송에 필요한 시간은 실행 시간(4~5시간)에 비해 매우 짧다고 가정해 보겠습니다.

보내는 컴퓨터에서 다음을 실행합니다.

parallel --delay 1m -j16 -S server --trc {}.output 'process_brain {} > {}.output' ::: brain*.input
옵션 설명하다
--지연 1분 1분마다 최대 하나의 작업을 시작합니다(이렇게 하면 첫 번째 파일을 전송하기 위해 1분 동안 첫 번째 작업에 전체 대역폭이 제공됩니다).
-j16 최대 16개 작업을 동시에 실행
-S 서버 서버에서
--trc {.}.output 입력 파일을 서버로 전송하고, 완료되면 출력을 다시 전송하고, 정리합니다(서버에서 두 파일 모두 삭제).
'process_brain {} > {.}.output' Brain*.input에서 process_brain을 실행하고 Brain*.output에 저장합니다.
::: 입력 소스 구분 기호
뇌*.입력 입력에 사용할 파일

1장과 2장을 20분 동안 읽어 보세요.https://doi.org/10.5281/zenodo.1146014. 당신의 명령줄은 당신을 좋아할 것입니다.

관련 정보