一个正在运行的 amd64 虚拟机现在可以在两个主机之间通过 TCP 进行移动,同时保持运行状态,仅在最后的传输阶段经历 138–171 毫秒的暂停。bhyve 虚拟机管理程序在热迁移方面的这一首个工作状态,将该技术从抽象概念转变为 FreeBSD 15.1 上的可测试实现。该项目旨在提供企业级虚拟化功能(如主机维护和负载均衡)所需的底层基础设施。

这张图片展示了文章中描述的热迁移原型的成功执行。
预复制迁移机制
迁移过程从预复制阶段开始,源主机将已填充的虚拟机内存发送到目标主机。系统反复获取自上次扫描以来更改的页面位图,仅发送这些“脏”页面以保持目标主机更新。
一旦剩余的脏页面集小到足以满足配置的停机目标,bhyve 就会暂停虚拟机及其设备。然后,它会发送最后的脏页面以及 vCPU、内核状态和模拟设备的现有快照状态。
目标主机验证虚拟机几何结构并恢复状态。只有在目标主机确认准备就绪后,源主机才会发送“GO”提交点,此时源虚拟机才正式移交。
“目标是务实且明确的:让人们能够测试、讨论并改进真实的实现,而不是仅仅在抽象层面讨论热迁移。”
— FreeBSD bhyve Live Migration: Moving VMs Between Hosts
当前能力与验证
该原型包括多 vCPU 协议支持,确保迁移握手携带正确的 vCPU 计数,并且所有处理器同步暂停和恢复。它还具有内存一致性检查,用于验证虚拟机和映射模拟的写入操作。
为了测试设备的暂停和恢复路径,开发人员实现了一个虚拟机端的负载,该负载反复写入并 fsync 文件。通过在冷重启后检查校验和来验证这一点,以确保在过渡过程中没有数据丢失。
系统处理各种故障模式,包括目标不可达或目标在预复制阶段消失。在这些情况下,源主机被设计为恢复暂停的虚拟机,以防止数据丢失。
路线图与工程障碍
虽然原型显示出令人鼓舞的结果,但在代码能够合并到 FreeBSD 主线之前,必须满足若干工程要求。这些要求包括强化内核端的脏页面算法,以确保在位检查期间不丢失任何写入,并定义完整的兼容性契约。
稳定的生产版本将需要一个具有身份验证和加密功能的强化传输协议,因为当前的 TCP 传输缺乏这些功能。此外,该项目还需要为共享存储定义特定的相干性和隔离假设。
目前的范围仅限于 amd64 架构,并依赖于实验性的快照支持。未来的工作将集中在完善提交和设备端副作用边界,然后再添加压缩或零页省略等性能功能。