[RPI] 라즈베리파이에서 CRIU 작동시키기

[RPI] 라즈베리파이에서 CRIU 작동시키기

라즈베리파이, OS, Kernel, Docker, Criu… 이 다섯개의 각 버전들은 매우 다양하며 checkpoint와 restore 기능이 작동하는 적당한 버전을 찾기까지 많은 노가다 작업이 있었다.

사용 버전

기기: 라즈베리파이 3B

OS: Ubuntu Mate 16.04.2

Kernel: rpi-4.12.y

Docker version: 17.06.0~CE

Criu version: 3.11


작업

1. 기기에 OS설치

라즈베리파이 3B버전을 이용한 이유는 Ubuntu Mate 16.04버전이 4B버전을 지원하지 않아서다.

16.04버전을 사용하려는 이유를 대충 요약하자면 criu를 사용할 때, 안정적으로 동작한 Docker의 버전은 17.X이였고, 이 버전은 우분투 18.X 버전부터 정상적으로 동작하지 않았다. 그래서 16.04를 사용한다.

2. Docker 설치

wget을 이용하여 다운, dpkg를 이용하여 설치

1
2
3
# wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/armhf/docker-ce_17.06.0~ce-0~ubuntu_armhf.deb

# dpkg -i docker-ce_17.06.0~ce-0~ubuntu_armhf.deb

3. Criu 설치

1
apt install criu

위 코드로도 설치가 가능하나, 아래로 설치하겠음. (특정 버전 설치를 위함)

1
2
3
4
5
6
curl -O -sSL http://download.openvz.org/criu/criu-3.11.tar.bz2
tar xjf criu-3.11.tar.bz2
cd criu-3.11
make
cp ./criu/criu /usr/local/bin
cd

4. Kernel config 수정

커널의 설정을 criu linux kernel 이 사이트대로 수정해야하지만, 이것은 x86_64 용인 것같고, arm용으로 설정을 약간 더 손봤다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_FHANDLE=y
CONFIG_EVENTFD=y
CONFIG_EPOLL=y
CONFIG_UNIX_DIAG=y
CONFIG_INET_DIAG=y
CONFIG_INET_UDP_DIAG=m
CONFIG_PACKET_DIAG=y
CONFIG_NETLINK_DIAG=y
CONFIG_NETFILTER_XT_MARK=m
CONFIG_TUN=y

CONFIG_PROC_PAGE_MONITOR=y
CONFIG_VDSO=n
CONFIG_IDLE_PAGE_TRACKING=y

참고

라즈베리파이… ARM는 soft-dirty기능을 미지원 à “CONFIG_MEM_SOFT_DIRTY”가 없음

대신 “CONFIG_PROC_PAGE_MONITOR=y” 이는 Dumpee 메모리 레이아웃에 대한 정보를 얻기 위해 필요하다고 함.

그리고 ARM에는 VDSO라는 매개변수가 없으므로 “CONFIG_VDSO=n” 셋팅을 해야 VDSO 때문에 덤프가 실패하는 것을 피할 수 있음. à 비활성화 시, signal trampoline(?)이 ARM의 VDSO페이지가 아닌 SIG페이지에 자동으로 배치됨.

컴파일 후에 적용하고 재부팅을 하면 기본 설정은 끝이다.


테스트

docker와 busy box를 이용하여 체크포인트와 복구를 테스트

1
2
3
4
5
sudo docker run --name counter busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'

sudo docker checkpoint create counter cp1

sudo docker start -a --checkpoint cp1 counter

테스트영상

[RPI] 라즈베리파이에서 CRIU 작동시키기

https://devch.co.kr/2021/07/29/RASP-CRIU-21-07-29/

Author

Chaehyeon Lee

Posted on

2021-07-29

Updated on

2021-07-30

Licensed under

댓글