核心概述
实时迁移(Live Migration)是云基础设施的基石。KVM 体系主要通过 QEMU 实现,核心算法包括:
- Pre-copy (迭代预拷贝):主流方案,通过脏页跟踪不断缩小状态差异。
- Post-copy (后拷贝):利用
userfaultfd处理迁移不收敛的特殊场景。- 底层支撑:依赖 Intel PML 硬件加速脏页记录,以及 Gratuitous ARP 实现网络无缝切换。
KVM 虚拟机实时迁移技术深度解析:实现原理与核心机制
实时迁移(Live Migration)是指将一个正在运行的虚拟机(Guest OS)从一台物理主机(Source Host)迁移到另一台物理主机(Destination Host),同时保证业务不中断,停机时间(Downtime)通常在毫秒级。
一、 核心算法:Iterative Pre-copy(迭代预拷贝)
这是 KVM 目前最主流、默认的迁移算法。其核心思想是:在虚拟机继续运行的同时,不断将内存数据传输到目标端。
1. 迁移过程详解
- 准备阶段:目标端启动一个空的 QEMU 进程,通过
-incoming参数进入数据接收模式。 - 迭代传输阶段:
- 第一轮:将虚拟机的所有内存页(RAM)全部传输到目标端。由于传输需要时间,此时 Guest 仍在运行,并不断产生新的写操作(脏页)。
- 后续轮次:仅传输上一轮产生的脏页(Dirty Pages)。
- 终止判定:当脏页产生的速度小于传输速度,或者脏页数量减少到一定阈值时,进入最后阶段。
- 停机拷贝阶段(Stop and Copy):
- 暂停源端虚拟机,确保不再产生新数据。
- 传输剩余的最后少量脏页。
- 传输 vCPU 状态(通用寄存器、控制寄存器等)和设备状态(VirtIO 状态、中断控制器等)。
- 目标端恢复:目标端加载状态,恢复运行。
二、 脏页跟踪机制:底层如何实现?
要实现迭代传输,KVM 必须能够准确感知哪些内存被“写”过了。
1. 软件模拟(基于页表写保护)
在早期或不支持硬件特性的环境中:
- KVM 会将 Guest 的所有二级页表项(EPT/NPT)标记为“只读”。
- 当 Guest 试图写内存时,触发分页异常,导致 VM-Exit。
- KVM 在**脏页位图(Dirty Bitmap)**中标记该页,并将其设为可写。
- QEMU 通过 ioctl 周期性地获取该位图并清理,从而识别需要重传的页。
- 痛点:每次写操作都要 VM-Exit,性能损耗极大。
2. 硬件辅助:Intel PML (Page Modification Logging)
现代 CPU 提供了硬件级支持。
- 原理:在 VMCS 中配置一个 PML 地址。当 Guest 写内存时,硬件 MMU 直接将页索引写入该日志缓冲区。
- 优点:写操作几乎没有额外开销,极大提升了写密集型业务在迁移时的稳定性。
三、 迁移不收敛的终极武器:Post-copy
如果 Guest 的写速度持续超过带宽(如高负载 Redis),Pre-copy 会陷入死循环。此时需要 Post-copy(后拷贝) 技术。
1. 核心流程
- 快速切换:在 Pre-copy 进行一轮传输后,强行停止源端虚拟机。
- 状态先行:仅传输 vCPU 状态和关键设备状态。
- 目标端抢先启动:目标端虚拟机立刻开始运行。
- 按需索取(On-demand Paging):
- 利用 userfaultfd 拦截缺页中断。
- 当虚拟机访问未到位内存页时,目标端向源端发出请求,源端通过网络实时发回该页。
- 后台推送:源端在空闲时持续把剩余内存推送到目标端,直到同步完成。
四、 外部资源:网络与存储的无缝衔接
-
存储(Storage):
-
共享存储:迁移时仅切换磁盘文件锁(Locking)。
-
无共享存储(Shared-Nothing / Block Migration): 这是最复杂的情况,通常通过 Drive Mirroring 和 NBD (Network Block Device) 协议实现。
四阶段实现流程:
- 全量块拷贝 (Bulk Copy):源端 QEMU 读取本地磁盘所有扇区并发送至目标端,同时维护一个磁盘脏块位图。
- 脏块迭代 (Iterative Sync):全量拷贝期间产生的写操作被记录为脏块,随后进行多轮迭代传输。
- 主动镜像 (Active Mirroring):当差异极小时,QEMU 进入同步模式。Guest 的每一次写 I/O 会同时发送到本地和目标端。
- 切断与转向 (Pivot):内存同步完成后,停止源端 I/O,目标端 QEMU 接管本地磁盘文件。
Shared-Nothing 迁移架构图:
源端主机 (Source) 目标端主机 (Dest) +-------------------+ +-------------------+ | 虚拟机 (Guest) | | | +---------|---------+ | | V | | +---------|---------+ | | | QEMU Block Layer | | | | (Mirror Driver) | | | +----/----------\---+ +---------^---------+ / \ | NBD Server | / \----------(网络)------->| (写入目标磁盘) | V +---------|---------+ [ 本地磁盘镜像 ] [ 目标磁盘镜像 ]代价分析:准备时间极长(1TB 磁盘在万兆网下需 ~20 分钟),且由于“主动镜像”阶段的同步写特性,Guest 的磁盘写延迟会显著增加。
-
-
网络(Network):
- 目标端运行后发送 免费 ARP (Gratuitous ARP)。
- 强制更新物理交换机的 MAC 地址表,将流量导入新端口。
五、 技术对比总结
| 特性 | Pre-copy (主流模式) | Post-copy (应急模式) |
|---|---|---|
| 数据安全性 | 极高(失败后源端可无损恢复) | 中(网络中断会导致 Guest 崩溃) |
| 迁移成功率 | 依赖带宽与写速率的博弈 | 100% 成功(强制收敛) |
| 停机时间 | 毫秒级(但不可预测) | 极短且恒定(微秒级切换) |
| 核心技术 | Dirty Logging / PML | userfaultfd / Page Fault |
| 典型场景 | 大多数通用云服务器 | 内存巨大且写极其频繁的数据库 |