메모리를 디스크에 저장하고 나중에 복원하여 Linux에서 프로세스를 "최대 절전 모드"하는 방법은 무엇입니까?


99

Linux에서 프로세스를 '최대 절전 모드'로 전환 할 수 있습니까? 랩톱의 '최대 절전 모드'와 마찬가지로 프로세스에서 사용하는 모든 메모리를 디스크에 쓰고 RAM을 비우고 싶습니다. 그런 다음 나중에 '프로세스를 다시 시작'할 수 있습니다. 즉, 메모리에서 모든 데이터를 읽어서 RAM에 다시 저장하면 프로세스를 계속할 수 있습니까?


8
흥미로운 질문 : D
dangerstat

당신이 설명하는 것은 실제로 종종 '체크 포인트'라고 불리며, 그 용어로 검색하는 것이 더 좋을 것입니다.
Tim Post

그래야만합니다. 좋은 기능입니다. 최대 절전 모드와 닫기.
Vitaly Fadeev

답변:


54

나는 CryoPID 를 유지하는데 사용 했는데 , 이것은 당신이 말하는 것을 정확하게 수행하는 프로그램입니다. 프로그램의 주소 공간, VDSO, 파일 설명자 참조 및 상태의 내용을 나중에 재구성 할 수있는 파일에 기록합니다. CryoPID는 Linux 자체에 사용 가능한 후크가 없었을 때 시작되었으며 완전히 사용자 공간에서 작동했습니다 (실제로 배포판 / 커널 / 보안 설정에 따라 여전히 작동합니다).

문제는 (실제로) 소켓, 보류중인 RT 신호, 수많은 X11 문제, glibc 캐싱 getpid () 구현이었습니다. 무작위 화 (특히 VDSO)는 버나드가 그것을 떠난 후에 작업하는 우리 중 소수에게 극복 할 수없는 것으로 판명되었습니다. 하지만 재미 있고 여러 석사 논문의 화제가되었습니다.

실행 상태를 저장하고 해당 상태로 직접 다시 시작할 수있는 프로그램을 고려 중이라면 신호를 서비스 할 때 프로그램 자체에서 해당 정보를 저장하는 것이 훨씬 쉽습니다.


5
2014 년 7 월 현재, CryoPID는 더 이상 관리되지 않으며 최근 커널에서 실행되지 않습니다. 그러나 그 동안 새로운 프로젝트가 탄생했습니다 (TCP 연결 "최대 절전 모드"에서도 몇 단계가 취해졌습니다). 업데이트 된 정보로 아래 에 답변을 올렸습니다 . 확인 해봐! )
dappiu

1
@dappiu 훌륭합니다-그러나 CryoPID는 이 답변 의 에 불과하여 얼마나 까다로울 수 있는지 설명하기 위해 프로그램 자체 내에서 상태를 쉽게 다시 시작할 수있는 방식으로 저장하도록 제안했습니다. CryoPID가 정체 되어도 답의 관련성이 낮아지지는 않습니다.
Tim Post

Cryopid2가 더 최근에 활성화되었습니다 (2013) : sourceforge.net/projects/cryopid2
Leopd

31

2014 년 현재 상태 업데이트를 여기에 추가하고 싶습니다.

받아 들여진 대답은 CryoPID를 Checkpoint / Restore를 수행하는 도구로 제안하지만 프로젝트가 관리되지 않고 최신 커널로 컴파일 할 수 없음을 발견했습니다. 이제 애플리케이션 체크 포인트 기능을 제공하는 두 개의 적극적으로 관리되는 프로젝트를 발견했습니다.

첫 번째는 내가 그것을 실행하는 데 더 나은 운이 있기 때문에 제안하는 것은 주로 사용자 공간에서 체크 포인트 / 복원을 수행하는 CRIU 이며 작동하려면 커널 옵션 CONFIG_CHECKPOINT_RESTORE가 필요합니다.

Checkpoint / Restore In Userspace, 또는 CRIU (kree-oo로 발음, IPA : / krɪʊ /, 러시아어 : криу)는 Linux 운영 체제 용 소프트웨어 도구입니다. 이 도구를 사용하면 실행중인 응용 프로그램 (또는 그 일부)을 고정하고 파일 모음으로 하드 드라이브에 체크 포인트 할 수 있습니다. 그런 다음 파일을 사용하여 고정 된 지점에서 응용 프로그램을 복원하고 실행할 수 있습니다. CRIU 프로젝트의 특징은 주로 사용자 공간에서 구현된다는 점입니다.

후자는 DMTCP입니다 . 메인 페이지에서 인용 :

DMTCP (Distributed MultiThreaded Checkpointing)는 다중 스레드 및 분산 응용 프로그램을 포함한 여러 동시 응용 프로그램의 상태를 투명하게 검사하는 도구입니다. Linux 커널 모듈이나 기타 커널 수정없이 사용자 바이너리 실행 파일에서 직접 작동합니다.

인수에 대한 멋진 Wikipedia 페이지도 있습니다. Application_checkpointing


20

언급 된 답변 ctrl-z은 실제로 신호로 프로세스를 중지하는 것에 대해 이야기하고 SIGTSTP있습니다. 다음을 사용하여 정지 신호를 보낼 수 있습니다 kill.

kill -STOP <pid>

그러면 프로세스 실행이 일시 중단됩니다. 사용 된 메모리를 즉시 해제하지는 않지만 다른 프로세스에 메모리가 필요하므로 중지 된 프로세스에서 사용하는 메모리는 점차적으로 교체됩니다.

다시 깨우려면 다음을 사용하십시오.

kill -CONT <pid>

CryoPID와 같은 더 복잡한 솔루션은 중지 된 프로세스가 시스템 종료 / 재시작 후에도 유지되기를 원하는 경우에만 실제로 필요합니다. 필요한 것 같지 않습니다.


13

문제는 프로그램이 연 스트림 (파일 및 소켓)을 복원하는 것입니다.

전체 OS가 최대 절전 모드로 전환되면 로컬 파일 등이 분명히 복원 될 수 있습니다. 네트워크 연결은 그렇지 않지만 인터넷에 액세스하는 코드는 일반적으로 오류 검사가 더 많고 오류 조건에서 살아남습니다 (또는 그래야합니다).

프로그램 별 최대 절전 모드 (응용 프로그램 지원 없음)를 수행 한 경우 열린 파일을 어떻게 처리합니까? 다른 프로세스가 중간에 해당 파일에 액세스하면 어떻게됩니까? 기타?

프로그램이로드되지 않았을 때 상태를 유지하는 것은 어려울 것입니다.

스레드를 일시 중단하고 디스크로 교체하는 것만으로도 동일한 효과가 있습니까?

또는 가상 머신에서 프로그램을 실행하고 VM이 일시 중지를 처리하도록합니다.


12

짧은 대답은 "예,하지만 항상 신뢰할 수있는 것은 아닙니다"입니다. CryoPID 확인 :

http://cryopid.berlios.de/

열린 파일은 실제로 가장 일반적인 문제입니다. CryoPID는 다음과 같이 명시합니다.

열린 파일 및 오프셋이 복원됩니다. 링크가 해제되어 파일 시스템에서 액세스 할 수없는 임시 파일은 항상 이미지에 저장됩니다. 재개에 존재하지 않는 다른 파일은 아직 복원되지 않습니다. 이러한 상황에 대한 파일 내용 저장 지원이 계획되어 있습니다.

CryoPID가 연결 재개를 위해 tcpcp를 지원하지만 동일한 문제가 TCP 연결에도 영향을 미칩니다.


3
제출 버튼을 누른 후 나는 이것이 CryoPID에 대한 스팸 / 광고와 매우 흡사하다는 것을 깨달았습니다. 그것은 아닙니다. 저는 단순히 유틸리티의 만족스러운 사용자입니다.
Ulisses Montenegro



6

SourceForge에서 사용 가능한 Cryopid2라는 패키지를 생성하는 Cryopid를 확장했습니다. 이렇게하면 프로세스를 마이그레이션 할 수있을뿐만 아니라 최대 절전 모드로 전환 할 수 있습니다 (열린 파일 및 소켓과 함께 소켓 / 파이프의 데이터는 최대 절전 모드에서 프로세스로 빨려 들어가고 프로세스가 다시 시작될 때 다시 여기로 스 패팅됩니다).

내가이 프로젝트에 참여하지 않은 이유는 내가 커널 개발자가 아니기 때문입니다.이 두 가지 (및 / 또는 원래 cryopid) 모두 최신 커널 (예 : Linux 3.x)로 실행할 수있는 사람을 확보해야합니다. .

Cryopid 방법은 작동합니다. 그리고 아마도 제가 접한 Linux에서 범용 프로세스 최대 절전 모드 / 마이그레이션에 대한 최상의 솔루션 일 것입니다.


3

다른 사람들이 언급했듯이, OS가이 기능을 제공하기는 어렵습니다. 왜냐하면 응용 프로그램은 깨진 스트림을 처리하기 위해 몇 가지 오류 검사가 내장되어 있어야하기 때문입니다.

그러나 참고로 가상 머신을 사용하는 일부 프로그래밍 언어 및 도구는 자체 프로그래밍 언어같이이 기능을 명시 적으로 지원 합니다 .


0

Ctrl-Z는 프로세스의 페이지가 스왑 될 가능성을 높이지만 프로세스의 리소스를 완전히 해제하지는 않습니다. 프로세스의 리소스를 완전히 해제하는 문제는 파일 핸들, 소켓과 같은 것이 프로세스가 사용하게되는 커널 리소스이지만 자체적으로 지속되는 방법을 모른다는 것입니다. 따라서 Ctrl-Z는 가능한 한 좋습니다.


0

2.2 일과 2.4 일에 Linux 용 체크 포인트 / 복원에 대한 연구가 있었지만 프로토 타입을 지나치지 못했습니다. 가능한 특정 값에 대해 (다른 답변에 설명 된 경고와 함께) 가능합니다-커널 모듈을 작성하여 가능합니다. 그러나 가능한 공통 가치 (상용 Linux 배포판의 셸에서 할 수 있습니까)에 대해서는 아직 불가능합니다.


0

이것은 일종의 클러스터 운영 체제의 궁극적 인 목표입니다. Mathew Dillon은 Dragonfly BSD 프로젝트 에서 이와 같은 것을 구현하기 위해 많은 노력을 기울였습니다 .


이 기능은 Dragonfly BSD에서 완전히 구현 되었습니까?
Arjun J Rao 2013 년

0

다른 해결 방법 추가 : virtualbox를 사용할 수 있습니다. 일반 가상 머신에서 애플리케이션을 실행하고 원할 때마다 간단히 "머신 상태를 저장"하십시오. 이것이 답이 아니라는 것을 알고 있지만 실제 옵션이 없을 때 유용 할 것이라고 생각했습니다.

어떤 이유로 든 virtualbox가 마음에 들지 않으면 vmware 및 Qemu가 좋습니다.


-2

거기에 ctrl+z확실히는 사용자가 지정한 기능을 제공하는 리눅스에서,하지만 난 아니에요. 이 질문이 아니기 때문에 질문 한 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.