FreeBSD 上的 bhyve 热迁移:预拷贝加脏页跟踪的第一个可用实现
来源:gyptazy.com — 2026-11-15
📋 概述
gyptazy 发布了 FreeBSD 15.1 上 bhyve 虚拟机热迁移的第一个可用状态:一个正在运行的 amd64 guest 可以通过 TCP 在两台主机间迁移,只在最后的 stop-and-copy 阶段短暂暂停。实现建立在 bhyve 实验性快照支持之上,在 vmm 内核模块里加入脏页跟踪,并在 bhyve 与 bhyvectl 中加入迁移协议。流程是:先 pre-copy 发全部内存,之后反复取「自上次扫描以来变更」的位图只发脏页;当剩余脏页满足停机目标、不再收缩或达轮数上限时暂停 guest,发送最终脏页和 vCPU/内核/设备快照;目标端校验并恢复后回报就绪,源端才发 GO 提交点,GO 之前失败可以回源继续跑。动机是 Sylve(FreeBSD 上的 Proxmox 替代品)与免费 VPS 项目 BoxyBSD。
🔑 核心要点
- 提交点是显式的 GO 消息:目标端收到 GO 才启动 guest,收不到就不启动,源端在 GO 之前失败可恢复被暂停的 guest。
- 脏页跟踪同时覆盖 guest 写入与映射仿真写入,vmm 的 write hold 单独记录,测试用重写并校验内存的负载检测漏页。
- 另有 warm stop-and-copy 模式,既可做兜底,也可作为性能对比基线。
- 已测:多 vCPU 握手(数量不匹配目标端拒绝)、内存一致性、guest 侧反复写文件并 fsync 校验、目标端拒绝/不可达/中途消失等故障路径。
- 多 vCPU 的压力与竞态测试尚未完成,目前公开测试床主要只跑单 vCPU,作者据此明确限制了结论范围。
💡 金句
Migration is not an optional convenience in that kind of platform; it is one of the capabilities that makes clustered operations practical.
← 返回 Lobsters 首页
👍 0
👎 0