나는 PsSuspend를 사용하여 다른 작업을 하고 CPU/GPU가 대신 작동하도록 해야 할 때마다 과도한 CPU 또는 GPU 계산 리소스를 사용하는 프로세스를 PID로 일시 중단합니다. 그러나 일시 중단된 이러한 프로세스의 메모리는 RAM(또는 GPU의 VRAM)에 남아 있습니다.
일시 중단된 프로그램의 메모리 내용을 디스크에 쓴 다음 프로세스가 다시 시작될 때 메모리를 디스크에서 다시 읽어 정상적으로 계속 진행하는 방식으로 운영 체제용 메모리를 비울 수 있는 방법이 있습니까? 저는 시스템 메모리(RAM)와 비디오 메모리(VRAM) 모두에 대해 이를 달성하는 데 관심이 있습니다. PsSuspend로는 이 작업을 수행할 수 없을 것 같지만 Windows API와 C++에서는 가능할 것으로 생각됩니다. 이것이 가능하지 않다면 그 이유를 설명해 주시겠습니까?
답변1
에서https://stackoverflow.com/questions/49756405/do-suspensed-processes-still-use-up-cpu-ram
일시 중단된 Win32 프로세스는 메모리를 해제하지 않지만 사용 가능한 실제 RAM이 거의 없는 시스템에서는 응용 프로그램의 일부를 RAM에서 페이지 파일로 이동하여 다른 활성 응용 프로그램에서 사용할 수 있도록 RAM을 확보할 수 있습니다. SetProcessWorkingSetSize를 호출하여 프로세스 작업 세트의 페이지를 강제로 줄일 수 있습니다.
대신 Docker 컨테이너나 VM을 사용할 수도 있습니다. 그러면 전체 워크플로를 일시 중지/일시 중지하고 사용된 모든 리소스를 해제할 수 있습니다.