1、PDF外文:http:/ 4004 字 虚拟机 快速透明的迁移 摘要 本文描述了一个系统的设计和实现,这个系统通过使用虚拟机技术来实现应用程序的快速、透明迁移。这个系统是第一个能够将未修改的应用程序迁移至未修改的基于 x86 的主流操作系统上,包括 Windows, Linux 和 Novell NetWare等。不管是应用程序还是与应用程序通讯的客户端都感觉不到这种迁移。从测试数据我们可以看出,这种迁移导致的应用程序的暂停时间不超过 1 秒。 1. 绪论 快速透明的 迁移能够让整个系统在物理机器上实现负载均衡,同时通过将应用程序
2、从需要服务和更新的机器 上迁移到别的机器上,可以提高系统的可用性和服务性。本文介绍了一个叫 VMotion 的系统,自从 2003 年以来,它都是 VMware VirtualCenter 中的一个组成部分 。将来 VMware 的产品会使用 VMotion 在大量服务器上实现自动负载均衡。 本文做了以下贡献: 1. 本文 第一次 描述了能够在现有的应用程序和操作系统上实现虚拟机的快速透明迁移的系统,而应用程序和操作系统都不需要修改。 2. 本文第一次使用标准测试程序来测试数百个虚拟机迁移的性能。 3. 本文描述了虚拟机迁移时的开销和所需资源。
3、 2. 虚拟机迁移 虚拟机迁移需要 一个正在运行的虚拟机,并将它从一个物理机器迁移到另一个物理机器。这种迁移对上层的 guest OS,运行在 guest OS 上的应用程序以及虚拟机的远程客户端来说必须是透明的。用户 几乎察觉不到什么变化,唯一可以感觉到的应该是在迁移过程中程序运行速度会变慢,而在迁移后系统的性能可能会提高,那是因为虚拟机迁移到一个拥有更多可用资源的机器上了。 本文介绍的虚拟机迁移系统是 VMware VirtualCenter 产品中的一部分,它管理着 VMware ESX Server。 VMware ESX Server 的虚拟化平台
4、 由 以下两部分构成:虚拟机监视器( VMM)和虚拟机内核( vmkernel)。 Guest OS 如 Windows、 Linux都运行在虚拟化平台的最上层(见图 1)。虚拟机监视器处理所有运行在虚拟 CPU上的指令并且模拟所有的虚拟设备。虚拟机内核调度虚拟机的运行并分配和管理虚拟机所需的资源。 图 1.VMware ESX Server 的虚拟机平台层次结构 通过封装虚拟机运行时所有软硬件状态,虚拟机提供了一个很好的平台来实现迁移。当虚拟机进行迁移时需要处理以下三种状态: 1. 虚拟设备的状态,包括 CPU、主板、网络和存储适配器 、软盘和显卡的状态
5、。 2. 设备的外部连接状态,包括网络、 USB 设备、 SCSI 存储设备、可移动媒体设备如 CDROM。 3. 虚拟机的物理内存。 实际上,虚拟机的迁移是个复杂的过程: 1. 迁移过程的初始化:选择需要迁移的虚拟机以及迁移的目标机。 2. 当虚拟机正在运行时,预拷贝虚拟机的内存状态到目标机。 3. 暂停虚拟机并将非存储状态发送到目标机。 4. 将虚拟机的控制状态发送到目标机并在目标机上恢复虚拟机的执行。 5. 发送剩余的存储状态到目标机, 删除源机器上的依赖关系。 剩下的章节我们
6、将谈到组成虚拟机最重要的三个组成部分的迁移过程,它们是: 网络、 SCSI 存储设备和物理内存。 网络: 为了实现透明的虚拟机迁移,迁移前开放的网络连接在迁移完成后仍需对外开放, VMware ESX Server 的网络结构使 这种迁移成为了可能。 虚拟以太网卡是 VMware ESX Server 虚拟平台的一部分,就像物理网卡一样,虚拟网卡也有一个在本地网络上独一无二的 MAC 地址 。一个虚拟网卡可以对应一个或多个物理网卡,虚拟内核管理着这种映射关系。同样地,多个虚拟机的网卡也可以映射到同一个物理网卡。 由于每一个虚拟网卡都有一个与物理网卡独立的
7、MAC 地址,只要目标机与源机器 位于同一个子网中,我们就可以迁移正在运行的虚拟机而保持网络连接活跃。 SCSI 存储: 我们使用存储 域网络( SAN)或 NAS 来迁移 SCSI 设备的连接状态。假设所有迁移中的物理机器都连接到相同的 SAN 或 NAS 服务上。这样我们可以通过在目标机上重新恢复磁盘的连接状态来迁移 SCSI 磁盘。 物理内存: 虚拟机上物理内存的状态是迁移过程中需要处理的最重要 的一个状态。通过暂停虚拟机来传输内存状态会使虚拟很长时间都不能对外提供服务。我们需要处理的问题是如何才能在虚拟机运行时将内存状态从源机器拷贝到目标机上。 通过改变管理虚拟
8、机内 存的方式就可以实现动态迁移。 每个虚拟机都期望能有一段映射到固定地址范围的内存空间, VMware ESX Server 动态的为每个虚拟机分配实际机器上的内存。这需要增加一个间接映射层来完成这一功能。所有直接对虚拟机内存进行的写操作和对页表的写操作都将被VMM 截获,然后 VMM 将虚拟机物理地址映射到机器地址。一旦设置好虚拟机的内存映射部件和页表,虚拟机在运行过程中就不会在地址翻译上产生额外的开销。 当虚拟机在源机器上运行时,我们使用间接映射层来完成预拷贝。第一步就是拷贝虚拟机所有的物理内存。在拷贝之前,将每一个 页面设为只读,因此任何的写操作都会被虚拟机监视
9、器检测到。 当第一步完成时,有些页面已经被修改,这些被修改的页面将拷贝到目标机上,而此时虚拟机仍然在运行。这一过程将重复多次,直到被修改的页面数足够小或数量不再发生变化。 当被修改的页面大小小于 16MB 或被修改的页面大小的减少量小于 1MB 时,停止预拷贝。 3.性能评测 本节我们将研究上文提到的虚拟机迁移的性能。我们不但测试 虚拟机 迁移时 不能对外服务的时间, 而且测试了迁移对 CPU 在资源分配上的影响。更重要的是,在高负荷的情况下虚拟机仍然能实现快速透明的迁移。 3.1 开始实验 所有的实验都是在一组 Dell 1
10、600SC 服务器上进行 的 ,每个服务器都有两个Intel Xeon 处理器和 1GB 内存。 所有服务器都通过 Qlogic 2300 光纤通道卡连接在 EMC CLARiiON 存储域网络上。他们使用 Intel Pro/1000 千兆网卡来传输虚拟机的状态。 每一次实验都是在两个服务器之间进行,每 5 秒迁移一个虚拟机,累积迁移 50 次。 实验中的虚拟机都在进行以下工作: 空闲操作: 一个空闲的 Windows Server 2000 编译内核 : 在 RedHat 7.2 上编译 Linux 内核 仿真程序: 仿真程序运行在 Wind
11、ows Server 2000 系统上。仿真程序会启动3 个工作线程来完成磁盘 I/O,每个线程会对 500MB 的文件进行至少 5 次以上的写操作。 memtest86: Memtest86 会不断地对内存进行读写操作,它会在循环里运行1 号测试程序。 dhhammer: Database Hammer 是一个运行在 Windows Server 2000 上的数据库装载器,它使用客户机 /服务器体系结构。当客户端运行在第三方物理机器上时,服务器正进行迁移。 除了在 3, 4 节进行 测评时,目的机上也运行有虚拟机, 其他几种测试中只有源主机上运行有虚拟机
12、。 3.2 迁移所用时间 虚拟机迁移会在几个不同步骤之间依次进行,但我们最感兴趣的并不是它的迁移过程,而是迁移过程中虚拟机的停机时间。这个时间必须足够短, 以避免服务性能产生太大的损失。我们同样还关心虚拟机在端到端之间迁移时所花费的时间。 停机时间: 整个 停机时间 就是 虚拟机在源机器上停止 运行的时间, 主要 由以下几部分构成:传输设备状态到目的主机上的时间、 装载设备状态的时间、拷贝所有剩余的内存页面和正在装载的设备状态的时间。 从图 2 我们可以看出, 除了 memtest86 测 试程序以外,运行其他测试程序的虚拟机的迁移时间都小 于 1 秒。同时运行 memtest86 测试程序的虚拟机 迁移时所 需迁移 的内存大小 有所增加。由于 memtest86 比较特殊,在预拷贝时所有页面都会被修改,所以虚拟机的停机时间就等于传输整个内存状态所需的时间。