[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 | wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/armhf/docker-ce_17.06.0~ce-0~ubuntu_armhf.deb |
3. Criu 설치
1 | apt install criu |
위 코드로도 설치가 가능하나, 아래로 설치하겠음. (특정 버전 설치를 위함)
1 | curl -O -sSL http://download.openvz.org/criu/criu-3.11.tar.bz2 |
4. Kernel config 수정
커널의 설정을 criu linux kernel 이 사이트대로 수정해야하지만, 이것은 x86_64 용인 것같고, arm용으로 설정을 약간 더 손봤다.
1 | CONFIG_CHECKPOINT_RESTORE=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 | sudo docker run --name counter busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done' |
[RPI] 라즈베리파이에서 CRIU 작동시키기