CRIU
1. 개요
CRIU(Checkpoint/Restore In Userspace)는 사용자 공간에서 실행 중인 프로세스의 상태를 체크포인트화하고 복원할 수 있도록 하는 도구이다. OpenVZ 프로젝트의 일부로 개발되었으며, 컨테이너 마이그레이션을 지원하는 것을 목표로 한다. 2011년 파벨 예멜리아노프에 의해 처음 공개되었으며, x86-64 및 ARM 아키텍처 시스템에서 사용 가능하다. TCP 연결 마이그레이션 기능도 지원하며, OpenVZ, DMTCP, BLCR, Linux C/R과 같은 유사한 프로젝트가 존재한다.
| 이름 | CRIU |
|---|---|
| 개발자 | Virtuozzo의 OpenVZ 팀 |
| 릴리스 | 2012년 7월 23일 |
| 최신 릴리스 버전 | 3.18 |
| 최신 릴리스 날짜 | 2023년 4월 22일 |
| 프로그래밍 언어 | C 및 어셈블러 |
| 운영 체제 | 리눅스 |
| 플랫폼 | x86-64, ARM, Power ISA, IBM System/390 |
| 라이선스 | GNU GPL v.2 |
| 웹사이트 | CRIU 공식 웹사이트 |
| 장르 | 애플리케이션 체크포인트 |
| 발음 | /kriu/ |
|---|
-
리눅스 소프트웨어 -
구글 크롬
구글 크롬은 구글이 개발한 웹 브라우저로, 크로미엄 프로젝트를 기반으로 오픈 소스 코드를 활용하여 개발되었으며, 다양한 기능과 운영체제 지원을 통해 세계 시장 점유율 1위를 기록하지만 개인 정보 보호 정책으로 비판을 받기도 한다. -
리눅스 소프트웨어 -
HPLIP
HPLIP는 HP에서 제공하는 리눅스용 프린터 및 스캐너 드라이버이자 툴 모음으로, GUI 환경 설정 및 명령줄 유틸리티를 통해 장치 구성, 인쇄, 스캔, 팩스 등의 작업을 지원하며, 자동 설치 프로그램과 hpiod 프로세스와 연동되어 작동한다.
2. 역사
CRIU는 2011년 OpenVZ 커널 팀 리더 파벨 예멜리아노프(Pavel Emelyanov)에 의해 처음 공개되었고, 같은 해 리눅스 플럼버스 콘퍼런스에서 발표되었다. 이 프로젝트는 리눅스 커널 개발자 커뮤니티에서 논의되었으며, 앤드루 모턴은 다소 회의적인 반응을 보이기도 했다.
2.1. 개발 초기
CRIU 소프트웨어의 최초 버전은 2011년 7월 15일 OpenVZ 커널 팀 리더인 파벨 예멜리아노프(Pavel Emelyanov)에 의해 리눅스 개발자 커뮤니티에 공개되었다.
2011년 9월, 이 프로젝트는 리눅스 플럼버스 콘퍼런스에서 발표되었다. 전반적으로 참석자들은 이 프로젝트에 대해 긍정적인 시각을 보였는데, 이는 프로젝트 구현에 필요한 여러 커널 패치가 메인라인 커널에 포함된 것으로 증명된다. 그러나 앤드루 모턴은 약간 회의적이었다.
2.2. 발표 및 반응
CRIU 소프트웨어의 최초 버전은 2011년 7월 15일 OpenVZ 커널 팀 리더인 파벨 예멜리아노프에 의해 리눅스 개발자 커뮤니티에 공개되었다.
2011년 9월, 이 프로젝트는 리눅스 플럼버스 컨퍼런스에서 발표되었다. 전반적으로 참석자들은 이 프로젝트에 대해 긍정적인 시각을 보였는데, 이는 프로젝트 구현에 필요한 여러 커널 패치가 메인라인 커널에 포함된 것으로 증명된다. 그러나 앤드루 모턴은 약간 회의적인 반응을 보였다.
앤드루 모턴은 "주로 유저스페이스에서 c/r을 수행하기 위해 다양한 괴짜 헬퍼 코드를 커널에 추가한, 여러 미친 러시아인들의 프로젝트입니다... 하지만 저는 개발자들만큼 이것이 결국 잘 될 것이라고 확신하지 못합니다! 그래서 제가 그들에게 요청하는 것은, 새로운 코드의 각 부분을 CONFIG_CHECKPOINT_RESTORE 안에 래핑하는 것입니다. 따라서 결국 모든 것이 실패하고 프로젝트 전체가 실패하더라도, 모든 흔적을 삭제하는 것은 간단한 문제가 될 것입니다."라고 언급했다.
3. 기능
CRIU는 x86-64 및 ARM 아키텍처 시스템에서 사용할 수 있으며 다음과 같은 기능을 지원한다.
* 프로세스: 계층 구조, PID, 사용자 및 그룹 인증자 (UID, GID, SID 등), 시스템 능력, 스레드, 실행 및 중지 상태
* 애플리케이션 메모리: 메모리 맵 파일 및 공유 메모리
* 열린 파일
* 파이프 및 FIFO
* 유닉스 도메인 소켓
* 네트워크 소켓, TCP 소켓(ESTABLISHED 상태) 포함
* System V IPC
* 타이머
* 시그널
* 터미널
* 리눅스 커널 관련 시스템 호출: inotify, signalfd, eventfd 및 epoll
4. TCP 연결 마이그레이션
초기 프로젝트 목표 중 하나는 TCP 연결의 마이그레이션을 지원하는 것이었으며, 가장 큰 과제는 연결의 한쪽만 일시 중단했다가 복원하는 것이었다. 이는 물리 서버 간의 컨테이너(모든 활성 네트워크 연결 포함)의 라이브 마이그레이션을 수행하는 데 필요했으며, OpenVZ에서 체크포인트/복원 기능을 사용하는 주요 시나리오였다. 이 문제에 대처하기 위해 "TCP 복구 모드"라는 새로운 기능이 구현되었다. 이 기능은 리눅스 커널 메인라인 버전 3.5에 포함되었으며, 연결 반대편과 네트워크 패킷을 교환할 필요 없이 TCP 소켓을 분해하고 재구성할 수 있는 추가적인 수단을 사용자에게 제공한다.
5. 유사 프로젝트
다음은 CRIU와 비슷한 기능을 제공하는 프로젝트들이다.
* OpenVZ
* DMTCP
* BLCR
* Linux C/R
6. 활용
CRIU 도구는 OpenVZ 프로젝트의 일환으로 개발되어 커널 내 체크포인트/복원 기능을 대체하는 것을 목표로 한다. 주된 목표는 컨테이너 마이그레이션을 지원하여, 사용자가 실행 중인 프로세스와 프로세스 그룹의 현재 상태를 저장(체크포인트)하고 나중에 복원할 수 있도록 하는 것이다. 현재 이 도구는 x86-64 및 ARM 아키텍처 시스템에서 사용할 수 있으며, 다음과 같은 기능을 지원한다.
* 프로세스: 프로세스 계층 구조, PID, 사용자 및 그룹 인증자 (UID, GID, SID 등), 시스템 능력, 스레드, 실행 및 중지 상태
* 애플리케이션 메모리: 메모리 맵 파일 및 공유 메모리
* 열린 파일
* 파이프 및 FIFO
* 유닉스 도메인 소켓
* 네트워크 소켓: TCP 소켓(ESTABLISHED 상태) 포함 (아래 참조)
* System V IPC
* 타이머
* 시그널
* 터미널
* 리눅스 커널 관련 시스템 호출: inotify, signalfd, eventfd 및 epoll
2013년 9월 2일에 출시된 커널 버전 3.11 이후 리눅스 커널 메인라인에 이미 필요한 모든 기능이 통합되었기 때문에 커널 패치는 필요하지 않다.