Un invitado amd64 en ejecución ahora puede moverse entre dos hosts a través de TCP mientras continúa ejecutándose, experimentando una pausa de solo 138–171 milisegundos durante la fase final de transferencia. Este primer estado funcional para la migración en vivo en el hipervisor bhyve traslada la tecnología de un concepto abstracto a una implementación comprobable en FreeBSD 15.1. El proyecto tiene como objetivo proporcionar la infraestructura fundamental necesaria para funciones de virtualización de grado empresarial, como el mantenimiento del host y el equilibrio de carga.

Esta imagen ilustra la ejecución exitosa del prototipo de migración en vivo descrito en el artículo.
El mecanismo de migración de pre-copia
El proceso de migración comienza con una fase de pre-copia en la que el host de origen envía la memoria del invitado poblada al destino. El sistema obtiene repetidamente un mapa de bits de las páginas cambiadas desde el último escaneo, enviando solo esas páginas 'sucias' para mantener actualizado el destino.
Una vez que el conjunto de páginas sucias restantes es lo suficientemente pequeño como para cumplir con el objetivo de tiempo de inactividad configurado, bhyve pausa al invitado y sus dispositivos. Luego envía las páginas sucias finales y el estado de instantánea existente para las vCPUs, el estado del kernel y los dispositivos emulados.
El destino valida la geometría de la VM y restaura el estado. Solo después de que el destino confirma que está listo, el origen envía un punto de compromiso 'GO', momento en el cual el invitado de origen se entrega oficialmente.
“El objetivo es deliberadamente práctico: hacer posible probar, discutir y mejorar una implementación real en lugar de discutir la migración en vivo solo de forma abstracta.”
— FreeBSD bhyve Live Migration: Moving VMs Between Hosts
Capacidades actuales y validaciones
El prototipo incluye soporte para protocolos multi-vCPU, asegurando que el saludo de migración transporte el recuento correcto de vCPUs y que todos los procesadores se pausen y reanuden en sincronía. También cuenta con comprobaciones de consistencia de memoria que verifican las escrituras del invitado y de la emulación mapeada.
Para probar las rutas de pausa y restauración de dispositivos, el desarrollador implementó una carga de trabajo en el lado del invitado que escribe y ejecuta fsync en archivos repetidamente. Esto se verificó comprobando las sumas de verificación después de un reinicio en frío para asegurar que no se perdieran datos durante la transición.
El sistema maneja varios modos de falla, incluidos objetivos inalcanzables o un destino que desaparece durante la fase de pre-copia. En estos casos, el origen está diseñado para reanudar el invitado pausado para evitar la pérdida de datos.
Hoja de ruta y bloqueos de ingeniería
Aunque el prototipo muestra resultados alentadores, se deben cumplir varios requisitos de ingeniería antes de que el código pueda integrarse en FreeBSD. Estos incluyen endurecer el algoritmo de páginas sucias en el lado del kernel para asegurar que no se pierdan escrituras durante el examen de bits y definir un contrato de compatibilidad completo.
Una versión de producción estable requerirá un protocolo de transporte endurecido con autenticación y cifrado, ya que el transporte TCP actual carece de estas funciones. Además, el proyecto necesita definir supuestos específicos de coherencia y cercado para el almacenamiento compartido.
El alcance actual se limita a la arquitectura amd64 y depende del soporte experimental de instantáneas. El trabajo futuro se centrará en refinar los límites de compromiso y los efectos secundarios del lado del dispositivo antes de añadir funciones de rendimiento como la compresión o la elisión de páginas de cero (zero-page elision).