FreeBSD bhyve 실시간 가상머신 이전 프로토타입, 메모리는 실행 중 보내고 끝에 멈춘다
gyptazy 블로그 작성자는 FreeBSD 15.1 amd64의 bhyve 가상 머신을 TCP로 다른 호스트에 옮기는 WIP RFC 구현을 소개했습니다. 게스트가 실행되는 동안 변경된 메모리를 반복 전송하고 마지막 상태를 넘길 때 멈춥니다. 메모리 변경이 느린 512MiB 게스트의 중단 시간은 약 138~171ms였으며, 실험적 스냅샷 기능에 의존하는 초기 시험 결과입니다.

FreeBSD 15.1에서 bhyve로 실행 중인 amd64 가상 머신을 TCP로 다른 호스트에 옮기는 실시간 이전 프로토타입이 소개됐습니다. gyptazy 블로그 작성자는 개인 구현을 WIP RFC, 즉 작업 중인 검토 제안으로 제시했습니다. 이 구현은 bhyve의 실험적 BHYVE_SNAPSHOT 기능을 바탕으로 가상 머신을 실행하는 vmm 커널 모듈에 변경된 메모리 페이지 추적을 더하고, bhyve와 명령줄 도구 bhyvectl에 이전 절차를 추가합니다. 스냅샷 기능은 가상 CPU(vCPU), 커널, 에뮬레이션 장치의 상태를 저장해 목적지에서 복원하는 데 쓰입니다.
실시간 이전은 호스트를 정비하거나 장비를 교체할 때 가상 머신의 중단을 줄이기 위한 기능입니다. 작성자는 FreeBSD용 가상화 플랫폼을 목표로 하는 Sylve에서 클러스터 운영에 필요한 기반 기능이라고 설명합니다. 또 개인에게 무료 BSD 기반 VPS를 제공하는 BoxyBSD에서는 이전 경로가 없으면 호스트 작업이 가상 머신 중단으로 이어질 수 있다고 밝혔습니다.
이전은 먼저 메모리를 보내고, 전송 중 바뀐 부분을 다시 보내는 pre-copy 방식으로 시작합니다. 원본 호스트가 게스트 메모리를 전송한 뒤, 직전 확인 이후 변경된 페이지를 추적해 해당 부분만 반복해서 보냅니다. 게스트가 계속 실행되므로 메모리 전체를 매번 다시 보내지는 않습니다. 반복 전송으로 남은 변경 페이지가 줄면, 마지막 단계에서 멈춰 보내야 하는 데이터가 작아질 수 있습니다.
남은 변경 페이지가 설정한 중단 시간 목표에 맞는 수준으로 줄거나, 반복해도 더 줄지 않거나, 최대 반복 횟수에 도달하면 원본 호스트는 게스트와 가상 장치를 멈춥니다. 이어 마지막 변경 페이지와 vCPU·커널·에뮬레이션 장치의 스냅샷 상태를 목적지로 보냅니다. 목적지는 프로토콜 버전, 페이지 크기, 메모리 배치, vCPU 수 등을 확인한 뒤 메모리와 상태를 복원하고 준비가 끝났다고 알립니다. 그러면 원본 호스트가 GO 메시지를 보내 이전을 확정하고, 목적지가 게스트를 시작합니다. 설계상 GO 전 실패하면 원본 게스트를 재개하며, 목적지는 GO를 받지 못하면 게스트를 시작하지 않습니다.
메모리를 실행 중 반복 전송하는 방식과 별도로, 게스트를 멈춘 뒤 메모리와 상태를 옮기는 stop-and-copy 방식도 제공됩니다. 작성자는 두 호스트 환경에서 반복 이전을 하고, 게스트 메모리를 계속 다시 쓰는 작업과 파일을 반복해서 쓰고 디스크에 반영한 뒤 체크섬을 확인하는 작업을 시험했다고 밝혔습니다. 목적지의 이전 거부, 연결할 수 없는 목적지, 이전 중 목적지가 사라지는 상황도 시험 대상에 포함했습니다.
메모리 변경이 천천히 일어나는 512MiB 게스트에서는 관측된 중단 시간이 약 138~171ms였습니다. 반면 메모리가 빠르게 바뀌면 전송 중 새로 변경되는 페이지를 따라잡지 못해 pre-copy가 수렴하지 않을 수 있습니다. 이 구현은 그런 경우 stop-and-copy로 이전을 마치며, 더 긴 중단이 생깁니다. 작성자는 해당 수치를 두 호스트 시험 환경에서 얻은 초기 공학 결과로 제시했으며, 운영 환경 지원 약속이나 완전한 정확성 증명으로 제시하지 않습니다.
현재 지원 범위는 FreeBSD 15.1의 amd64 가상 머신이며, 실험적인 BHYVE_SNAPSHOT 기능과 스냅샷을 지원하는 에뮬레이션 장치에 의존합니다. PCI 패스스루 장치는 이전할 수 없습니다. 프로토콜은 vCPU 수를 교환하고 수가 맞지 않으면 목적지가 이전을 거부하며, 이전 중에는 게스트의 모든 vCPU를 멈췄다가 재개합니다. 다만 공개된 시험 환경은 주로 단일 vCPU 게스트를 사용했으며, 다중 vCPU의 부하·경쟁 상황과 경합 조건을 더 시험해야 합니다.
전송 안전성과 호스트 간 호환성도 아직 제한적입니다. 현재 TCP 전송에는 인증과 암호화가 없고, 목적지 검사는 프로토콜 버전과 페이지 크기, 메모리 배치, vCPU 수 같은 기본 항목에 머뭅니다. CPU 기능, bhyve·vmm와 스냅샷 형식, 장치 구성, 공유 저장소가 서로 호환되는지 확인하는 기준을 더 마련해야 합니다. 공유 저장소의 일관성·내구성·펜싱 조건, tap·브리지와 MAC·IP 주소의 이동, 네트워크 트래픽 전환도 정리할 과제입니다. 작성자는 FreeBSD 본 프로젝트에 반영하는 논의를 진전시키기 전에 변경 페이지 추적의 정확성, 호환성 검사, 전송 안전성, 반복 가능한 자동 회귀 시험을 우선하겠다고 밝혔습니다.