深入理解虚拟机原理与实现

现代计算机系统在系统的物理资源大大增加的同时,其物理实现也变得极为复杂,在可扩展性、可靠性、可用性、可管理性和安全性等方面都遇到了难以用单点体系结构技术来解决的一系列问题。

虚拟机用一层软件包裹硬件,从而使得计算机灵活可变。虚拟机正在发展的一些虚拟机新技术能够实现在同一种硬件上运行多个操作系统和执行多套指令集,并允许程序在执行过程中切换机器。同时改变计算机和网络系统及编程语言的实现方法,甚至排斥不安全的代码,在应对一系列问题上越来越显现出前所未有的重要性。

一、虚拟机原理与模型

1、虚拟机简介

虚拟机顾名思义就是虚拟出来的计算机,或指由软件提供且运行于物理计算机上模拟出来具有完整硬件系统功能和运行在一个完全隔离环境中的完整的计算机系统或称为“逻辑上的计算机”,它与真实的计算机几乎完全一样。

也就是说人们在当前使用的操作系统基础上安装并利用专门的虚拟机软件就可以虚拟出若干台计算机来,每台有各自的CPU、内存、硬盘、光驱、软驱、网卡、声卡、键盘、鼠标、串口、并口和USB口等“硬件”设备。当然这些硬件都是虚拟的,实质上还是在使用物理计算机中相应的硬件。这些虚拟的计算机可以独立运行,安装各自的操作系统、应用软件和杀毒软件等,可以如平时使用的计算机一样使用它们。

虚拟机在软件和硬件之间引入虚拟层,可为应用提供独立的运行环境。它屏蔽硬件平台的动态性、分布性和异构性,支持硬件资源的共享和复用并为每个用户提供属于个人的独立和隔离的计算环境;同时,为管理员提供硬件资源和软件资源的集中管理。

从静态的角度看,虚拟机是一类系统软件,又称为“虚拟机监视器”(Virtual Machine Monitor,VMM)。其核心功能是截获软件对硬件接口的调用,并重新解释为对虚拟硬件的访问;从动态的角度看,虚拟机是一个独立运行的计算机系统,包括操作系统、应用程序和系统当前的运行状态等。

虚拟机是支持多操作系统并行运行在单台物理服务器中的一种系统,能够提供更加有效的底层硬件使用。在一台电脑上将硬盘和内存的一部分拿出来虚拟出若干台机器,每台机器可以运行单独的操作系统而互不干扰。

用户可以像使用普通机器一样对它们执行分区、格式化、安装操作系统、安装应用程序和软件及访问网络资源等操作,还可以将多个操作系统联成一个网络。当在虚拟机中评测软件时系统可能会崩溃,但是崩溃的只是虚拟机中的操作系统。而不是物理计算机中的操作系统,并且使用虚拟机的恢复功能可以立即恢复虚拟机到安装软件之前的状态。

在虚拟系统崩溃之后也可直接删除而不影响本机系统;同样本机系统崩溃后也不影响虚拟系统,可以下次重装后再加入以前做的虚拟系统。如果在某虚拟机中出现程序冻冻结现象,则并不会影响运行在虚拟机外的程序操作和操作系统的正常工作。虚拟机软件不需要重开机就能在同一台电脑使用多个OS,不但方便,而且安全。

一台物理机上能虚拟出多少台虚拟机取决于物理机的硬盘容量,如果为一台虚拟机分配4 GB的硬盘空间,可以一次为其分配4 GB的物理硬盘空间供其使用。也可以让虚拟机根据当前需要逐步增大对物理硬盘空间的占用,即随着虚拟机硬盘中装的软件逐步增多而逐步增大对物理硬盘空间的占用,甚至可以在创建虚拟机后根据需要增加一个虚拟硬盘。

能同时开机的虚拟机数量取决于物理机硬件配置,主要是CPU和内存,尤其是内存。因为虚拟机的CPU和内存这两个关键硬件资源都是使用物理机的CPU和内存,所以同时运行的虚拟机数量越多,对物理机的CPU和内存消耗也越大且速度越慢。因此划分虚拟机越多,各台虚拟机所分配的CPU、内存和存储空间资源也越少。由于组建虚拟机通常是配置越高越好,因此广泛使用于服务器等行业。

虚拟机系统与多启动系统不同,后者在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。虚拟机实现了多操作系统的真正“同时”运行,多个操作系统在主系统的平台上如同标准Windows应用程序那样切换。而且每个操作系统都可以进行虚拟分区和配置,甚至可以通过(虚拟)网卡将几台虚拟机连接为一个局域网。

虚拟机实现了程序与操作系统和硬件的分离,从而实现了应用程序与平台的无关性。虚拟机在任何平台上都提供给编译程序一个共同的接口,编译程序只要面向虚拟机生成虚拟机能够识别的代码即可由其解释执行。由多台虚拟机系统组成虚拟机集群更是提供了系统健壮性和高可用性的保证,使得硬件资源更加合理灵活地应用。

虚拟机技术的诞生为我们提供了更多的选择,为开发商提供了扩展性良好和程序实现跨平台的强大平台,所以未来虚拟机技术会成为大中型软件开发者主要使用的技术之一。

2、虚拟机相关概念

1. 虚拟机应用程序

可以在一台计算机上模拟出若干台计算机的软件。

2. 宿主计算机(Host PC)

指物理存在并安装虚拟机软件的计算机,其中安装的操作系统被称为“宿主操作系统”(Host OS)。

3. 客户计算机(Guest PC)

指运行在虚拟机上的操作系统,称为“客户机操作系统”(Guest OS)。

有关文件的扩展名如下:

  • .vmc:虚拟PC和虚拟服务器用于存储虚拟机配置的文件扩展名。
  • .vhd:虚拟PC和Virtual 服务器用于存储虚拟机硬盘数据的文件扩展名。
  • .vsv:虚拟PC和虚拟服务器用于存储保存虚拟机状态的文件扩展名。
  • .vnc:虚拟服务器用于存储虚拟网络配置的文件扩展名。
  • .vud:虚拟PC和虚拟服务器用于存储虚拟机恢复磁盘数据的文件扩展名。

3、虚拟机的特点

虚拟机的特点如下:

1. 透明性(transparent)

使部署在虚拟机的应用程序不用修改即可直接运行在不同底层物理资源之上,虚拟机可以为软件提供运行时的隔离和在线迁移等功能,而且无须修改软件。虚拟机为软件屏蔽了底层硬件平台的异构性、多样性和复杂性,支持软件跨平台运行,增强了软件的可移植性。

2. 隔离性(isolation)

同一台服务器上模拟多台虚拟机实例,不同虚拟机部署不同类型的操作系统、库文件和应用程序并共享使用底层物理资源。这些虚拟机实例相互之间完全隔离,它们可以各自安装不同版本的软件。而不需要考虑不同虚拟机实例中软件的兼容性或冲突之类的问题,内部运行的程序也不会相互影响,而且某台虚拟机系统自身内部的错误和恶意行为或失效不会导致另一台虚拟机实例出错。

3. 封装性(encapsulation)

虚拟机实例中所有软件都封装在一个单独的虚拟硬盘文件(虚拟机映像)中,通过这种封装形式虚拟机的备份、安装、复制和分发都可以通过复制虚拟硬盘文件,并调用虚拟机监控器进行加载的方式实现。从而有效地降低了软件管理和配置的难度,提高了软件部署的方便性和灵活性。

4. 可定制性(Customization)

虚拟机监控器利用特定格式的配置文件配置虚拟机硬件信息和相关系统,用户可以编辑配置文件来控制分配给特定虚拟机的硬件资源,如 CPU 个数,以及内存和磁盘空间的大小等;此外,用户可以在虚拟机中安装所需的操作系统和应用软件,并进行相应的系统配置。

5. 可管理性(manageability)

虚拟机的操作,如启动、关闭、挂起和恢复,甚至硬件的挂载、删除和修改都可以通过调用相关功能接口实现。用户可以通过程序管理和控制虚拟机的硬件,将虚拟机编程接口封装成远程服务可以实现硬件资源的远程管理和集中管理;此外,虚拟机的在线迁移功能同样体现了可管理性,运行的虚拟机实例可以在程序控制下迁移软件运行的硬件平台。

4、虚拟机的优势

虚拟机本身就具有许多突出的优点,可以降低应用部署和维护的成本。从而提高软件的可靠性、易管理性、安全性、易测性及单台服务器的利用率,因此虚拟机技术的发展逐渐受到人们的热切关注。

1. 降低总拥有成本

不需要承担服务器高额的购置和托管费用就可以利用其搭建一个完全独立的网站,并且可以灵活地根据网站流量进行虚拟主机的扩容。目前提供虚拟主机服务的网站数不胜数,网络上也有一些提供免费虚拟主机的站点。借助虚拟机一个硬件平台可以运行不同操作系统的多个例程,其中每个例程均在自己的隔离区中运行,由此共享对硬件资源的访问;同时数据中心的内部空间和电源使用得到了更有效的管理,节省了安排专业系统管理人员等多方面的费用,从而使总拥有成本显著降低。

2. 提高可管理性、可靠性与可用性

采用虚拟化技术的服务器可以根据工作载的要求接受来自其他系统的虚拟机移植;此外,虚拟机解决方案可以在单一物理系统中提供可靠的故障切换方案和系统备份。

3. 增强安全性和故障隔离

虚拟化可以通过隔离不同虚拟机来提供出色的安全性。通过在不同例程中运行各种应用,一台虚拟机不会遭到另一台虚拟机中病毒或恶意软件的破坏,恶意软件造成的任何破坏均会被限制在其所运行的特定会话中;同样,如果应用由于漏洞或错误而挂起,也只会锁定其自己的会话,之后该虚拟机可在不影响系统中运行的任何其他虚拟机的情况下重新启动;此外,它还可以提供各种安全方案,如针对不同用户登录的不同虚拟机等。

4. 提高工作效率

可以安装各种演示环境,便于做各种例子;保证主机的快速运行,减少不必要的垃圾安装程序和偶尔使用的程序,或者跟踪插件的程序在虚拟机上运行,在不同虚拟机上的不同目标操作系统中运行多个会话将轻而易举;能避免每次重新安装,并通过在隔离虚拟机上执行任务来缩短停机时间和周转时间。

5. 轻松移植应用程序

如果某个应用程序和新版本的操作系统不兼容,即必须运行在某个旧版本的操作系统中,那么可以在物理计算机的宿主操作系统之上运行虚拟机软件。然后在虚拟机中安装旧版本的操作系统,从而运行这个应用程序,这样避免了为了运行此应用程序而专门使用一台计算机。

6. 便于测试应用程序、操作系统和网络部署等

通过虚拟机可以在一台物理计算机上轻松地完成多种环境下的应用程序和操作系统的测试,也可以模拟多台计算机组成的网络,从而完成各种网络部署的测试。

7. 快捷方便

不管用户身处何处,“虚拟主机”服务都能使单位各部门拥有自己的域名及专属网站,无需租用专线通过文件传送协议(File Transfer Protocol,FTP)的方式,并可随时更新自己的主页内容。也无需操心维护专业的技术支持,从而使用户身处信息时代的前端运筹帷幄和决策前程。

5、虚拟机应用场景

虚拟机技术在IT行业已经得到了广泛的应用,主要体现在以下几个方面。

1. 服务器合并

随着服务器数量的增加,管理这些服务器的工作量也越来越大。而每台服务器中运行的应用数量却很少,导致服务器的利用率很低,甚至经常不超过30%。

利用虚拟化技术可将虚拟机转化成虚拟服务器,虚拟服务器技术非常适合用来解决这方面的困境。该技术可以在一台物理服务器中运行多台虚拟出来的服务器,每个应用可以安装在指定的虚拟服务器中,与其他应用隔离开来。但实际上这些虚拟服务器共享一台物理服务器的硬件资源,并且由虚拟机管理程序负责资源调配。

2. 灾难恢复

很多虚拟机技术都自带有快照、备份和迁移的功能,可以做到几乎零停机时间实时迁移。可以在很短时间内就恢复重要的应用,并且和SAN完全没有关系,这样虚拟机技术可以成为性价比极佳的灾难恢复方案。

3. 基础设施管理

人们设想未来所有的资源都透明地运行在各种各样的物理平台上,资源的管理都将按逻辑方式进行,完全实现资源的自动化分配。要达到这个目标,就需要在物理平台上采用大量的虚拟机技术。虚拟机脱离了和硬件的绑定关系,使运行在同一台物理机中的虚拟机之间相互独立。

另外还提供了很多自动化的虚拟机管理工具,使服务器的管理变得简单高效。虚拟机和硬件的隔离,以及虚拟机之间的隔离不仅使虚拟机变得更安全,也降低了服务器硬件维护对应用的影响。虚拟机技术提供了大量的管理工具,降低了维护的难度和成本;另外相对普通的物理机器而言,管理批量的虚拟机要容易得多,尤其是安装配置可以批量进行并且可以自动化完成。

4. 高级虚拟主机

在采用虚拟主机技术之前一台服务器能够支持的网站数量很有限,而且要求这些网站的运行环境必须兼容。在服务器上使用虚拟主机技术使得一台服务器可以运行大量的虚拟网站服务器,这大大降低了建立一个网站的资金需求。随着虚拟主机技术的普及,越来越多的人希望用少量的资金就建立起自己的网站,从而导致虚拟主机提供商不得不在服务器中运行更多的虚拟主机以压低成本。

5. 基于虚拟机技术的网络应用

通过虚拟机技术在一台服务器上配置出由若干台虚拟机组成的局域网,并在其上开发测试各种网络应用无疑为网络爱好者和经费相对紧张的高校和研究机构提供了很好的实验环境;另外在企业和研究院所的研究和测试环境中技术人员经常需要同时或交替使用不同的操作系统来进行开发或测试工作。虚拟机能进行多操作系统配置,即允许在同一机器中运行多个操作系统,便于开发和测试来满足技术人员的需求。

6. 软件开发与调试

程序员可以利用虚拟机的优越性实现跨平台开发不同操作系统下的应用程序,不需要重新启动计算机就可以完成整个开发阶段的试运行和调试。

在一个系统中测试被编译的内核程序以往很难在编写代码的同一台计算机上进行,因为不断重新启动计算机会大大干扰编写的进程。此时使用虚拟机就是最佳的解决方案,可以把要调试的内核程序作为一个客户操作系统,编程间隙还可以把调试中的客户操作系统放大到全屏。

7. 虚拟机在杀毒软件中的应用

虚拟机在杀毒软件中也有极为重要的应用,这主要表现在虚拟机脱壳上。壳是一种加密手段,病毒程序通过加壳来改变自身特征码,以躲避杀毒软件的查杀,较常见的壳有UPx、NsPack、PePack、PECompact 和 ASPack 等。病毒加壳就好比穿上“马甲”,而脱壳技术就是破解病毒的加密手段,还原病毒特征码。因此杀毒软件都需要具有脱壳能力,其脱壳能力的好坏则直接影响杀毒效果。

目前在杀毒软件中的脱壳技术主要有两种,一种是靠程序脱壳。即针对每一种壳都编写相应的脱壳程序,杀毒时先将加壳的程序脱壳后再按特征码匹配杀毒。这种方法的优点是脱壳速度很快且节省系统资源,但是当遇到新壳时就无能为力了。

因此又出现了虚拟机脱壳技术,这种技术就是在杀毒软件内部虚拟出来一个环境。让病毒在其中运行,等病毒脱掉其“马甲”之后再执行特征码的匹配杀毒。虽然现在的技术还无法在杀毒软件中完全虚拟出来一个真实的硬件环境,但是随着技术的进步,在不远的将来虚拟机杀毒技术将是杀毒软件领域的新突破。

另外,服务器的安全性也是现在最热门的话题。在虚拟机技术的帮助下一台虚拟机无法直接访问另一台虚拟机中的资源,如同各自运行在不同的物理机器中,这使得一个应用的安全漏洞不会直接影响另一个应用;此外通过在VMM层对其虚拟机资源访问施加安全认证可以有效地实施整体安全认证。

一台物理机OS,即Host OS只能装一种杀毒软件和防火墙。如果同时装不同的两种,则很容易冲突。这时可以在虚拟机中安装试用,每台虚拟机可以各装一种杀毒软件。多台虚拟机上的多种杀毒软件不会冲突,还可能利用各虚拟机中的不同种类的杀毒软件通过虚拟网络对物理机中的Host OS进行查杀病毒。

如果在网上下载了一个国际标准组织(International Organization for Standardization,ISO)文件(虚拟光驱文件),则可以用Windows ISO软件查看其中的详细内容。如果该光盘是启动盘,在Windows ISO中看不到启动效果,一般要先将其刻录到一张光盘,再用这张光盘从光驱启动后才能看到启动效果。

虚拟机支持读物理光驱中的光盘,也能支持虚拟光驱ISO文件,可以用虚拟机来测试该ISO文件的实际使用效果。在网上下载各种ISO安装文件或其他以ISO封装的软件,可在虚拟机中先试验,好用且能用后再刻盘。这样既能节省刻录盘,也能减少对刻录机和光驱读写光盘的损耗。

可使用虚拟机安装系统,其内部拥有虚拟光驱,支持直接打开系统镜像文件安装系统;另外虚拟机技术在游戏爱好者中也相当实用,如一般在一台计算机中不支持同时打开很多游戏,但我们可以在计算机中创建多台虚拟机并在虚拟机系统中单独运行程序,这样即可实现一台计算机同时打开同一游戏。

虚拟机在企业中应用非常广,由于服务器通常配置很高,因此很多服务器网络商为了满足中小站需求通常将一台服务器划分出多台虚拟机服务器。这样每个网站即可分配独立服务器资源一部分,并且互相不影响且可以配独立IP地址,大大解决了中小企业使用单独服务器费用过高的问题。

6、虚拟机分类

在虚拟机的发展过程中针对不同的应用需求出现了各种虚拟机,下面按照多种标准为虚拟机分类。

1. 根据虚拟机的来源不同分类

根据虚拟机厂商和使用工具的不同有Microsoft、IBM、HP(惠普)、SWsoft、SUN、Intel、AMD(先进微系统公司)、Java、BB和Linux虚拟机等。

2. 按照虚拟化的规模、指令集和宿主环境等分类

1)按照虚拟化规模可将虚拟机分为进程和系统虚拟机两类

若虚拟机只能为单个系统进程提供虚拟运行环境,则为进程虚拟机,如Java和Smalltalk 等高级语言虚拟机;若虚拟机可虚拟整个计算机系统,则为系统虚拟机,如VMWare和Virtual PC 等。进程虚拟机比系统虚拟机的运行开销小,实现也相对简单,但系统虚拟机可为用户和应用提供更好的透明性、隔离性、封装性及可管理性。

2)按照虚拟机的宿主环境分类

可将虚拟机划分为寄生和经典虚拟机,宿主环境是虚拟机的运行支撑环境。如果宿主环境是操作系统,虚拟机作为操作系统的应用程序存在,则称为“寄生虚拟机”,如VMWare和Virtual PC。

如果宿主环境是硬件平台本身,则为经典虚拟机,如IBM 的VM/360 系统、剑桥大学的Xen 及VMWare面向企业用户推出的VMWare ESX Server等。由于VMWare 类型的虚拟机拥有大量的用户群,因此寄生虚拟机更为人们所熟知;经典虚拟机可以绕过操作系统直接访问硬件,所以性能上具有较大优势。

3)按照宿主机和客户机指令的异同分类

可将虚拟机分为相同指令虚拟机(same ISA VM)和相异指令虚拟机(different ISA VM),如VMWare 是典型的相同指令虚拟机,而早期运行在MAC平台上的Virtual PC 则是相异指令虚拟机。

通过相异指令虚拟机可以实现软件在异构硬件资源上的移植性,相同指令虚拟机则可以直接利用指令相同的特点,直接利用物理平台解释部分虚拟机指令,从而在执行效率上获得一定的优势。

4)按照是否需要修改客户机操作系统分类

可将虚拟机分为超虚拟化和全虚拟化虚拟机两类,如果虚拟机需要修改客户机操作系统,则为超虚拟化(para-virtualization)虚拟机;否则为全虚拟化(full-virtualization)虚拟机。剑桥大学开发的Xen、User-mode-Linux和OpenVZ都采用超虚拟化技术。

全虚拟化具备很好的透明性,即不需要修改操作系统;超虚拟化虽然需要修改操作系统源码,损失了一定的透明性,但对于运行在虚拟机操作系统中的应用程序来说仍然是透明的,而且超虚拟化技术可以降低虚拟机的复杂度。

下表总结了上述4种分类方法和相关的虚拟机:

3. 按照虚拟机上层应用接口分类

现在有多种虚拟机技术分类方式,由于虚拟机的本质特征是利用下层应用(或系统)的支持为上层应用(或系统)提供不同的接口,因此按照接口来分类更能反映虚拟机的特点。

按照虚拟机系统对上层应用所提供接口的不同,如下图所示。

形成了不同层次的虚拟机技术,主要包括硬件抽象层虚拟机、操作系统层虚拟机、API 层虚拟机及编程语言层虚拟机等4类。 

1)硬件抽象层的虚拟机

对上层软件(即客户操作系统)而言,硬件抽象层的虚拟机构造了一个完整的计算机硬件系统,这种虚拟机与客户操作系统的接口即为处理器指令。

硬件抽象层的虚拟机技术利用客户系统环境和虚拟机宿主平台的相似性来减少执行客户系统指令的延迟,这种技术利用VMM作为隔离代码运行环境的中间层,为上层的客户操作系统提供了一个物理机器的抽象。它允许操作系统假设自身可以直接在硬件上运行,VMM 为其上运行的客户操作系统提供硬件映射。

从操作系统的角度看,运行在虚拟机与运行在其对应的物理计算机系统中一样。 

根据VMM在整个物理系统中的实现位置和实现方法的不同,Goldberg定义了两种虚拟机监视器模型。

即Type I VMM和Type II VMM,其体系结构如图所示。

Type I VMM 在操作系统之前预先安装,然后在此虚拟机监视器之上安装客户操作系统。它可以在硬件支持下拥有最佳性能,如IBM VM/370、VMware ESX Server、Xen,以及远为VirNOS和Denali等均属于这样的虚拟机。

Type I VMM通常都是以一个轻量级操作系统的形式实现;Type II VMM 则安装在已有的主机操作系统(宿主操作系统)之上,此类虚拟机监视器通过宿主主操作系统来管理和访问各类资源(如文件和各类I/O设备等),如VMware Workstation和Parallel Workstation等。

2)操作系统层的虚拟机

操作系统层虚拟机在宿主操作系统中动态复制用于软件运行的环境来创建多个虚拟系统,对运行在每个虚拟系统之上的软件而言,此类虚拟机提供一个完整和相互隔离的虚拟环境(Virtual Environment,VE)、域(Domain)、区域(Zone)或容器(Contain)。它与上层软件的接口为系统调用接口,如 FreeBSD 的 Jail 将操作系统划分成多个独立的环境,称为“Jail”。每个Jail都可以独立管理操作系统资源,如进程、文件系统和网络资源等,而用户对资源的访问范围则被限制在其所在Jail的内部。

Solaris Container通过在操作系统的单个实例中创建全局区域和非全局区域,区域提供一个抽象层将应用程序与部署应用程序的计算机的物理属性分隔,为应用程序提供一个安全的隔离环境。

虚拟专用服务器(Virtual Private Server,VPS)技术把服务器的操作系统环境分割成多个彼此隔离的虚拟运行容器,称之为“VPS”。管理员可以为每个VPS分配指定数量的内存、磁盘和网络带宽等资源,还能够在物理服务器与虚拟环境或物理服务器之间进行客户虚拟系统的迁移。

操作系统层虚拟机的典型代表有Linux Vserver、OpenVZ和User-mode-linux。

3)API层的虚拟机

此类虚拟机为上层应用软件提供了特定操作系统运行环境的模拟,但这种模拟并不是对处理器指令的仿真,而是模拟实现该操作系统的各类用户态API。

API层虚拟机的典型代表是开源项目Wine,它通过Wine服务进程和一组Windows动态链接库(Dynamic Link Libraries,DLL)构造一个Windows用户态应用程序和Linux(或其他类 Unix)操作系统之间的适配层(Adapter Layer),主要包括一个 Wine 服务进程和一组Windows动态链接库。

当Windows应用程序需要在Linux操作系统下调用一个Win32 API函数时,Wine将该调用转换成Windows操作系统下对该函数的模拟实现。

此外,Wine对用户界面API的模拟仍依赖于X 服务进程。在运行Windows应用程序时Wine需要与3个进程交互,即Windows应用程序进程、Wine服务进程和 X服务进程。Wine的X服务进程提供非Windows运行环境下的图形用户界面(Graphical User Interface,GUI)服务,如图形显示输出,以及键盘和鼠标输入等。Wine未包含任何Linux内核模块,所有组件都在操作系统用户态实现的。

4)编程语言层虚拟机

编程语言层虚拟机即程序虚拟机,它为运行单个计算机程序而设计,意味着支持单个进程。此类虚拟机通过解释或即时编译技术来运行语言虚拟机指令,从而实现软件的跨平台特性,如Java和Smalltalk等高级语言虚拟机。Java将源代码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,实现“一旦写,可在任何地方实现”跨平台特性;同时在一定程度上降低了Java程序的运行效率。

总体来说,虚拟机中间层所在的位置越接近硬件层,虚拟机实现的软件隔离性和透明性就越高,虚拟机的总体性能和效率也越高;中间层位置越接近应用层,虚拟化的粒度就越小,虚拟机运行所占用的系统开销就越小,实现的灵活性越好。

4. 按照设计方案分类

通常虚拟机的设计方案可以分为自含代码虚拟机(Self Contained Code virtual Equipment,SCCE)、缓冲代码虚拟机(Buffer Code virtual Equipment,BCE)和有限代码虚拟机(Limited Code virtual Equipment,LCE)。

1)自含代码虚拟机

工作起来如一个真正的CPU,一条指令取自内存由SCCE解码并被传送到相应的模拟这条指令的例程,下一条指令则继续这个循环。虚拟机会包含一个例程来对内存和寄存器寻址操作数进行解码,还会包括一个用于模拟每个可能在CPU上执行的指令的例程集。SCCE 的代码会变得无比巨大,而且速度也会很慢。

然而 SCCE 对于一个先进的反病毒软件很有用,所有指令都在内部被处理。虚拟机可以对每条指令的动作做出非常详细的报告,这些报告和启发式数据,以及通用清除模块将相互参照形成一个有效的反毒系统;同时反病毒程序能够最精确地控制内存和端口的访问,因为它自己处理地址的解码和计算。

2)缓冲代码虚拟机

是SCCE的一个缩略版,因为相对于SCCE具有较小的尺寸和更快的执行速度。在BCE中,一条指令从内存中取得并和一个特殊指令表相比较。

如果不是特殊指令,则被简单解码以求得指令的长度,随后所有这样的指令会被导入到一个可以通用地模拟所有非特殊指令的小过程中。而特殊指令只占整个指令集的一小部分,在特定的小处理程序中进行模拟。

BCE通过将所有非特殊指令用一个小的通用的处理程序模拟来减少其必须特殊处理的指令条数,这样削减了自身的大小并提高了执行速度。但这意味着它将不能真正限制对某个内存区域、端口或其他类似对象的访问,也不可能生成如SCCE提供的同样全面的报告。

3)有限代码虚拟机

类似用于通用解密的虚拟系统所处的级别,实际上并非一台虚拟机。因为它并不真正的模拟指令,只简单地跟踪一段代码的寄存器内容。也许会提供一个小的被改动的内存地址表,或是调用过的中断之类。

选择使用LCE而非更大更复杂系统的原因在于即使只对极少数指令的支持便可以在解密原始加密病毒的路上走很远,因为病毒仅仅使用了Intel指令集的一小部分来加密其主体。使用LCE,原本处理整个Intel指令集时的大量花费带来的是速度的巨大增长,当然这是以不能处理复杂解密程序段为代价的。

当需要执行快速文件扫描时LCE就变得很有用,因为一个小型但像样的LCE可以用来快速检查执行文件的可疑行为;反之对每个文件都使用SCCE算法将会导致无法忍受的缓慢。如果一个文件看起来可疑,LCE还可以启动某个SCCE代码对文件进行全面检查。

5. 按照系统层次分类

依照计算机系统层次结构分级,可以有如下5个不同层次的虚拟机。

1)机器级

它通过配置软件扩充机器功能(如扩充某种语言功能)后所形成的一台计算机,而实际硬件在物理功能上并不具备这种语言功能。

2)操作系统级上的虚拟机

VMware支持在Windows NT/2000环境下运行如Linux等其他操作系统和Windows下的虚拟DOS机(Virtual DOS Machine,VDM)。Vmware作为原操作系统下的一个应用程序可以为运行于其上的目标操作系统创建出一台虚拟的机器,目标操作系统如同运行在单独一台真正机器中,丝毫察觉不到处于Vmware 的控制之下。

3)汇编语言级的虚拟机

在汇编语言这一级用户看到计算机能接收并执行用汇编语言编写的程序,但实际的物理机只能执行机器语言指令,通过配置汇编程序才能处理汇编语言程序。所以用户在汇编语言这一级看到的是一台能执行汇编语言功能的虚拟机,如 COMET虚拟机有自己虚拟的处理器、堆栈和寄存器等,还具有相应虚拟的指令系统。

4)高级语言级的虚拟机

Java语言虚拟机是高级语言级虚拟机的一个代表。如果一般的高级语言要在不同的平台上运行,至少需要编译成不同的目标代码,而引入 Java 语言虚拟机后Java语言在不同平台上运行时不需要重新编译。

5)面向应用的虚拟机

是一个虚构出来的计算机应用,它通过在实际的计算机上仿真模拟各种计算机功能的应用来实现,如知识库、搜索引擎、人工智能、专家系统,以及游戏引擎等。

因为虚拟机是运行一定规则描述语言的机器,因此并不一定是一台真实地以该语言为机器代码并运行对应规则描述语言的机器,这种情况也称为“仿真环境”。

7、虚拟机的模型和模式

1. 虚拟机的模型

根据虚拟机监视器在虚拟机模型中所处位置的不同可以将虚拟机模型分为3类,即独立监视器、宿主型和混合模型,如图所示。

1)独立监视器模型

如图中(a)所示独立监视器模型中的VMM直接虚拟化硬件,为上层操作系统直接提供虚拟的硬件。

VMM运行在Guest OS的底层,直接访问硬件资源,拥有最高的权限。上层的操作系统访问硬件需要借助底层的 VMM,这种模型的优点是虚拟机之间完全隔离,性能较高且可用性好;缺点是由于VMM直接操作底层硬件,因此VMM需要包含物理硬件的驱动程序,设计会变得较为复杂。

2)宿主模型

如图中(b)所示宿主模型中的VMM位于Host OS之上,相当于Host OS的一个应用进程。

其优势是可以共享Host OS提供给应用程序的驱动程序、进程调度管理、内存管理机制和系统调用等机制,VMM 的开发相对较容易。但是由于VMM对底层物理硬件的访问还要经过中间 Host OS 的转发处理,因此在性能上会产生较大的消耗。

3)混合模型

如图中(c)所示混合型结合独立监视器模型的高性能和宿主模型的简洁性,将上层操作系统对硬件的基本服务,如内存和CPU访问直接交给VMM处理,而将比较复杂的I/O访问转发给Host OS处理。

这样既兼顾了VMM对硬件访问的性能,也降低了VMM开发的复杂度,是一种较理想的虚拟机模型。 

2. 虚拟机VMware的工作模式

VMware提供了如下3种工作模式:

1)bridged(桥接模式)

在这种模式下,VMWare虚拟出来的操作系统如同局域网中的一台独立的主机,它可以访问网内任何一台机器。

在桥接模式下需要手工为虚拟系统配置IP地址和子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器通信;同时由于这个虚拟系统是局域网中的一个独立的主机系统,所以可以手工配置其传输控制协议(Transport Control Protocol,TCP)/IP配置信息,以通过局域网的网关或路由器访问互联网。

使用桥接模式的虚拟系统和宿主机器的关系如同连接在同一个Hub上的两台计算机,为使二者通信,就需要为虚拟系统配置 IP 地址和子网掩码;否则不可。

下图所示为桥接模式的网络连接,Host的物理网卡和Guest的虚拟网卡通过VMnet0虚拟交换机桥接。

二者相当于处于同一个网段,所以其 IP地址在同一个网段,通信方向为虚拟机↔主机↔互联网。

下图所示为VMware桥接网络的一个例子,它使用VMnet0虚拟交换机。

此时虚拟机相当于网络上的一台独立计算机与主机,拥有一个独立的 IP 地址,使用桥接方式 A、A1、A2和B可互访。

如果需要利用VMWare在局域网内新建一台虚拟服务器为局域网用户提供网络服务,则应该选择桥接模式。

2)host-only(仅主机模式)

在某些特殊的网络调试环境中要求将真实环境和虚拟环境隔离开,这时可采用host-only模式。在该模式中所有的虚拟系统可以相互通信,但虚拟系统和真实的网络被隔离开。

在host-only模式下,虚拟系统和宿主机器系统可以相互通信,相当于这两台机器通过双绞线互联。虚拟系统的TCP/IP配置信息,如IP地址、网关地址和域名服务器(Domain NameServer,DNS)等都由 VMnet1(host-only)虚拟网络的DHCP服务器来动态分配。

在host-Only模式下,虚拟网络是一个全封闭的网络,它唯一能够访问的就是主机。其host-Only网络和网络地址转换(Network Address Translation,NAT)网络相似,不同是host-Only网络没有NAT服务,所以虚拟网络不能连接到互联网。

主机和虚拟机之间的通信默认通过VMware Network Adepter VMnet1虚拟网卡来实现,如图所示。

下图所示为仅主机网络的一个例子,它使用 VMnet1 虚拟交换机,此时虚拟机只能与虚拟机和主机互访,即不能上互联网。使用这种方式,A、A1和A2可以互访,但A1和A2不能与B相互访问。

如果要利用VMWare创建一个与网内其他机器相隔离的虚拟系统完成某些特殊的网络调试工作,可以选择host-only模式。 

3)网络地址转换(NAT)模式

使用NAT模式就是让虚拟系统借助NAT功能通过宿主机器所在的网络来访问公网,即使用NAT模式可以实现在虚拟系统中访问互联网。

NAT模式下的虚拟系统的TCP/IP配置信息由 VMnet8(NAT)虚拟网络的 DHCP 服务器提供,无法手工修改,因此虚拟系统也无法和本局域网中的其他真实主机通信。

在这种模式中,Host中的VMware Network Adapter VMnet8虚拟网卡直接连接到VMnet8虚拟交换机中与Guest中的虚拟网卡通信。

VMware Network Adepter VMnet8虚拟网卡的作用仅限于和 VMnet8 网段通信,不为 VMnet8 网段提供路由功能。所以虚拟机虚拟一台NAT服务器(在Host下看到的是VMware NAT Service服务)使虚拟网卡可以连接到互联网,如图所示。

在这种情况下可以使用端口映射功能,让访问主机80端口的请求映射到虚拟机的80端口上。如果在Host中关闭VMware NAT Service服务,那么NAT模式与host-only 模式没有区别。

Guest 的虚拟网卡与 Host的物理网卡通信不用经过NAT服务器,而通过 VMnet8虚拟交换机通信。如果Guest要请求互联网的服务,则必须通过虚拟的NAT服务器。

下图所示为NAT网络的一个实例,它使用VMnet8虚拟交换机。

此时虚拟机可以通过主机单向访问网络上的其他工作站,其他工作站不能访问虚拟机。使用 NAT 方式 A1 和A2可以访问B,但B不可以访问A1和A2,A、A1和A2可以互访。

采用NAT模式的最大优势是虚拟系统接入互联网非常简单,不需要进行任何其他配置,只需要宿主机器能访问互联网即可。

二、虚拟机组件构成

1、虚拟机组件

虚拟机的组件主要由文件的形式呈现,包括配置文件、硬盘文件、内存文件、虚拟机状态文件,以及其他文件。

1. 配置文件

配置文件是一个包含虚拟机设置信息的文件,如内存数量、处理器数目、NIC的数量和类型,以及虚拟磁盘的数量和类型。每次创建一个新的虚拟机的同时会创建一台虚拟机配置文件,正是这个文件告诉虚拟化软件如何从主机上为虚拟机分配物理资源。

此文件指出了硬盘文件的位置、使用内存的数量,如何与网卡进行交流,以及使用哪种或哪些处理器。因为它只包含设置信息,所以通常很小,是纯文本或XML格式。

2. 硬盘文件

通常是物理硬盘中包含的一个包含某些信息的文件,每次创建一台虚拟机虚拟化软件就会创建一个虚拟硬盘,这个文件模拟了一个典型的基于扇区的磁盘。当在虚拟机中安装操作系统时,操作系统将包含在此文件中。与物理系统一样,每台虚拟机可以有多个磁盘文件。因为它模拟了一个硬盘,所以此文件通常极为巨大。

虽然所有的虚拟化引擎支持自动增长,但让系统以较小的文件容量启动,并随着新内容的添加将会扩大虚拟机的磁盘文件。

硬盘文件有两种主要的类型,即来自VMware的虚拟机磁盘(Virtual Machine Disk,VMD)和来自Microsoft的虚拟硬盘(Virtual Hard Disk,VHD)。二者都使用了平面文件格式,与数据库一样每次添加信息时会不断增长。与数据库文件一样,可以对虚拟磁盘驱动器文件进行压缩以恢复文件中未使用的空间。

注意虚拟硬盘文件不一定会因为数据的添加而增大,默认情况下,E S X服务器使用固定大小的虚拟硬盘文件。因此一个新的16 GB虚拟磁盘将从一开始就占用16 GB的空间,唯一的例外是通过命令行创建一个新的VMware虚拟磁盘时使用了-thin开关。另一个例外是使用的后端阵列支持自动精简配置,如一个默认的VMware 16 GB的虚拟磁盘可能只会占用4 GB的空间。

3. 内存文件

这是一个包含正在运行的虚拟机内存信息的文件,当虚拟机关闭时其内容被提交到硬盘文件中。

4. 虚拟机状态文件

与真正的机器一样,虚拟机也支持类似待机或休眠状态的操作模式。对虚拟化而言,这意味着需要暂停或中止,以及保存计算机的状态。当暂停一台机器后其挂起状态会保存到一个文件中,因为它只包含与机器状态,因此此文件通常比硬盘文件小。

5. 其他文件

其他为包含日志和与虚拟机相关信息的文件。

还有其他文件格式支持最先进的虚拟化功能,但前面讨论的文件类型是最常见;此外,每一种虚拟化产品都支持“可撤销”磁盘,这意味着该产品提供一种通过放弃更改将虚拟机返回到以前状态的手段。这是一个强大的功能,在测试和开发方案中非常有用,甚至可用于生产中。

例如,如果病毒感染了虚拟机,但有一个以前的文件快照,可以通过此快照来恢复,可以关闭受感染的虚拟机并返回到以前未受感染的副本。当然应该小心做这件事,因为可能会丢失数据,但这种水平的灵活性是物理机器无法比拟的。

虚拟磁盘的主要优点是将通常构成一台机器运行一个操作系统的物理磁盘转化成一个文件夹中的文件,使磁盘从物理限制中“解脱”出来。这意味着由于机器现在完全包含在一个单独的文件夹内,所以能够变成可移动和可传输的。

同一台机器可以在一个工作站、一台服务器、一个群集或者远程位置上运行。如果要保护这台虚拟机,只需将构成它的文件复制到另外一个位置,这就是为什么服务器虚拟化技术是如此具有革命性的原因。

因为所有的虚拟机都是由一系列文件组成,所以在任何时候都可以很容易地复制和重复使用,为此需要提供适当的物理磁盘空间。此外,由于虚拟机总是至少由两个文件构成,所以在主机硬盘上将每台虚拟机放到其自己的文件夹中是一个很好的做法。如果需要复制一个副本,只需复制整个文件夹。

2、虚拟机监控器

虚拟机最重要的部分是虚拟机监控器(VMM),它是一个运行在真实的计算机环境中的管理软件,模拟创建多个独立、ISA结构和实际硬件相同的虚拟硬件系统。

VMM 直接管理计算机系统的真实资源,为虚拟机提供硬件资源抽象,为客户操作系统提供运行环境。它承担了实现虚拟化的大部分复杂工作,是实现虚拟机的核心环节。

每台虚拟机可以运行不同的操作系统,即客户操作系统。

它们可以通过 VMM 来访问计算机系统中实际的物理资源,如下图所示,图中Guest App为客户应用程序。

VMM 具有如下3个典型特征:

  1. 可以为其上的应用程序提供执行环境,这种执行环境与真实的计算环境几乎相同,即在虚拟机中运行的结果与在真实计算机环境中的执行结果相同。
  2. 对真实的系统资源必须有完全的控制权,运行在VMM上的所有应用程序访问任何系统资源都必须经过VMM为应用程序分配和回收系统资源。
  3. 虚拟计算系统中绝大部分指令需要在真实的处理器上执行,而不需要VMM的参与,这样可以提高指令的执行速度。而有些指令则需要由VMM模拟执行,由于模拟执行的速度相对较慢,会在一定程度上影响虚拟机的执行效率,所以虚拟机设计时必须提前考虑需要模拟执行的指令集。

从系统架构看,VMM 是一个位于计算机硬件和操作系统之间的软件层。它负责管理和隔离上层运行的多台虚拟机,为这些虚拟机提供安全和隔离的运行环境。

VMM 可以将原本运行在物理平台上的应用程序运行在虚拟机上,而将多台虚拟机合并到一个物理平台上可减少管理和空间成本。 

三、主流虚拟机产品

目前流行的虚拟机软件主要有VMWare、Microsoft、KVM、Xen和VMLite虚拟机。

1、VMWare系列产品

VMware 是全球桌面到数据中心虚拟化解决方案的领导厂商,由其命名的虚拟机软件是一个“虚拟PC”软件。它能够支持多种客户操作系统,如 Linux各种发行版、DOS和Windows各种版本,以及Unix、FreeBSD、NetWare6和Solaris x86等。它能够模拟的硬件包括主板、内存、硬盘(IDE 和 SCSI)、DVD/CD-ROM、软驱、网卡、声卡、串口、并口和 USB 口,但没有模拟显卡。

VMWare为每一种Guest OS提供一个叫做“VMWare-tools”的软件包来增强Guest OS的显示和鼠标功能。

VMware主要的功能:

  • 不需要分区或重开机即可在同一台PC上使用两种以上的操作系统。
  • 完全隔离并且保护不同OS的操作环境,以及所有安装在OS上面的应用软件和资料。
  • 不同的OS之间能互动操作,包括网络、周边、文件分享及复制粘贴功能。
  • 有复原(Undo)功能。
  • 虚拟机之间共享文件、应用和网络资源等。
  • 能够设定并且随时修改OS的操作环境,如内存、磁盘空间和周边设备等。

Vmware虚拟机软件系列产品,免费的虚拟化产品如下。

  • VMware Player:在Windows或Linux PC上运行任何虚拟机,其最大特点是省去了制作虚拟机的功能。它只是一个系统“播放器”,而不能用于创建虚拟系统。
  • VMware GSX Server:一套为关键商业环境所打造的面向“工作组”的部门级虚拟机软件产品,是市面上最具弹性且最容易部署的虚拟服务器软件,带有远程Web管理和客户端管理功能。
  • VMware Server:VMware公司于2006年推出的一款入门级的虚拟机产品,其目的是代替VMware GSX Server。它面向x86与x86-64服务器,让Windows或Linux服务器自由实现虚拟化,其支持64位主机和64位客户机操作系统、简单管理协议(Simple Management Protocol,SMP)功能(双路虚拟SMP)、VMware Workstation 5.0的虚拟机、快照和Sun Solaris 10。

软件生命周期自动化产品如下:

  • VMware Workstation:一款帮助程序开发人员和系统管理员进行软件开发、测试及配置的强大功能的虚拟机软件,主要功能有虚拟网络、实时快照、拖放和共享文件夹等。模拟的虚拟机硬件环境包括主板芯片组、CPU、BIOS、最大8 GB内存、显卡、4种智能磁盘设备(Intelligent Disc Equipment,IDE)接口、7种小型计算机系统接口(Small Computer System Interface,SCSI)、两个1.44 MB软驱、4个串口、3个并口、两个USB口、键盘,以及10块网卡和声卡。其虚拟网络最多可同时连接10台交换机,并且支持Windows、Linux、FreeBSD、Sun Solaris 32位和64位客户操作系统产品,以及Novell Network等。
  • VMware Lab Manager:虚拟实验室自动化系统。

虚拟客户端和台式机产品如下:

  • VMware ACE:可靠的企业计算环境,为想迅速提高企业的PC环境的安全性和标准化的IT桌面管理者准备的企业解决方案。
  • Virtual Desktop Infrastructure:托管在数据中心运行的虚拟机内的单台台式机。

VMware Infrastructure 数据中心管理和优化套件包含如下产品:

  • VMware ESX Server:一个适用于任何系统环境的企业级的虚拟机软件,它不需要操作系统的支持,本身就是一个操作系统。大型机级别的架构提供了空前可测量性和操作控制;完全动态的资源控制适合各种要求严格的应用程序的需要,用来管理虚拟化服务器、存储、网络平台和硬件资源,还带有远程Web管理和客户端管理功能。
  • VMFS:用于虚拟机的高性能群集文件系统。
  • Virtual SMP:用于单台虚拟机能够同时使用多个物理处理器。
  • Virtual Center:一个虚拟计算机管理软件,为虚拟计算机资源提供了一个中央控制点,实现IT基础结构的配置、调配、集中管理、自动化和优化。
  • VMotion:可以使运行中的虚拟机从一台物理服务器实时迁移另一台物理服务器,它实现了零停机时间和连续可用的服务,并能保证完全的事务完整性。
  • HA:使运行在虚拟机中的应用程序具备易于使用和经济高效的高可用性,在服务器发生故障时将在具有备用能力的其他生产服务器中自动重新启动受影响的虚拟机。
  • DRS:在硬件资源集合中动态和智能地为虚拟机提供资源平衡和分配计算能力。
  • Consolidated Backup:为虚拟机提供易于使用和集中化的无代理备份工具,它简化了备份管理,并减轻了ESX Server的负载。
  • Converter:一款能将物理机系统转化为一台虚拟机映像文件并提供到VMware虚拟机转换过程使用的企业级迁移工具,而且生成的映像可以在VMware虚拟机软件中使用,它融合了Vmware P2V Assistant和Virtual Machine Importer两个独立的工具。

2、Microsoft虚拟机产品

Microsoft虚拟机包括Microsoft Virtual PC 2004、Virtual Server 2005及Hyper-V 2012。

1. Virtual PC

Virtual PC最早由Connectix公司推出,后被Microsoft收购的一款与VMware Workstation相类似的虚拟机软件。早期版本为Virtual PC 2004,现在最高版本为Virtual PC 2007。

Virtual PC可以允许在一个工作站上同时运行多个PC操作系统,当转向一个新OS时可以运行传统应用并提供一个安全的环境以保持兼容性。它可以保存重新配置的时间,使得支持、开发和培训工作可以更加有效。

Virtual PC最早应用于Macintosh平台,主要用来解决Macintosh主机与基于Windows的客户机之间的文件共享问题。它对“底层”软件的兼容性比较好,可以在虚拟机中安装多种操作系统与多种“底层”的软件,如及时还原软件等,但其虚拟机性能没有VMware系列虚拟机好。

Virtual PC模拟的硬件环境为S3 732(8M)显卡、Sound Blaster 16声卡、Intel 21140 PCI接口百兆网卡,以及Intel 82371芯片组。

2. Virtual Server 2005

它是 Virtual PC 2004 的企业版本,用来迁移服务器和旧版的操作系统。在 2006 年,Microsoft发布了 Microsoft Visual Server 2005 R2企业版和标准版;同时发布了32位和64位版本。在该版本中发布了包括简体中文在内的多语言版本,而VMware的虚拟机同时支持32位和64位系统。

3. Hyper-V

Hyper-V是一个基于64位硬件的集成在Windows Server 2008内核基础之上构建的虚拟机管理系统,当时是Microsoft的旗舰虚拟化技术。Hyper-V可以在Server Core或者GUI上运行;此外其管理工具可作为独立的工具来部署,可以管理多台Hyper-V主机。

Hyper-V 虚拟化技术能进行服务器整合,并在扩展能力与可用性方面提供了大幅改进,包括创新的用户界面、强大的管理工具、网络负载均衡、卷映像备份、增强的Windows Power Shell 支持,以及网络及存储和虚拟化等数百项新增功能。因此可实现更高的整合率,配合Windows Server 2012的数据中心版本可以进行无限数量的虚拟机授权。

Hyper-V 2012提供了一些新的功能和改进,包括客户端 Hyper-V、动态内存和智能分页、160 个以上的Cmdlet、虚拟机的导入、副本、实时迁移、资源计量、扩大资源规模和改进硬件错误处理能力,以及Administrators 组、单-源I/O 虚拟化(Single-Root I/O Virtualization,SR-IOV)、存储迁移、SMB 3.0 文件共享的存储、虚拟光纤通道、虚拟硬盘格式、虚拟机快照、虚拟非统一内存访问和虚拟交换机等功能。

Hyper-V 没有资源池的概念,它提供一种叫做“NLB”的功能,其思路是利用 Windows集群操作系统的负载均衡功能平衡访问。在HA 方面Hyper-V 是基于 Windows2008 操作系统,很容易支持原来的集群功能,HA 功能也包括在内。Hyper-V 使用 VSS 的 Live Backups进行(Volume Shadow Copy Services),主要是基于快照的方式,会影响 Host主机的一些性能。

3、内核虚拟机(Kernel Virtual Machine,KVM)

KVM虚拟机最初由一个以色列的创业公司Qumranet开发,作为其虚拟设备接口(Virtual Device Interface,VDI)产品的虚拟机。KVM选择了基于Linux kernel并通过加载新的模块,从而使Linux Kernel本身变成一个Hypervisor。2008年9月4日,Redhat公司收购了Qumranet,从而成为KVM开源项目的新东家并开始在自己的产品中用KVM替换Xen。

KVM基于虚拟化扩展(Intel VT或AMD-V)的X86硬件,是Linux完全原生的全虚拟化解决方案。KVM 目前设计为通过可加载的内核模块支持广泛的客户机操作系统,如Linux、BSD(加州大学伯克利分校软件)、Solaris、Windows、Haiku、ReactOS和 AROS Research Operating System。KVM客户机可以支持160个虚拟CPU和多达2 TB的内存,KVM宿主机支持4 096个CPU核心和多达64 TB的内存。

KVM 本身不执行任何模拟,需要用户空间程序通过/dev/kvm 接口设置一个客户机虚拟服务器的地址空间向它提供模拟I/O,并将其视频显示映射回宿主的显示屏。

KVM从Linux继承了强大的内存管理功能,支持基于硬件的内存虚拟化功能,以及Intel的扩展页表和AMD的嵌套页表。KVM能够使用Linux支持的任何存储来存储虚拟机镜像,支持全局文件系统(GFS2)等共享文件系统中的虚拟机镜像。并且支持混合虚拟化,允许为多个虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的虚拟机交互性。

4、Xen虚拟机

Xen 在剑桥大学作为一个研究项目被开发出来,先后推出了Xen 1.0、2.0、3.0和4.0共4个版本,它已经在开源社区中得到极大推动。

Xen是一款半虚拟化VMM,这表示为了调用系统管理程序要有选择地修改操作系统。然而却不需要修改操作系统中运行的应用程序,它可将其中的资源动态地分配给任何操作系统或应用程序。Xen是一种特殊的虚拟硬件虚拟机,具有虚拟硬件虚拟机的大部分特性,其最大的不同点在于需要修改操作系统内核。目前 Xen只支持在 Linux 系统之上实现的 Linux 虚拟机,其新版本将支持 Intel 公司的硬件虚拟技术Intel—VT。

Xen提供复杂的工作负载平衡功能,可捕获CPU、内存、磁盘I/O和网络I/O数据。Xen服务器包含多核处理器支持、实时迁移、物理机到虚拟机(P2V)转换和虚拟机到虚拟机(Virtual Machine to Virtual Machine,V2V)转换工具、集中化的多服务器管理、实时性能监控,以及Windows 和 Linux 客户机的良好性能。

5、VMLite

VMLite是全球首款中国人设计的高速虚拟机,发布的短短几周内已经吸引了全球上万名虚拟机玩家注册下载并使用。

VMLite是一个虚拟机软件,其附带的VMLite XP模式与Microsoft推出的Windows XP模式几乎相同,但是却不要求 CPU 必须支持虚拟化才能运行。

VMLite 允许直接使用从Microsoft网站上下载的Windows XP模式安装文件来建立Windows XP虚拟机,VMLite XP模式配置完成后在Windows 7的“开始”菜单中也会出现虚拟机中安装的软件的快捷方式。在虚拟机中运行的程序可以无缝地在Windows 7桌面上显示,如同在本机中运行一样。

到目前为止,VMLite已经包括VMLite XP Mode、VMLite Workstation、MyOldPCs、VMLite VirtualApps Studio、VMLite VirtualApps Player和VBoot共6大产品,非常全面。

VMLite的优点包括是世界上超薄运行速度最快的虚拟机,对硬件安装和配置没有任何要求;不运行远程程序所以速度非常快;文件共享快;拥有超大磁盘容量2 TB;支持 32位和64位系统、多个虚拟CPU同时运行,以及3D动画效果;拥有32位高清晰显卡可以高清晰度地欣赏google earth并让玩家玩遍对画质要求高的最时尚的网游。

四、虚拟机技术支持

1、通用要求

1. 虚拟机基础操作

包括创建、删除、查询、修改启动、停止和重启等。

虚拟机创建功能主要是实现和物理主机一样的功能,需要提供内存、CPU和虚拟卷等设备,在这些设备基础之上才可以创建新的虚拟机。虚拟机启动、停止和重启这几个功能主要控制虚拟机一般的系统操作,它们之间有约束条件,即只有先启动虚拟机才可以停止和重启并且只有处于停止状态的虚拟机才可以启动。

下图所示为虚拟机的最基本操作:

其中的3种操作活动分别是在判断虚拟机当前状态的情况下给出相应的操作。

最后的删除操作主要满足用户删除当前不再使用或者已经不可用的虚拟机,其前提条件是虚拟机的状态是停止的。删除虚拟机后会释放所删除虚拟机的CPU、内存、虚拟卷,留给创建新的虚拟机使用。

虚拟机镜像:包括虚拟机镜像的创建、删除、查询,以及虚拟机镜像的导入和导出功能等。

虚拟机迁移:同一虚拟环境下在可接受时间内将一台运行的虚拟机由源主机迁移到目标主机。

虚拟机备份:包括虚拟机备份的创建、恢复、查询和删除功能等。

虚拟机模板:包括虚拟机模板的创建、删除和查询功能。

2. 虚拟机管理要求

管理与监控:具有统一的管理工具,可以在一个地点完成虚拟机的日常管理工作,包括各虚拟机控制管理、CPU 内存管理、存储管理、网络管理、日志收集、性能分析、权限管理和在线维护等工作。

软件鉴权功能:确保只有特定的用户才能管理。

提供安全的远程监控和管理。

3. 云服务下的虚拟机管理平台要求

首先提出云服务与虚拟机的关系,继而提出虚拟机管理平台的要求(如界面服务和资源动态调度等)。根据服务的特点又加强了虚拟机维护部分的规范要求(状态检测、信息查询和告警等),包括维护工具和开发接口。相应地提出了虚拟机高级管理的要求,作为较高要求宜支持如下功能。

1)克隆虚拟机

克隆一台和被克隆的虚拟机相同的虚拟机。

克隆就是复制一台已建立的虚拟机,相当于多了一台相同的虚拟机。如果该虚拟机已经安装系统,则多了一个相同系统。将装有系统和软件的虚拟机克隆并复制到其他机器之后,如果目标机上已经安装虚拟机软件并且兼容之前使用的虚拟机文件,则可以打开(目标机必须要安装和原来虚拟机使用的相同版本或者更高版本的虚拟机软件才可打开)。

这里用某台虚拟机应用系统的克隆功能克隆出一台虚拟机,只能复制到安装此虚拟机应用系统的主机上才可以运行。这样做的一个好处是为了满足用户不用多次创建虚拟机,尤其是对于已经安装操作系统的虚拟机而言,克隆可以节省不少的时间。

克隆有两种,即链接克隆和完整克隆。完整克隆是与原来虚拟机完全独立的一个副本,不和原来虚拟机共享任何资源,可以完全独立的使用。在虚拟机中安装和配置一个系统和相关程序需要很长时间,而完整克隆可以大大节约配置时间和减少配置过程的错误,采用完整克隆可以将配置好的系统以便捷方式分发给使用相同客户机环境的多个用户。

链接克隆需要和原来虚拟机共享同一虚拟磁盘文件,不能脱离原来虚拟机独立运行。由于采用共享磁盘文件,因此大大缩短了创建克隆虚拟机的时间并节约了宝贵的磁盘空间,通过链接克隆可以轻松地为不同的任务创建一台独立的虚拟机。

2)快照

是虚拟机磁盘文件在某个点的及时副本,系统崩溃或系统异常时可以通过恢复到快照来保持磁盘文件系统和系统存储。

虚拟机快照的定义是某一个特定文件系统在某一个特定时间内的一个具有只读属性的镜像,当需要重复返回某一系统状态,又不想创建多台虚拟机时就可以使用快照功能。可以针对一台虚拟机创建两个以上的快照,这就意味着可以针对不同时刻的系统环境做成多个快照,毫无限制地往返于任何快照之间。

与此同时快照管理器形象地提供多个快照镜像间的关系,树状结构使能够轻松地浏览和使用生成的快照。多重快照不只是简单地保存了虚拟机的多个状态,通过建立多个快照可以为不同的工作保存多个状态,并且不相互影响。

虚拟机的快照功能可以满足用户想把系统回到某次做快照处,如当前系统无法正常运行可以把系统恢复到所做快照的那个节点使系统恢复运行。由于不需要重装系统,因此节省了不少时间,用户可以在多个快照节点之间执行恢复和删除快照的操作。

4. 服务的管理要求

1)云服务的支撑性要求

主要包括任务调度与分发、虚拟网络管理和生命周期管理等,虚拟机需要支持任务的调度与分发、虚拟网络的管理,以及生命周期管理。

2)安全管理

除了安全机制外,针对云服务特点的要求主要有多租户安全访问等。

多租户的安全访问是十分重要的安全管理要求,对于云服务多租户的特点,要求多个租户(用户)之间不干扰且均能安全地访问服务。

3)维护管理

主要包括实时统计与监控、报警、维护管理工具和开发接口等。

2、多核虚拟机监控技术

目前多核虚拟机监控一般采用硬件虚拟化的技术,即通过虚拟化技术虚拟出多个串口来达到监控目的。

监控系统行为是虚拟机系统的核心任务,监控系统可用于调度任务、负载均衡、向管理员报告软硬件故障并广泛控制系统的使用情况。其具体实现方法各异,下面选择基于系统级共享内存的方案来实现监控系统行为。

1. 多核虚拟机系统架构

多核虚拟机指硬件平台的CPU拥有多个CPU核,使用硬件辅助虚拟化技术使得各台虚拟机运行在独立的CPU核上。多核虚拟机系统的框架如图所示。

其中包括用户层、核心层和硬件层 3 个层次;同时将系统分成 n 个分区,每一个分区都有 OS、内核及内存,有的分区还含有网卡。 

2. 用硬件虚拟化技术实现多核虚拟机监控

通过虚拟化技术使得在一套硬件平台上同时运行多个操作系统,此时很自然地需要监控整个系统的状态及特定的操作系统行为。目前的多核虚拟机的监控通常采用硬件虚拟化的技术来实现,即通过虚拟化技术虚拟出多个串口使每操作系统都认为自己拥有串口资源,通过各自虚拟串口即可进行监控。

虚拟化系统中的I/O访问需要在客户操作系统、VMM、设备驱动程序和I/O设备共同参与下才能完成。虚拟设备是由VMM创建并提供给客户操作系统进行I/O访问的虚拟I/O设备,客户操作系统只能观察到属于它的虚拟 I/O 设备,其所有 I/O 访问都被发往其虚拟 I/O设备。然后VMM软件从虚拟I/O设备中获取客户操作系统的访问请求,继而完成真正的I/O访问。

使用 I/O 虚拟化技术,由于中间层的存在,因此性能上往往损失较多。然而为了优化性能,需要对VMM软件进行很多修改,其中主要修改是对设备驱动程序的开发支持。设备驱动程序是导致系统崩溃的一个重要原因,这种对VMM的修改将给系统的安全性和可靠性留下重大隐患。而且还会使得VMM软件设计变得更加复杂,不利于VMM软件更新升级。即使用 I/O 虚拟化技术需要在性能与复杂性和可靠性之间进行一个折中,很难同时满足高性能、高可靠性及低复杂性。

硬件虚拟化技术的框架如图所示:

3. 基于共享内存的多核虚拟机监控

这里采用一种新颖的方法来实现多核虚拟机的监控,即利用操作系统级的共享内存和伪终端(Pseudo Terminal,PTY)等,基于共享内存的多核虚拟机监控的框架,如图所示。 

在基于共享内存的多核虚拟机监控方案中所有操作系统通过将命令发往系统级共享内存,然后交由后端(相应的操作系统)执行,最后将命令执行结果发往共享内存。

所谓共享内存就是在物理内存中开辟一段可以被操作系统和监控系统同时访问的内存空间,因为高级语言只能操作逻辑地址,所以操作时需要将物理地址映射成逻辑地址。系统级共享内存逻辑如图所示。 

图中的共享内存1表示操作系统1和监控系统共享的一段内存空间,这段内存空间是操作系统1和监控系统都可以访问的;同理,共享内存2表示操作系统2和监控系统共享的一段内存,共享内存n是操作系统n和监控系统共享的一段内存空间。

共享内存的实现步骤一是系统初始化时在物理内存中预留一定大小的内存空间,这部分内存空间不分配给任何操作系统和监控系统;二是操作系统与监控系统在使用共享内存时,通过共享内存API调用,共享内存API封装了对预留内存空间申请,以及由物理地址空间到虚拟地址空间的转换。

通过共享内存API即可在预留的内存空间内申请一块一定大小的内存,并返回申请内存的虚拟地址。为了实现该内存在操作系统与操作系统,以及操作系统与监控系统之间共享,实现上使用标识符对各个共享内存段进行标识(系统为所有标识符建立一个表,当第1次用一个标识符调用共享内存API时在该表插入一行数据记录标识符到虚拟内存地址的映射关系,当再次以相同的标识符调用共享内存 API 时则直接返回虚拟内存地址),两个操作系统或者操作系统与监控系统使用同一个标识符调用共享内存API时返回相同的虚拟地址;三是封装一些共享内存同步与互斥机制的API,方便使用共享内存。

使用基于系统级共享内存的实现方法无需对VMM软件与操作系统内核进行任何修改,所有修改都在操作系统中层完成,拥有高安全性与低复杂性。 

3、虚拟机双机热备份技术

为了降低服务器故障,甚至宕机引起的损失,通常采用主从复制(Primary-Backup)方案。即通过构建备份的方法降低系统故障概率,提高虚拟机可用性。

主从复制方案采用主从两台服务器,主服务器运行应用程序。而从服务器则处于等待状态,当主服务器出现故障时触发从服务器接替主服务器继续提供服务。

双机热备份是主从复制方案的一种实现方法,基于Xen实现虚拟机双机热备份主要有3种方式,一是连续存储、共享硬盘和事件驱动,在文件读/写时触发虚拟机同步操作。该方法只需暂停主虚拟机毫秒级时间即可完成同步过程,可用性高,但传输数据量大;二是基于网络附加存储、固定时间间隔和共享页表(Shared Page Table)的预复制,该方法同步时所传输的数据量小。但会产生频繁的影子页访问错误,用户请求响应有较大延迟;三是停机复制镜像文件快照到备份虚拟机,该方法简单易行。但每次传输快照大小与当时内存的大小一致会造成脏页频繁重传,降低虚拟机的可用性。

为提高虚拟机双机热备份时的可用性,用双影子页表可实现零停机。在主虚拟机运行阶段主页表记录主虚拟机的操作,后期使用最近最通常访问算法从主页表中挑选页保存到备用页表;在同步阶段原主页表实现主虚拟机与备份虚拟机间的同步,备用页表作为主页表,避免了同步过程主虚拟机停机。实验表明与 Xen4.0 中的Remus 相比,该方法在虚拟机内存变化频繁时可以较大程度地降低用户服务响应的延迟。

双机热备份是实现虚拟机可用性的一种容错机制,通过Primary-Backup 方案保证主服务器出现宕机时其中的虚拟机关键性应用仍能正常运行。双机热备份实现方式在主服务器上利用影子页表技术记录并形成脏页列表,通过从主虚拟机(Primary)到备份虚拟机(Backup)复制脏页列表实现同步,保持两台虚拟机状态一致。

1. Remus 技术

Remus 技术建立在Xen的Live Migration功能之上,通过在备份服务器中保留实时更新的副本为运行在 Xen 监控程序平台上的虚拟机提供高可用性。

Remus架构如图所示:

由图中可以看出主VM与备份VM拥有独立的镜像文件,通过网络连接由主VM对外提供服务,VMM利用快速复制技术把主 VM 的状态实时同步到备份VM中。当主VM出现故障时备份VM可以立即接替主VM对外提供服务,此过程对用户完全透明。

Remus的双机热备方案中采用影子页表(Shadow Page Table,SPT)机制记录主虚拟机的运行状态。

2. 影子页表

影子页表是Xen实现虚拟地址到机器地址转换的方式,主要用于实时复制虚拟机操作系统(Guest OS)的页表,在VM 执行时监控程序在宿主机的页表地址寄存器(CR3)中放入的是影子页表中指向最高级的影子页表的指针(物理地址)。

如果 VM 修改页表内页,则称该页为“脏页”。主从虚拟机同步时主虚拟机只传输脏页到备份虚拟机,以降低同步时数据重复率,减少数据传输量。Xen更新影子页表主要有两种方法,即out-of-sync和emulated write。

out-of-sync的步骤如下:

  1. Guest OS修改其页表,发生页保护异常陷入到Xen。
  2. Xen将Guest OS的页表置为“允许写”状态,并将影子页表中对应项所在页表中的所有页置为“out-of-sync”状态,即页不存在。
  3. 返回至Guest OS重新执行更新页表操作,更新成功后Guest OS页表与影子页表不同步。
  4. 当需要使用页表中的页时进行地址转换,由于此页在影子页表中已被置为“out-of-sync”状态,故发生缺页异常陷入Xen。
  5. Xen 将 Guest OS 中的页表重新置为“只读”状态,更新影子页表。即将不同步的页表项按Guest 中的虚拟地址在影子页表中更新为机器地址;同时同步完成,返回到Guest。

emulated write 更新影子页表的步骤如下:

  1. Guest OS修改自己的页表,发生页保护异常陷入Xen。
  2. Xen直接解析Guest OS对页表的更新操作,替Guest OS完成更新页表的操作并在同步更新影子页表后返回Guest。

emulated write相较out-of-sync操作更为简单,基于Xen的Remus采用emulated write实现对脏页定位,定位原理如下。

  1. Guest OS页表均以只读方式映射到影子页表。
  2. Guest OS修改自己的页表,发生页保护异常陷入到Xen。
  3. Xen直接解析Guest OS对页表的更新操作,替Guest OS完成更新页表操作,并同步更新影子页表在脏页位图中记录。

通过影子页表机制脏页被追踪并记录到脏页位图中,为Primary VM和Backup VM复制脏页实现状态同步提供重要依据。

3. 影子页表在Remus中的应用

Remus是一种Primary-Backup虚拟机双机热备模式,利用“暂停-复制”的检查点方式同步主虚拟机与备份虚拟机,其工作流程如图所示。

T0~T2为主虚拟机的一次工作周期,分为运行和同步两个阶段。主虚拟机的运行阶段即图3-17所示时间段T0~T1,影子页表记录主虚拟机的操作。

T1时刻为检查点,开始按主从虚拟机状态同步。时间段 T1~T2 为同步阶段,此阶段主虚拟机暂停运行。缓存对用户输出被缓存并检查段 T0~T1 内相对于上次检查点的修改页面备份并传到备份虚拟机,以实现主从虚拟机状态同步;T2 时刻备份完成,备份虚拟机向主虚拟机发送接收。

Remus 在检查点结束时即清空页表,造成下一轮运行过程频繁缺页错误,降低主虚拟机的可用性。在频繁同步过程中主虚拟机处于暂停状态,用户输出服务被缓存。对于实时性要求较高的应用,用户不可接受这种延迟。

五、虚拟机迁移原理

1、虚拟机迁移方式

虚拟机的迁移可以实现服务器的在线维护和升级等工作,也可以应用于负载均衡和灾难恢复等方面。用其可有效地提高系统的综合性能和系统的可靠性,增强服务的可扩展性和可管理性,具有很强的实用性。

根据虚拟机在迁移过程中是否完全中断可以将虚拟机迁移分为静态迁移(即系统冷迁移或停机迁移)和动态迁移(即热迁移或在线迁移)两种技术。

虚拟机静态迁移是指在迁移时必须先挂起源虚拟机,然后执行相关内容的迁移,在迁移过程中源虚拟机所提供的服务是中断的。

虚拟机动态迁移是在虚拟机迁移过程中虚拟机中运行的应用不会由于虚拟机的迁移而受到影响被中断,其定义是保证服务在虚拟机上正常运行的同时将一台虚拟机及其操作系统从一台宿主物理主机移动到另一台物理主机的过程。

该迁移过程不会影响应用业务的正常运行,从而使得管理员可以在不影响用户对应用业务访问的情况下完成物理服务器的离线维修或者升级,并且在服务器工作负荷较大时可降低其工作负载。在迁移的前期阶段应用业务在源宿主主机的虚拟机中正常运行,此阶段使用预复制方式来进行内存的预迁移。当迁移过程中的预复制进行一段时间后,目的主机就会具备运行虚拟机系统的必要资源,此时通过预复制退出条件进入停机复制阶段。

经过一个毫秒级的停机复制后唤醒已迁移到目的主机上虚拟机,源主机将其控制权和网络地址转交给目的主机,部署在虚拟机中的应用业务也会随着虚拟机迁移到目的主机并继续运行。对于虚拟机中运行的服务而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而整个迁移周期过程对用户是透明的。

虚拟机迁移有3种方式,即物理机到虚拟机(P2V)、虚拟机到虚拟机(V2V)和虚拟机到物理机(Virtual Machine to Physics Machine,V2P),三者均在内核虚拟机KVM中实现。V2V虚拟机迁移指在VMM上运行虚拟机系统,能够被转移到其他物理主机上的VMM上运行。VMM对硬件资源进行抽象和隔离,屏蔽了底层硬件细节。

2、虚拟机迁移指标

动态迁移的目标就是尽可能地减少系统的总体迁移时间、停机时间、最小的网络带宽消耗及合理的总迁移时间,而且不要因为资源争夺而干扰在同一主机内的其他应用服务。当然,在实际环境下这几个因素互相影响,迁移实施者需要针对不同的情况衡量。

虚拟机迁移的性能指标包括如下4个方面:

  1. 对应用性能的影响和损失:迁移对于被迁移主机上运行服务性能和应用性能的影响程度,以及虚拟机内部应用执行延时或对外表现出的性能抖动,任何动态迁移方案都会出现一定程度的应用性能损失。
  2. 停机时间:迁移过程中源主机和目的主机同时不可用的时间。
  3. 整体迁移时间:从源主机开始迁移到迁移结束的时间。
  4. 总数据传输量:在同步虚拟机状态时总共传输的数据。

动态迁移应该对虚拟机、运行在虚拟机内的应用程序和虚拟机的远程用户透明。

停机时间意味服务不可用,如果应用程序对延迟敏感,较长的停机时间会导致可察觉的服务中断而引起一致性和透明性等问题。迁移过程中传输的数据越多,就会消耗更多的网络带宽和CPU资源。相应地,总迁移时间也会更长。

在被迁移虚拟机中运行的应用程序会遇到更长的性能下降时间,因此改善迁移性能是必要的。

3、虚拟机迁移的对象

为了确保迁移后的服务能够在目的虚拟机上正确执行,需要将源虚拟机的资源及状态信息等一同迁移到目的虚拟机中。

虚拟机的迁移包括完整的状态和资源的迁移,如磁盘、内存、CPU 状态和I/O设备等。虚拟机迁移大致可分为对网络资源的迁移、存储资源的迁移,以及内存和CPU状态的迁移。

1. 网络资源

虚拟机在迁移时迁移整个系统,为了保证迁移后服务的连续性,原虚拟机的网络链接状态、IP地址和协议状态都要封装在一起迁移。

在一个局域网内被迁移的虚拟机发送一个地址解析协议(Address Resolution Protocol,ARP)重定向报文就可以把VM的IP地址与目的主机的 MAC 地址相绑定,这样后续的网络数据包就会送向新的迁移后的虚拟机。若无需保持原虚拟机的网络链接状态等,也可以选择从当前IP地址迁移到另一IP地址的虚拟机上。

2. 存储资源

由于存储设备的数据量比较大,因此迁移存储设备时需要占用大量的网络带宽,并且迁移过程持续的时间较长。为了解决这个问题,可以使用共享方式来共享数据和文件系统。

现在大多数集群服务器都釆用网络附加存储(Network Attached Storage,NAS)方式作为存储设备来共享数据。NAS 实际上是一种具有瘦服务器的存储设备,它用 TCP/IP 协议通信并通过文件的 I/O 方式来传输数据,因而其作用与一台专用文件服务器相类似。

在这样的环境中NAS 具有许多优点,包括简单的集中式管理、广泛的供应商的支持和降低故障率等。使用NAS的另外一个优点是省却了迁移磁盘存储,集群中的所有主机都可以共享访问NAS。结合网络文件系统(Network File System,NFS)两台迁移的源虚拟机和目的虚拟机可以通过NFS共享本地局域网中的存储空间,从而有效地简化了虚拟机迁移过程中的存储设备迁移问题。

3. 内存

在虚拟机迁移过程中内存的迁移最为困难和具有挑战性,因为内存中的信息量大且必不可少。虽然CPU状态与I/O设备也重要,但它们只占迁移中数据量的很少一部分。

为了实现虚拟机的迁移,一个完整的内存迁移过程可分为如下3个阶段。

  • Push阶段:即推阶段,该阶段源虚拟在正常运行时将一部分不太活跃的内存页面通过网络复制到目的主机中。为了保证迁移前后源主机与目的主机的内存内容的一致性,迁移过程中源虚拟主机中修改过的内存页面需要被重新复制到目的主机中。
  • Stop-and-Copy阶段:即停机复制阶段,在该阶段源虚拟机停止运行把剩余的内存页面和其他状态(CPU和I/O设备)复制到目的主机中,之后在目的主机的虚拟机监控器中启动新的虚拟机。
  • Pull阶段:即拉阶段,在该阶段新的虚拟机在目的主机中恢复运行状态。如果访问到缺失的页面且提示页面访问错误时,则通过页面错误处理机制请求源主机重传缺失页面。

虽然虚拟机内存的迁移方案包括上述3个阶段,然而目前大部分的迁移策略只选取其中一个或两个阶段。停机复制阶段其实是静态迁移,使用这种方案迁移VM虽然比较容易,总迁移时间也最短,但停机时间不可预知。

因为将源主机内存页面全部复制到目的主机时源主机中的虚拟机是停止工作的,总迁移时间和停机时间与分配给被迁移虚拟机的物理内存大小成正比,所以这种方案不理想。

与之相比,采用推阶段(内存预复制)和停机复制阶段相结合的算法能够有效缩短停机时间,如Xen采用内存预复制和停机复制相结合的方法。此外,不同的虚拟机监控器类型在传输内存页的方式上有所不同。例如,Xen 采用批量传输方式,而 KVM 则采用单一传输方式。

4、虚拟机动态迁移

1. 动态迁移的特点

动态迁移的特点如下:

  1. 动态迁移发生时源平台中的虚拟机保持正常运行,从应用程序的角度来看,服务没有中断。用户感觉不到迁移正在发生,如同自己请求的服务仍在原来机器中运行一样,因此对虚拟机内部的服务来说迁移是透明的。
  2. 可以将负载重的机器的工作任务转移到负载轻的机器中运行,达到多台机器的负载均衡,提高资源的利用率。
  3. 可以保证服务质量,若机器出现意外故障,可以通过虚拟机动态迁移将其中运行的虚拟机迁移到另外一台工作良好的机器中,以便在服务无间断的同时保证服务质量。
  4. 动态迁移过程中会在一定程度上降低用户接受的服务质量,因为虚拟机迁移时多次传输内存状态信息会带来一定的系统负担,所以用户实际接受的服务质量比原来有所下降,但是这种性能下降被限制在用户感受不到的范围内。
  5. 迁移结束后虚拟机在目标服务器中开始执行时虚拟机的整个状态与源机器上的虚拟机的状态一致。
  6. 可以实现机器配置的升级。

2. 动态迁移策略

动态迁移过程中涉及的主要迁移策略如下:

  1. 监测策略:用于实现对负载指标的监测,决定何时及如何收集负载信息,并根据收集到的负载信息计算负载情况。
  2. 触发策略:虚拟机执行迁移的触发策略,决定何时进行虚拟机迁移。现在大多数负载均衡算法的迁移策略都基于特定阈值,即当虚拟机的某个指标超过提前设定的特定阈值时就会触发虚拟机的迁移。
  3. 选择策略:在负载过重的服务器节点上选择虚拟机进行迁移,虚拟机的迁移需要完成虚拟机状态和资源的迁移,包括CPU、内存和I/O和硬盘等信息。所以在进行迁移时要选择合适的虚拟机,以减少虚拟机迁移带来的系统开销。
  4. 迁移策略:为待迁移虚拟机确定合适的迁移目标节点的策略,目标服务器的选择可以基于不同的标准,如随机选择、最快反应速度、首次适应或最佳适应等。

3. 动态迁移的要求

要实现动态迁移,必须达到以下要求。

  1. 最小中断:迁移时尽量使停机时间最小,因为在停机时间内任何服务都无法执行。
  2. 一致性:总迁移时间不要太长,因为这段时间内两台机器状态必须同步;否则可能会影响稳定性。
  3. 最小干扰:保证迁移不会通过资源争夺来干扰正在活动的服务,如CPU和网络带宽。
  4. 透明性:迁移过程对用户应该是透明的,在迁移期间要维持所有的网络连接和应用程序状态。

4. 动态迁移的应用

虚拟机动态迁移是数据中心和集群管理员极其强大的工具,能够改善系统的性能并提高资源配置的灵活性,因而应用于很多重要方面。

  1. 负载均衡:定期收集资源使用信息,把虚拟机重新分配到数据中心或集群中的物理机中。把超负载物理机上的一些虚拟机迁移到轻负载物理机上,均匀地分配工作负载,避免由于频繁地部署和终止虚拟机引起负载不平衡。
  2. 在线维护:有时需要维护或者升级物理机,利用动态迁移可在维护时把虚拟机迁移到其他物理机上而不必关闭虚拟机,提高系统的可维护性。
  3. 主动容错:监测节点的健康状态,如温度或者磁盘错误日志等。如果某台物理机可能出现故障,则将其中的虚拟机主动迁移到更安全的位置。这样能减少用户察觉到故障的概率,提高系统的可靠性。
  4. 资源优化和电源管理:调节数据中心或集群的资源分配和优化资源的使用,可将虚拟机从轻负载的主机整合到重负载的主机中。一旦迁移完成,之前运行这些被迁移的虚拟机的主机即可关闭。这样有助于降低成本,节省能源消耗。

总之,虚拟机动态迁移提高了数据中心和集群的管理及提供服务的能力,实现了资源的灵活分配并提高了系统的可靠性。从而可以获得更强大的计算能力、更大的内存和快速的通信能力并节省能源。

5、虚拟机动态迁移的系统架构

下图所示为虚拟机动态迁移框架的整体架构,其中迁移框架由中央控制引擎和位于各独立服务器中的本地迁移引擎组成。

虚拟机动态迁移框架整体架构:

1. 中央控制引擎

中央控制引擎从整体上掌握物理资源的使用情况,根据预设策略按需发起虚拟机动态迁移操作,实现平台范围内的负载均衡。

中央控制引擎主要由资源监控模块和迁移管理模块两个部分组成,资源监控模块的作用是和本地迁移引擎中的资源监控器交互,获得整个系统中物理服务器和虚拟机对于CPU、内存和网络带宽的使用情况并汇集形成整个平台的资源使用视图提供给迁移管理模块使用;迁移管理模块根据资源使用视图查找资源使用热点,并最终确定是否发起,以及如何发起虚拟机的动态迁移操作。

热点的探查主要基于虚拟机的SLA不能被满足,如不能获得期望的网络带宽、物理服务器对于CPU和带宽的使用率超过预定阀值,以及物理服务器频繁发生内存换出。 

2. 本地迁移引擎

本地迁移引擎向中央控制引擎提供本地资源使用情况、接收中央控制引擎发出的迁移命令并执行实际的迁移操作,该引擎主要由资源监控器、迁移代理、迁移控制器、状态转换器和算法池几个部分组成。

资源监控器负责获取本地服务器中CPU、内存和网络带宽等资源的使用情况,在虚拟环境下各虚拟机对于不同资源的需求不尽相同,取决于其中执行的应用程序。

资源监控器不仅需要获得整个物理服务器中的资源使用情况,还需要获得运行在上面的各虚拟机的资源使用情况;迁移代理从中央控制引擎接收迁移命令,与另一端的迁移代理交互发送/接收虚拟机的状态;迁移控制器根据虚拟机当前负载情况对动态迁移本身所占用系统资源进行控制,从而保证迁移过程中虚拟机的SLA。

状态转换器主要是为了能够在不同类型的VMM上进行虚拟机动态迁移而设计的,不同的VMM对硬件资源(主要包括CPU、内存和I/O设备)的抽象具有不同的形式;状态转换器首先把本地虚拟机状态(主要包括CPU、内存和I/O设备)转换成一种通用格式,然后通过迁移代理把通用格式的状态发送到目的主机;算法池中实现了多种虚拟机迁移算法,不同的迁移算法适合不同的需要。

该迁移框架是一种自动、灵活并能够满足SLA的虚拟机动态迁移架构,其优点一是能够实时监控网络环境中资源的使用情况,自主发起动态迁移;二是能够在不同类型的虚拟机监控器间进行虚拟机的动态迁移,大大提高动态迁移的灵活性;三是能够对动态迁移的过程进行实时控制,避免迁移过程占用过多资源,从而保证迁移过程中虚拟机的 SLA。

6、Xen动态迁移的模块组成及流程

Xen 虚拟机的动态迁移主要有以下模块组成:

1. 监听迁移模块

监听迁移模块是整台虚拟机动态迁移的第 1个模块,主要工作包括解析迁移命令,以及向目的服务器发送迁移信号要求迁移并根据虚拟机的资源情况预定目的服务器的资源。

这些工作均由虚拟机管理系统 VMM 来完成,它保证了运行在之上的虚拟机之间的隔离性。VMM 作为管理程序,管理协调系统环境中运行的虚拟机。每一个在VMM内运行的域都要在VMM中记录,同时记录虚拟机的存储情况和运行情况。VMM 为每个域设置一个 stub,用于建立与客户域之间的通信。

stub 一旦监听到迁移信号,则向 VMM 发送迁移请求信号,VMM 根据迁移信号的信息返回确认信息和迁移信号对应虚拟机的运行状态并向运行迁移模块发送“启动”信号进入下一个模块,即运行迁移模块。

2. 运行迁移模块

运行迁移模块负责迁移的大部分工作,在监听模块发送一个迁移信号后收集源域的系统状态信息,包括虚拟CPU、系统的时间、各个寄存器和I/O设备通信的状态等。

对收集到的状态信息进行封装,然后向冻结模块发送“冻结信号”对源域进行冻结,将源虚拟机的内存页复制到目的虚拟机。复制结束后向目标域发送“唤醒信号”,唤醒目标域。这个过程是整个迁移过程的关键,直接影响迁移的整体时间和迁移过程的宕机时间,以及迁移后的性能问题。

3. 停机复制模块

当出现满足 Pre-copy 算法中的多个迭代终止条件之一时运行迁移模块立即冻结源虚拟机,停止脏页的产生,为下一步源域和目的域的同步创造条件。

进入 Stop-and-Copy 阶段,将页位图to_send和to_fix标记的内存页发送给目的主机。然后将CPU寄存器的状态和网络状态信息复制到目的主机,使得源主机上和目的主机上的内存达到同步。随后目的主机向源主机发送内存已经同步的信息,源主机确认之后销毁源域并进入目标域唤醒模块。

4. 目标唤醒模块

目标域唤醒模块的主要工作是得到源域中足够的内存信息唤醒目标域工作,它首先要和源主机的VMM建立联系,判断源域和目的域是否已经同步。

如果同步,则根据IP地址和新域的配置文件,在目的域中判断该域是否是迁移成功的新域。如果IP地址和配置文件匹配,则证明该域是迁移成功的新域。然后激活目标域,由目标域代替此时已经被关闭的源域服务,结束目标唤醒域的工作。

Xen动态迁移流程主要包括如下阶段:

  1. 预迁移阶段(Pre-Migration):在主机A中开启一台准备迁移的虚拟机,先选择一台有足够资源的主机B作为迁移的目的主机。
  2. 资源预定阶段(Reservation):在从主机 A 迁移一台虚拟机到主机 B 时产生一个迁移请求、首先必须确认主机B中有足够迁移的资源。如果没有获取到足够的资源,则虚拟机继续在主机A中运行不受影响。
  3. 预复制迭代阶段(Iterative Pre-Copy):在第1轮迭代时所有内存页从主机A传输到主机B,后续迭代传输那些在上一轮传输中被修改的页。
  4. 停机复制阶段(Stop-and-Copy):中断主机 A 中的虚拟机,重定向网络数据流到主机B。如前面描述的一样,CPU状态信息和预复制迭代阶段中剩余还没有传送的内存页在此时传送。在本阶段结束时主机A和主机B中应该同时拥有一份挂起的虚拟机的副本,主机A中虚拟机的副本作为备份,防止主机B激活后出现错误。
  5. 提交确认阶段(Commitment):主机B通知主机A已成功收到一个一致的操作系统镜像,主机 A回应这个消息作为确认。此时主机A可以销毁原虚拟机,主机 B作为首要的主机。
  6. 激活阶段(Activation):此时可以激活主机B上的虚拟机,后续迁移的代码开始执行,重新绑定设备驱动到新的机器上并且广播新的IP地址。

假定源主机在迁移事务提交前一直稳定,VM 在源主机上可以安全地挂起和重启动。这种方法可以保证在迁移过程中任何时候至少一台主机有此VM的映像,这样不管遇到什么错误都可以在本地恢复。 

7、共享存储的动态迁移

共享存储的动态迁移就是把虚拟机存储文件存放在公共的存储空间中,让源主机和目的主机都能够通过互联网、NIC、FC和FC交换机连接到共享存储空间上的虚拟媒体文件。然后通过高速网络把内存运行状态及虚拟机配置从一台物理主机迅速传输到另外一台物理机,而在迁移期间虚拟机一直保持运行状态。

下图所示为采用SAN集中式共享外存设备的示意,在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而缩短迁移和服务中断时间而获得较好的迁移性能。

在迁移之前应用服务 App运行在源主机中,其应用进程驻留在源主机内存中。在监控机制监测到源主机的资源紧凑而负载过大时,通过决策机制选择最低消耗的应用进程进行迁移。

执行机制发起迁移,在目的主机中创建与源主机相同的应用服务运行的配置环境。然后由源主机向目的主机迁移内存,应用进程还运行在源主机中等待目的主机中的配置环境与迁移之前源主机中的配置环境相同时快速切换,此时会发生短暂宕机。

切换完成后应用服务进程开始在目的主机上运行,迁移期间在源主机产生的数据后续会迁移到目的主机,在迁移过程中目的主机与源主机的外存共享SAN存储。

共享存储的虚拟机动态迁移架构,如图所示。

系统资源监控由中央控制引擎中的资源监控模块和本地迁移引擎中的资源监控器配合完成,前者周期性地向资源监控器发出请求,如每5秒发送一次请求使用获取各独立节点上的资源使用情况。后者负责监控本地服务器上各虚拟机使用CPU、内存和网络带宽的情况,并通过综合获得当前物理服务器的整个资源使用情况。

  1. CPU:在虚拟环境中 VMM 负责调度各虚拟机,通过跟踪虚拟机切换的事件 VMM可以比较方便地获得各虚拟机使用CPU的情况,在实现中通过修改VMM截获虚拟机切换的事件获得各虚拟机的CPU使用率。
  2. 内存:在创建虚拟机时VMM 根据用户的需求为其定量分配物理内存,而虚拟机在执行过程中的内存使用情况只有操作系统清楚。但是在完全虚拟化中操作系统未经修改,所以只能从VMM中来获得虚拟机的内存使用情况。当内存使用发生紧缺时操作系统会将部分内存页写到交换分区中以获取内存,通过在VMM中监控虚拟机读写交换分区的操作可以知道虚拟机是否发生内存紧缺的情况。
  3. 网络带宽:在完全虚拟化中网络设备通过设备模型模拟出来,VMM 可以截获虚拟设备的各项操作,通过监控虚拟网络设备的收发操作可以获得对应虚拟机的网络流量。 

8、本地存储的动态迁移

动态迁移基于共享存储设备,为的是加速迁移的过程,尽量减少岩机时间。但是在某些情况下需要进行基于本地存储的虚拟机的动态迁移,为此需要存储块动态迁移技术,简称“块迁移”。

如果某些服务器没有使用SAN存储且迁移的频率很小,虚拟机中的服务对迁移时间的要求不严格,则可以使用存储块动态迁移技术。另一方面,SAN 存储的价格比较高。尽管它能够提高迁移性能和系统的稳定性,但是中小企业仅仅为了加快迁移速度而配置,则性价比不高。

考虑到目前一些计算机集群并没有采用共享式外存,而是各自独立拥有本地外存的物理主机构成。因而基于共享存储的虚拟机迁移技术在这种场合下受到约束,当虚拟机迁移到目的主机后使其不能访问原有的外存设备,或者需要源主机为其外存访问提供支持。

为了拓宽动态迁移技术的应用范围,需要实现一个包括虚拟机外存迁移在内的全系统动态迁移方案。使得在采用分散式本地存储的计算机集群环境下仍然能够利用迁移技术转移虚拟机环境,并且保证迁移过程中虚拟机系统服务的可用性,如图所示。

本地存储的虚拟机动态迁移的流程与共享存储类似,不过在其外存设备数据的迁移上却大相径庭,通过对内存迁移将其在内存中运行的应用服务进程迁移到目的主机中后还需要进行长时间的外存数据迁移。

虽然比较耗时,但是可以有效利用分散闲置的存储设备资源。本地存储的虚拟机动态迁移架构,如图所示。

9、虚拟机动态迁移方法

虚拟机动态迁移方法有多种,执行迁移时一般只采用其中的一种或两种方法。

按照所采用的基本迁移策略,将其归纳为基于内存复制的迁移和基于日志跟踪重现的迁移方法两大类,前者主要通过源主机向目的主机复制内存来同步两端的虚拟机状态,它又可分为内存预复制、内存后复制和内存混合复制迁移;后者基于记录源主机中的虚拟机执行,然后利用目的主机的计算能力重现,不再需要复制内存。

虚拟机动态迁移方法的分类,如图所示。

1. 基于内存预复制迁移方法

内存预复制迁移是当前应用最多的动态迁移方法,其中最具影响的是 VMWare 和XenSource 分别推出的VMotion和Xen-Motion。其实现机制相似,均应用于局域网并且有相似的方案用于内存和网络连接的迁移。

预复制迁移的工作过程为虚拟机监控器(VMM)将所有内存页标记为脏页面并复制到目的主机上,然后迭代复制内存页;同时虚拟机继续运行。这里的迭代是指采用几轮增量同步,上一轮传输过程中被修改过的页面在本次迁移。当需要传输的内存小于一个阈值或者迭代次数超过设置的最大迭代次数时停止迭代复制并挂起源主机中的虚拟机,复制CPU状态和最后一轮产生的脏页面到目的主机,然后恢复目的主机中的虚拟机。

大多数VMM通过脏页面位图记录修改过的内存页,每个内存页对应一位。在动态迁移过程中扫描位图,如果一个页面在位图中被标记为脏页,就将该页面传送到目的端。预复制迁移希望通过迭代复制操作最小化停机时间,经过若干次迭代改变的内存逐渐减少。因此剩下少量的脏内存页面能够实现快速迁移,明显缩短停机时间。

预复制迁移实现了在虚拟机运行的同时迁移,而且具有可靠性。如果目的主机出现故障,则终止迁移过程,继续在源主机运行虚拟机。但是经典的预复制迁移方法在实际应用中仍然存在许多问题,并在迁移过程中需要传输大量的数据。因此产生较高的网络开销,导致虚拟机服务性能下降。

特别是对于特定类型的虚拟机迁移,如迁移CPU和内存敏感或者应用程序负载密集的虚拟机,或者网络带宽低时虚拟机内存页面弄脏速度可能比网络传输速度快。进而延长停机时间和总迁移时间,甚至导致服务中断。

优化预复制迁移需要考虑导致内存脏页面产生率比网络传输率大的问题,如网络带宽低、工作负载高和虚拟机内存大等,以减少脏页面产生率或增加网络吞吐量。目前针对预复制迁移的优化方法有很多,下面介绍几种主要的迁移方法。

1)基于内存压缩的预复制迁移方法

该方法一方面压缩内存间接增加了用于迁移的网络带宽,压缩的脏页面在网络传输的时间减少;另一方面由于传输数据量的减少,因此迁移网络流量急剧下降。自适应内存压缩动态迁移方法MECOM和XBRLE动态迁移方法是典型且基于内存压缩的预复制迁移方法。

MECOM方法将内存页面分成3类,即由大量零字节组成、高相似度和低相似度的页面,并针对不同类型的页面采用不同的压缩算法。对于由大量零字节组成的页面只记录页面中非零字节的值和偏移等信息;对高相似度页面采用WKdm压缩算法.

对于低相似度页面采用具有高压缩比的通用压缩算法,如 LZO(Lempel-Ziv-Oberhumer)。LZO 是致力于解压速度的一种数据无损压缩算法,参考实现程序是线程安全的。每轮将要传输的内存页面首先通过该方法在源主机上迅速批量压缩,然后在目的主机上准确恢复。

XBRLE动态迁移方法将Delta压缩应用于预复制迁移方法的内存页传输过程,即传输内存页面改变的部分而不是整个页面。因为虚拟机内存页是二进制形式,因此通过对当前页面和修改前页面应用异或操作计算 Delta 页。即该页面被修改的部分,然后在目的端对修改前页面和Delta页应用异或操作得到当前页面。

一般情况下当页面被弄脏时只有小部分被改变,因此XBRLE 通过二进制运转周期编码(Run Length Encoding,RLE)压缩Delta页。考虑到源端内存内容不断变化和保存页面的开销等问题,采用二路组相连缓存模式保存修改前的页面,并且使用较大的缓存以减少缓存振荡的发生。
基于内存压缩的预复制迁移方法需要特别考虑压缩算法的使用,压缩比小,则不能达到理想的效果;压缩比大,可能需要较长时间。如果压缩时间开销大,就会影响迁移性能。

2)基于内存冗余数据消除策略的预复制迁移方法

根据预复制迁移过程中运行时内存镜像数据的特点,在每个迁移阶段都有许多重复数据的传输。在第1阶段存在大量的零内存页和相同或相似内存页;在之后的迭代迁移阶段大多数迁移内存页面只有少量的数据被修改,因此也存在很多相同或相似内存页,迁移这些内存页面大小的重复数据浪费网络带宽并增加总迁移时间和停机时间。

数据复制迁移(Migration with Data Deduplication,MDD)方法将冗余数据删除策略应用于预复制迁移中,它根据运行时内存镜像的自相似性来减少重复内存数据的传输。并使用基于哈希的“指纹”发现相同或相似的内存页面,接着在这些内存页面之间应用异或操作使内存页面的重复部分变成连续的零块。然后采用RLE压缩,再传输压缩后的数据,在目的主机中进行逆向冗余数据消除以得到原本的内存镜像。

MDD 还可通过多线程技术减少冗余数据删除带来的额外时间开销,并维护双哈希(double-hash)消除数据的不一致性。基于冗余数据删除策略的预复制迁移方法节省网络带宽,加速了迁移过程。需要注意的是冗余数据删除的开销应该尽可能小,不能超过节省的冗余数据的传输时间。

3)通过改变内存传输顺序优化预复制迁移方法

在预复制迁移过程中一些内存页面由于频繁修改而被多次传输,然而源端和目的端达到一致状态只需内存页面的最终版本,内存页面的多次重传消耗网络带宽且增加总迁移时间。改变内存传输顺序的基本思想是使频繁修改的内存页面尽可能在最后阶段传输,从而减少内存页的重传数目。

Clark等人提出了快页变脏的方法,即周期性地查看当前轮的脏页面位图,只传输那些在前一轮迭代复制中弄脏而在扫描时还没有再次被弄脏的内存页面。但是该方法的问题在于如果内存页面是在相隔的两次迭代复制中被弄脏,则该页面仍然需需要重新传输。

页面传输动态重排序方法在迁移过程中动态调整虚拟机内存页面的传输顺序,采样内存页面的更新频率并计算页面权重。通过引入页面优先级位图将页面根据不同的页面权重新组织,为更新频率低的页面赋予较高的优先级。按照优先级顺序传输内存页面,把更新频繁的页面留到最后传输。

该方法减少了传输的数据量和迁移时间,但是仅仅通过页面传输动态重排序不能解决减少停机时间的问题。

4)基于调节脏页面产生速率的预复制迁移方法

如果内存脏页面产生速率很高,每轮迭代都有大量内存页面被弄脏,导致更多的迭代复制轮数及很长的迁移时间。特别是迁移写内存密集型应用程序,或者源主机和目的主机之间的网络带宽低时脏页面产生速率比页面传输速率快。

无论执行多少轮迭代复制都会剩余大量的脏内存页面,导致较长的停机复制时间,甚至引起可察觉的服务中断,因此可通过调节脏页面产生速率优化预复制迁移方法。

限制每个进程发生写故障次数,达到写故障次数限制的进程进入等待队列,其本质是冻结写内存速度太快而不利于迁移的进程。但是它对于事务性应用程序具有危险性和破坏性会明显降低运行的应用程序性能,而且不适于复杂的环境。

将CPU调度引入预复制迁移过程中来控制脏页面产生率,在迭代复制阶段调节分配给虚拟机的 CPU 时间片以控制写内存速度。当虚拟机写内存速度太快时减少分配给该虚拟机的CPU 时间片而降低脏页面产生速率,使得停机复制阶段需要传输的脏页面大小控制在可接受的范围内。

通过CPU调度优化预复制迁移的方法可以减少停机时间,由于需要迁移的数据量减少,因此总迁移时间也相应减小,而且能够和许多其他优化方法兼容。但是减小迁移虚拟机的CPU时间片会影响运行在其中的应用程序性能,降低用户体验。因此这种方法适用于能够容忍一定程度的性能降低,而服务中断会导致严重问题的应用程序。

5)通过新网络技术优化内存页面传输

使用远端直接内存存取(Remote Direct Memory Access,RDMA)可实现高性能虚拟机迁移,现代高速互联提供RDMA和OS旁路功能。OS旁路允许数据通信在进程用户空间直接初始化,在此基础上利用RDMA的低软件开销和单边特性能够显著改善虚拟机迁移性能。

高速互联和RDMA 具有很高的带宽,提供极高的吞吐量,传输内存页的时间明显减小。RDMA和OS旁路允许内存直接通过硬件I/O设备访问,不必涉及OS、CPU、缓存或者上下文切换。即迁移虚拟机的内存页面能够以零复制的方式直接发送到目的主机,避免 TCP/IP 栈处理开销,使得虚拟机迁移对客户OS和主机上的应用程序影响最小。

充分利用RDMA 进行虚拟机迁移需要解决基于RDMA的有效迁移协议分别处理普通的数据页和页表页面问题,还要解决内存注册、传输粒度和网络服务质量等问题。

6)其他预复制迁移优化策略

对依赖感知的虚拟机动态迁移方法通过处理污点机制识别进程创建的外部依赖;另外按照处理污点传播,与创建外部依赖进程交互的进程间接地被标记为污点。在传输所有内存页之后的迭代过程只迁移属于自上轮迭代之后已经创建外部依赖的进程的脏内存页,而没有创建新依赖的进程不必迁移该进程的脏内存页,从而实现快速迁移。

迁移完成时目的主机的虚拟机中的所有进程对外部保持一致的状态,该方法特别适用于迁移支持CPU依赖应用程序的虚拟机。

针对访存密集型应用优化预复制迁移,根据虚拟机内存更新速率情况做出相应决策。当继续迭代复制不能减小停机时间时终止迭代复制进入停机复制阶段,这种方式不一定获得全局最小的停机时间。最大的好处就是适时终止迁移迭代过程,降低应用程序性能损失;此外,还有其他针对特定情况的动态迁移方法。 

2. 内存后复制迁移方法

与预复制迁移方法相反,内存后复制迁移推迟虚拟机内存的传输。首先挂起源主机中需要迁移的虚拟机,复制处理器状态到目的主机并在其中恢复,然后通过网络从源主机获取内存页面。获取内存页面的方式主要有按需取页和主动推送,前者最简单也最慢。

一旦虚拟机在目的主机中恢复,访问尚未传输过来的内存页面就会引起缺页异常,然后从源主机获得相应页面;后者确保每个内存页面只通过网络传输一次,而不像预复制迁移需要多次重传脏页。但是网络的往返延迟可能造成很长的迁移时间,虚拟机应用性能的损失较大。

主动推送方式在目的主机中虚拟机运行的同时源主机主动将内存页面传输到目的主机,能够尽快去除对源主机的剩余依赖。这种方式通常与按需取页一起应用于后复制迁移,在发生缺页异常前主动传输页面,以减少网络页面故障的发生。

页面预取技术可应用到后复制迁移中,这种技术根据网络缺页异常发生的位置和空间局部性原理预测目的主机中虚拟机的内存页面访问位置。然后调整主动推送页面的顺序,使得缺页异常附近的页面被虚拟机访问之前传输到目的主机。因此这种技术增加了推送的页面是虚拟机即将访问页面的可能性,进一步减少了缺页异常的发生。在开始迁移之前虚拟机中可能有大量空闲的内存页面,传输这些页面浪费网络和CPU资源并延长迁移时间。

虽然预复制迁移是当前主流的动态迁移方法,后复制迁移也在不断应用到实际中。例如,虚拟机整合的研究大多基于预复制迁移。通过后复制迁移实现动态虚拟机整合可在很短的时间内切换运行虚拟机的主机,把服务节点中的一些虚拟机迁移到其他主机,这样较基于预复制迁移实现的虚拟机整合能更快地应对虚拟机负载的突然变化。

下表是内存预复制与内存后复制在局域网动态迁移中的比较。

3. 基于内存混合复制迁移方法(HybMEC) 

内存混合复制方法最初用于进程迁移,首先通过一次预复制把所有内存页复制到目的主机。然后挂起虚拟机,将处理器状态和不可分页的脏页面复制到目的主机并在目的主机中恢复虚拟机。最后进行后复制,从源主机推送剩余的脏页面,这种方法将预复制和后复制很好地结合起来。

基于内存混合复制的动态迁移方法可将内存混合复制方式应用于虚拟机动态迁移,它将整个内存同步过程划分为以下3个阶段。

  1. 全内存同步:将整台虚拟机内存数据从源主机复制到目的主机,然后停止虚拟机运行,此过程标记所有被更新的脏页面。
  2. 内存位图同步:在源主机传送第1阶段记录脏页面的脏内存页面位图到目的主机,目的主机根据接收到的脏内存页面位图设置虚拟机相应页面的状态。
  3. 脏内存同步:目的主机恢复虚拟机运行,利用VMM 捕获虚拟机对脏页面的访问。若访问未同步的脏页面,则产生缺页异常,从源主机按需复制脏页面;同时源主机定时向目的主机推送未同步的脏页面以加速同步,并采用页面预取机制以避免频繁陷入由按需取页引起的缺页中断处理。

HybMEC分阶段利用推送复制和按需复制同步内存状态;此外主动避免对空闲页面按页面大小复制,禁止对空闲脏页面的按需复制,而且通过VMM为空闲脏页面直接分配本地内存页。

相对于传统的预复制迁移,HybMEC避免了内存迭代复制。在停机时间内只复制脏内存页面位图,减少了虚拟机停机时间。迁移过程中只有脏页面需要额外复制一次,大多数内存页面只需经过一次复制即可完成同步,减少了总迁移数据量和对网络带宽的占用。

4. 基于日志跟踪重现的动态迁移方法

预复制迁移、后复制迁移和混合复制迁移方法都集中于传输虚拟机运行时的内存状态,以内存复制方式同步虚拟机的状态。与这些迁移方法不同,基于伺机重现(opportunistic replay)虚拟机迁移和CR/TR-Motion通过日志的跟踪和重现技术同步虚拟机状态。通常情况下日志文件远小于脏内存页,明显减少传输数据量。

伺机重现虚拟机迁移方法在图形用户界面(GUI)级捕获用户与应用程序间的交互,如按键和鼠标移动等。并生成相应的日志文件传输到目的主机,在目的端虚拟机中重现用户的交互行为,该方法要求在执行迁移前目的主机与源主机的虚拟机有相同的配置和初始状态。由于只在 GUI 级,而不是全系统范围内记录和重现,所以最终产生的虚拟机状态接近但不完全一致,可使用加密哈希技术识别和传输不同的虚拟机状态。

CR/TR-Motion 采用检查点/恢复和跟踪重现技术实现快速透明的虚拟机动态迁移,它记录足够的信息(影响系统计算的非确定性事件,如外部输入)在源主机中生成执行跟踪日志,利用目的主机的计算能力重现源虚拟机的执行来同步迁移虚拟机的状态。

迁移过程如图所示:

在准备阶段虚拟机被转换成检查点文件,并被传输至目的物理机,期间不中断源物理机中运行的虚拟机。当目的物理机接收检查点文件后就拥有了虚拟机的完整状态(CPU状态、内存和磁盘内容等),当然这些状态是过时的。

为了同步虚拟机状态,需记录源虚拟机中的所有不确定事件,并把相应日志传输至目的虚拟机执行回放。一般日志文件小于相应的状态改变(被修改的内存页或数据块),回放速度也要比日志生成速度快。对于大多负载而言,日志增长速率小于8 Mb/s,比局域网普遍的网络带宽小很多。若干次回放后剩余日志小到足够快速回放时源虚拟机被停止,剩余的日志文件被传输并执行回放。

CR/TR-Motion需要满足一些前提条件,如日志传输速率要比日志生成速率快;否则生成的日志文件会在源主机上累积。而且,日志重现速率也要比日志生成速率快,源节点和目的节点的不平等限制了这种方法的应用范围。另外,在多处理器或多核环境下使用CR/TR-Motion进行动态迁移需要通过虚拟CPU热插拔等技术的特殊处理 

六、虚拟机部署方案

1、需求分析

虚拟机部署主要是面向用户提供虚拟机服务模式,最终目的是为了满足用户需要的CPU频率、磁盘空间、内存、网络配置和系统环境等的虚拟机服务。即满足用户请求服务的流程,如图所示。

1. 服务请求

用户通过Web页面或者客户端提交所需的虚拟机类型,包括硬件配置(CPU频率、核心数、内存、磁盘大小和网络带宽等)和软件环境(如操作系统和应用软件等)相关参数。

2. 虚拟机类型库

由云计算服务商提供的一些常见的针对特定服务需求制定和开发的满足用户需求的软硬件环境,包括内部组件的基本属性、对外接口的描述及相互关联的方式。

例如,一个 Web 系统开发的虚拟机需对虚拟机性能、Windows Server 2003 操作系统、lis、Windows Visual Studio、存储或数据库服务组件进行必要的约束。服务提供商需约定虚拟机类型的相关组件,以确保按照这些类型创建的虚拟机实例可以满足用户所需要的服务。

3. 个性化服务约束

有时云计算平台所提供的虚拟机类型不一定完全适合用户的服务需求,如果是这种情况,用户可以在申请定制自己需要的虚拟机类型,也就是个性化的过程。

当用户需要的服务改变时需要额外的约束机制来监测是否能够满足服务请求,如果可以,则部署新的服务模式;否则告知用户无法提供此服务。

4. 部署虚拟机

通过将用户提交的相关部署参数打包后提交给云平台,通过整合相关的基础设施资源,并在其上部署系统环境完成虚拟机实例的创建。然后进行初始化设置,最后把资源的访问路径返回给用户。

5. 启动虚拟机

虚拟机部署后用户可以通过返回的服务接口来启动虚拟机,开始接受所需服务;同时服务提供商也要保存该服务实例创建信息到用户的历史记录中,以便以后方便用户的服务请求。

6. 运行维护

该阶段的主要任务是响应客户的服务请求,如对服务的变更,以及重启或重建。一些管理的操作不需要中断服务,而有些则要重启服务,甚至要重新创建云服务实例。

此外,为用户提供服务面对一些突发事件时,如虚拟机资源超负载和云服务响应下降等情况,云服务提供者要采取必要措施来最大限度地降低用户的损失为用户提供可靠的服务。

7. 服务结束

当用户提出终止请求或服务运行到满足终止的条件时平台应终止执行结束操作,如注销服务接口、关闭服务所调动资源、删除服务实例、计算用户服务费用和归档记录日志等。

2、虚拟机的执行步骤和生命周期

1. 虚拟机执行步骤

虚拟机的执行步骤如下:

  1. 以带参数的控制命令行方式启动虚拟机。
  2. 提取信息,如可执行文件全路径、数据堆和堆栈的大小,以及日志文件记录的内容,并处理命令行。
  3. 创建日志文件,虚拟机运行过程中根据自动参数记录指定的信息。
  4. 安装可执行文件中的内容,读入文件头、符号表、字符串表和字节码。
  5. 验证可执行文件头数据并检查文件类型标志码,以及格式是否正确和是否有非零长度的字节码。
  6. 初始化运行环境、虚拟机内存模型,以及各段寄存器,将可执行字节码加载到正文段并将全局数据加载到数据段。
  7. 验证可执行文件中的字节码,检查每条指令是否完整,以及操作码、寄存器和地址是否在合法范围内,并把降序格式数值转换为宿主机的编码格式。
  8. 执行字节码,在指令指针的控制下依次执行字节码,直到结束指令。
  9. 结束运行。

2. 虚拟机生命周期

虚拟机的生命周期划分为如下阶段。

1)建立出错日志

虚拟机的基本操作由main()函数控制。

虚拟机以创建一个出错日志文件开始生命历程,每出现一个错误就会在控制台上显示一条信息;同时还要把它记录到某个出错日志文件中。与被记录到出错日志文件中的出错信息相比,发送到控制台的出错信息所提供的信息量相对要少一些。

比较详细的出错情况都将记录在出错日志文件中,在控制台上看到的出错信息则比较简洁。运行时系统出现的问题都将以易于理解的XML格式记录,对显示到控制台上的信息则不做排版处理。

2)处理命令行

创建出错日志文件之后虚拟机将处理其命令行中的参数。

虚拟机通过命令行命令来启动和运行,在命令行中给出的字节码可执行文件的文件名后缀必须是“.RUN”,并且必须全部大写。在字节码可执行文件的前面可以给出一个或者多个虚拟机命令行选项,选项的作用是改变虚拟机的行为。

命令行选项的第1个字符必须是一个短划线字符(“-”)。为了区分字节码可执行文件和虚拟机的命令行选项,字节码文件名的第1 个字符将不允许是短划线字符,短划线字符、选项字母及选项字母后的任何内容之间不允许有空格。在字节码可执行文件的后面可以给出一些命令行参数,这些参数将被传递给可执行文件本身。

3)构造环境

根据命令行中给出的参数建立一个可执行环境并初始化,初始化虚拟机的寄存器。构造一个人工地址空间,把字节码可执行文件读入其中。

  • 字节码可执行文件

字节码可执行文件分为4个独立的部分,即一个文件头、一个符号表、一个字符串表和一个字节码部分。虚拟机先打开字节码可执行文件,读入其文件头和调试信息,并检查文件类型标志码和字节码长度。

字节码可执行文件的标志码必须是“0xDEED”;否则表明该文件不是一个字节码可执行文件,虚拟机将退出此次执行。如果字节码区段的长度为 0,虚拟机会认为没有指令可供执行,也将退出此次执行。

  • 地址空间

如果文件头通过检测,虚拟机就会根据头文件信息加上命令行给出的选项来建立虚拟机的地址空间,该空间由一个正文段、一个数据堆栈和一个堆栈段,以及3个内存段组成。正文段的长度是这个可执行文件的字节码区段的长度,堆栈和数据堆的长度通过命令行设定或者取其默认值。

可执行文件的字节码区段的长度与数据堆和堆栈所要求的长度加起来得到一个数字,这个数字大于宿主主机中的可用物理内存量,虚拟机将退出执行。反

之,虚拟机将向宿主操作系统申请分配一个无符号字节数组,其长度就是刚才计算出来的和。并会把第 1个字节的地址赋值给一指针变量,分配到地址空间后用来划分各个内存段的寄存器将被初始化为相应的值。$IP 和$FP(Stack Pointer)寄存器将设置为 0;$SP(Frame pointer)寄存器将设置为与$TOP 寄存器中保存的同样的值,最后把字节码可执行文件的字节码区段加载到虚拟机地址空间中的正文段中。

4)字节码验证

虚拟机将检查每一条字节码指令中的各个元素是否合法有效,验证器会检查指令有一个合法的操作码且对应于一条真实的指令。寄存器操作数引用的是一个实际存在的寄存器,地址在合法范围内。然后检查指令是否完整,指令的操作数是否合乎规定。

虚拟机运行时系统将把字节码可执行文件中以降序格式存储的数值加载到内存之后转换为宿主机器格式,如果检查到错误,在控制台上将显示一条简短的消息,并把详细情况记录到出错日志中。验证过程从地址0开始,直到数据堆段的起始点为止。

验证器检查一条指令之后将预测内存中的下一个字节或者是另外一条指令的操作码或者是正文段的结束点。这种验证方法不允许把数据存放在正文段中,即验证器正文段的要求是只能由字节码指令构成。指令可能不同,但是其编码格式相同。

5)执行引擎

指令是被虚拟机汇编器转换为字节码的语句,一条指令由一个操作码和零个或多个操作数组成。执行引擎是虚拟机的核心,指令集定义其行为。指令集以堆栈,而不是以传统的寄存器为中心。

虚拟机把当前字节与虚拟机指令集中所有的指令操作码进行比较,如果找到一个匹配,则执行该操作码所代表的指令;反之,虚拟机会认为遇到一个致命错误并将报告这个错误后退出执行。

虚拟机从位于人工地址空间最底部的那条指令开始执行,连续执行字节码指令直到处理结束指令或者遇到一个严重错误后停止,结束指令将使程序控制从执行函数返回到主函数。

3、多虚拟机原理与配置

多虚拟机即有若干台虚拟机,每台虚拟机可有自己的操作系统和用户程序。多虚拟机和多道编程系统有区别,前者可以同时运行若干个不同的操作系统;后者却一次只运行一个操作系统,因此有多道编程功能的目标计算机仍属于单台虚拟机。

在多虚拟机系统中一台虚拟机的工作不依赖于与其并发性运行的其他虚拟机,每一台虚拟机可以使用不同类型的操作系统或同一操作系统的不同版本。操作系统类型可以是批量处理或会话式的,也可以是实地址或虚地址的,在虚地址操作系统中可以只有单个虚拟存储器或者多个虚拟存储器。

在多道编程系统中程序道数可以是固定或可变的,在会话式系统中可以是单用户会话方式或多用户访问方式。多用户访问方式属于实时型操作系统,各用户可同时共享一个实时处理程序;单用户会话方式属于分时型操作系统,用户在其终端可以建立和管理文件,以及编译、调试和执行用户程序。

1. 多虚拟机原理简述

一台真实计算机之所以有多虚拟机功能在于软件中有一个与众不同的操作系统,它只用于支配为实现多虚拟机的真实计算机全部资源,而没有其他功能。该多虚拟机操作系统称之为“控制程序”,是多虚拟机内核,各虚拟机靠它建立和控制。

每台虚拟机有一个操作系统,只是在每台虚拟机范围内管理其工作流程。一台虚拟机工作与其他虚拟机不相干,并且在功能上等效于一个真实计算机系统,一台虚拟机中执行一个用户程序所获得的结果与此程序在一台真实计算机上执行得出的结果相同。

一般情况下,中央处理机硬件能够直接执行一台虚拟机的大多数指令,而不必依靠控制程序。当中央处理机在目标状态下工作时,一旦执行任何特权指令(包括输入输出操作指令)就会引起程序中断。此时与传统的中断处理方式不同,虚拟机把对中央处理机控制权不是交给其操作系统,而是交给控制程序。控制程序的任务是调配各虚拟机输入输出操作、捕捉和处理全部中断,以及执行特权指令。

控制程序保留被中断虚拟机的旧程序状态字,取出和修改新程序状态字,使机器进入管理状态。直至执行特权指令完毕恢复中断,机器重新在目标状态下继续工作。因此多虚拟机情况下只有控制程序在管理状态下工作,而各虚拟机均在目标状态下工作。

2. 多虚拟机配置

下图所示为多虚拟机配置:

此图描述了真实计算机、多虚拟机、各虚拟机操作系统与用户程序之间关系。

第1台虚拟机有虚拟存储,工作于虚地址操作系统;第2台虚拟机无虚拟存储,工作于实地址操作系统;其余两合虚拟机工作于会话式分时操作系统。

控制程序如上述是多虚拟机内核,其职责是控制和调配整个系统的资源,其中有中央处理机管理、存储器管理和设备管理的功能。因为信息(文件)管理不属于资源管理的范畴,所以控制程序无信息管理职能,信息管理由各虚拟机操作系统完成。

多虚拟机下的中央处理机管理程序负责调配处理机资源,为每台虚拟中央处理机周期性分配一个处理机时间片。任一时刻只是占用处理机时间片的一台虚拟机才处于执行状态,而其余各台虚拟机均处于等待状态,即在就绪排队中等候占用处理机时间片。

一旦处于执行状态的虚拟机所占用时间片用完或在中途出现某种事件而发生中断,则此虚拟机退出执行状态,而处于就绪排队中的一台虚拟机被启动进入执行状态。控制程序依照各虚拟机用户类型调配时间片,对于会话用户,宜优先分配处理机时间片,以保证响应速度快。

对于批处理用户(一般计算工作量大,需占用处理机时间量多),宜降低分配时间片优先级。可以把会话用户作为前台作业,而批处理用户作为后台作业,以提高处理机利用率。为了使得外围设备得到充分利用,对于输入输出频度大(如数据处理)的用户,也宜适度提高分配时间片优先级。

实现上述诸原则不能简单采用轮转法分配时间片来解决,而须采用多道编程和分时技术相结合对时间片分配加以优化,如图所示。

为此,引入微时间片和宏时间片的概念。宏时间片为微时间片的若干倍,对于会话用户分配微时间片;对于批处理用户分配宏时间片。

不论是拥有微时间片用户,还是拥有宏时间片用户,一次只分配一个微时间片;对于若干拥有微时间片的用户,采用多道编程技术,以保证各用户响应时间短。这是指一较小时间范围内,对就绪排队的若干用户做并行处理。然而就每一微时间片而言,仍然只为一个用户占用,就绪排队中各用户轮流获得微时间片(上图中的①~②和⑥~⑧);对于拥有宏时间片的用户采用分时技术,这类用户的优先级低,经过较大时间间隔才能获得一微时间片(上图中的①~③和⑥~⑧)。系统资源有限量,进入运行状态的宏时间片用户数量以不出现系统反复为限。

微时间片用户在前台,宏时间片用户在后台。一旦前台用户量减少,后台用户获得微时间片的周期自动缩短。其处理速度也自动加速,从而使处理机资源得到充分利用。 

多虚拟机下的每台虚拟机有自己的存储器,其容量可大于或小于主存储器。功能上每台虚拟机有一个可供使用的大容量主存储器,然而一般这是指虚拟存储器而言,即受控制程序的存储器管理程序所支配。逻辑上虚拟机存储器划分成段和页,对于每台虚拟机,控制程序建立和修改一组段页表。在虚拟机执行期间利用此组段页表和中央处理机动态地址转换的硬件功能,把虚地址真实地转换成实地址。

多虚拟机控制程序频繁使用部分应留驻在主存储器中,为了改善主存储器的使用情况,只是把经常调用的虚页面驻留在主存储器中。一个虚页可以置于主存储器内任一主存页面地址,在程序执行期间由控制程序再定位。在多虚拟机运行期间所有工作的虚拟机和控制程序中可换页的子程序均在争夺空闲的主存页面,若空闲主存页面量下降,则控制程序为虚页面所能提供的主存页面数将会减少,为此需适量调出占用主存的页面。

暂时不用和已经用过的虚页面应置于后援存储器(一般采用磁盘)中。如果虚拟机执行期间某一时刻要修改这些虚页面,则控制程序应选择存取速度高且有空闲空间的换页设备做后援存储器,以存放修改过的页面;如果虚页面未修改,则仍置于原后援存储器位置,等到虚拟机以后要调用此虚页面时再由此调入主存。

虚拟机执行之前虚页面不必均由后援存储器调入主存,控制程序也不必预计何页面为虚拟机所求。为一台虚拟机执行换页操作的同时另一台虚拟机可能处于执行状态,换页操作由控制程序启动和实行,虚拟机不必干预。

多虚拟机下的虚拟机若有虚地址操作系统,则该系统能为其虚拟机建立和控制虚存储;同时此虚存储又受控制程序控制。即受到双重控制,如图所示。

多虚拟机下一台有虚址操作系统的虚拟机虚存储结构:

图内中第1级存储器为真实计算机主存储器;第2级存储器为控制程序所支配的虚拟机存储器,每台虚拟机有其相应第2级存储器;第3级存储器则是由虚地址操作系统支配的虚拟存储器,一台虚拟机执行期间由其第3级存储器所编址的指令和数据必须能为中央处理机所使用。

显然在多虚拟机下真实计算机无法直接使用受虚地址操作系统支配的段页表,因为主存储器页面分配并不受虚拟机支配,而受控制程序所支配。因此此段页表只能把虚地址(即第3级存储器空间编址)转换成第2级存储器空间编址,把第2级存储器空间编址最终转换成实地址(即第1级存储器编址,主存地址)须依靠控制程序换成和修改一组页表来完成。此过程由控制程序动态执行,所以此组页表称之为“页映像表”。

在输入输出方面,各虚拟机所使用虚拟外围设备必须有一个等效实际设备与之对应。一卷虚拟磁带对应于一卷实际磁带,而几个虚拟磁盘可一起配置在一个实际磁盘中,虚拟磁盘容量和数目的更动受控制程序支配。

依照使用方式不同,虚拟设备可分为如下种类型。

  1. 专用方式:指虚拟设备专门供某一台虚拟机使用,磁带机属此类。
  2. 公用(共享)方式:指一台虚拟设备供若干台虚拟机合用,磁盘可用于此类。
  3. 假脱机方式:用于各虚拟机输入输出,由于虚拟输入输出设备(如打印机和卡片机)工作是间歇性的,因此宜于多台虚拟机合用一台实际输入输出设备。为此,控制程序须设置缓冲存储器(在磁盘中)作为中间存储用。

在多虚拟机下,一台虚拟机作为输入输出系由其操作系统发出输入输出指令,格式如下图所示。此时通道设备地址是虚拟的,须由控制程序将其转换成实际通道设备地址。

换言之,在逻辑上输入输出操作不受控制程序支配,而受虚拟机所支配。但事实上,只有控制程序才能为输入输出操作调配实际通道和外围设备。在通道控制器启动通道程序(取出通道地址字内的通道命令字地址)时,通道命令字中的数据地址也是虚拟的,把虚拟的数据编址转换成数据实地址须由控制程序完成。

事实上,在实现输入输出操作整个过程中控制权为控制程序所掌握。控制程序把虚拟机操作系统所定义的通道程序复制到属于控制程序工作区内,把与数据传送有关虚页面调入主存以实现数据传送。直至输入输出操作结束,控制程序才释放主存页面。 

多虚拟机与各虚拟机间的接口是一个软件,这是控制程序用于建立和控制各虚拟机的文件,称之为“多虚拟机目录表”,它可置于磁盘中。在数据结构上此处以内核扩充法为依据,把控制程序作为内核通过此目录表分别与各虚虚拟机相联。所以各虚拟机之间相互独立和平行,不存在层次级关系。

多虚拟机目录表由若干目录项组成,每个目录项表征一台虚拟机控制信息。其中一些信息在多虚拟机生成期间置入,一些信息由用户使用前提供。一台虚拟机建立时控制程序须为其设置一目录项,依据此目录项建立一个控制块,控制程序依靠此控制块控制虚拟机;一台虚拟机撤出时相应目录项和控制块也随之撤销。多虚拟机目录表项内容包含用户标识符、口令字、此虚拟机存储器容量(用户要求的)、可供使用的外围设备、分配给用户控制权级别和一些选择性信息。

关于目录项中的用户控制权级别指多虚拟机下用于人机对话的控制程序命令的使用,在多虚拟机工作期间的任一时刻均可使用控制程序命令,而不必查询哪一台虚拟机处于执行状态。用户置入控制程序命令即发出一个调用中断信号,将正在获得中央处理机时间片的虚拟机挂起。

对一台虚拟机执行调用中断,相当于在中央处理机上按下停机键。多虚拟机系统内每台虚拟机均设置有控制权级别,其功能是定义一个可供用户公用的控制程序命令子集,控制权级别分类如图所示。

系统主操作员拥有一级控制权,能在系统控制台上控制整个多虚拟机系统正常运行;二级控制权用于控制假脱机设备和文件;三级控制权是一级的补充,协助主操作员调配系统资源;四级控制权用于检查和分析系统工作状态;五级控制权为编程提供方便,系统编程员使用动态调试辅助程序在其终端上可与操作员并行工作;六级控制权提高了多虚拟机可靠性、可用性和可维修性,硬件维修员可以利用一台虚拟机执行联机测试诊断并且检查多虚拟机上任一设备和输入输出错误,而其他虚拟机仍可照常工作;七级控制权为一般用户所设,用户可以利用所规定的命令控制其虚拟机的工作流程。

多虚拟机构成条件由各虚拟机构成多虚拟机系统受到若干条件限制,首先各虚拟机操作系统所使用指令应当与支持此多虚拟机工作的真实计算机指令系统相兼容。

一台虚拟机若不具备这种指令的兼容性,就不能为多虚拟机系统所容纳;其次各虚拟机指令须统一划分为非特权指令和特权指令。特权指令只许在管理状态下执行,目标状态下执行特权指令必定会引起中断,只有这样才能为控制程序工作创造条件。然而用户所关注的是用户程序在一计算机操作系统中所获得的输出结果应当与多虚拟机中处理得出的结果相一致,这是指程序的兼容性。

实现指令的兼容性不一定满足程序兼容性,在不计及程序转换情况下在指令兼容性基础上实现程序兼容性须满足下列条件。

(1)不考虑指令时间、传输速率、通道程序时间与计时功能之间的关系,对于批处理操作系统和分时操作系统下用户程序易于满足这一点;对于实时型操作系统的程序,则必须加以考虑。

(2)程序只使用多虚拟机系统所具有的系统功能,不使用真实计算机所没有的特性。 

(3)程序只占用可供使用的主存储器区域。

(4)不出现带有不可预测结果的程序中断。

(5)各外围设备内数据载体所使用数据记录格式和字符代码应与多虚拟机配置完全兼容。

另外,在硬件上真实计算机应具备相应计时器功能,以确保各虚拟机周期性地获得时间片。对于各虚拟机而言,虚拟存储器是必不可少的。中央处理机应具有相应动态地址翻译机构(硬件),以支持虚拟存储器工作。

3. 影响多虚拟机性能的因素

评定一个计算机系统质量以性能指标作为衡量标准,表述性能的综合性指标是吞吐率、响应时间和可用性。

多虚拟机的性能以能否迅速有效地处理用户程序加以判定,受下列若干因素的影响。

  1. 并发性运行的虚拟机总台数。
  2. 各虚拟机使用的操作系统类型。
  3. 每台虚拟机能处理的用户程序类型。
  4. 真实计算机的功能和处理速度。
  5. 可供使用主存储器容量。
  6. 可供使用通道数目、操作方式和传输率。
  7. 磁盘容量、台数和存取速度。
  8. 控制程序提供额外功能。

计算机的处理速度越高,可供使用的主存容量越大且通道数目越多。后援存储器容量越大,则多虚拟机性能越好。每台虚拟机所使用的操作系统对资源需求量越少,则越有利于改善多虚拟机性能。

4、虚拟机部署体系结构和功能分析

1. 虚拟机部署体系结构

为了更好地满足用户的服务需求,将虚拟机部署分为4个层次。即用户接口层、核心管理层、虚拟化资源层和物理资源层,如图所示。

采用这种分层策略的优势在于每一层都不需知道其下一层是如何实现,只需了解该层通过服务接口获取下一层的相关服务即可。这样每一层都相对独立,易于实现功能扩展和服务变更。

(1)用户接口层

该层通过Web或者客户端界面方式为用户提供服务访问的接口,主要实现的功能为用户注册、用户登录时的身份验证、发布提供服务的虚拟机信息,以及接受用户提出的虚拟机资源请求,如主频、CPU核心数、内存、磁盘大小、网络带宽等相关参数、虚拟机系统环境、付费协议和用户使用帮助等。该层包含的主要功能模块为用户认证、虚拟机信息发布、资源申请和用户帮助模块。

(2)核心管理层

该层是整台虚拟机部署体系中的核心环节,负责接收用户接口层的相关部署参数并对这些参数进行分析。由资源调度模块选择满足用户需求的虚拟化资源,并将该需求转交至虚拟化资源层;同时,在虚拟机镜像模板库中选择用户需求的虚拟机镜像模板加载至宿主机中并执行实例化操作,至此用户申请的虚拟机实例创建完毕。

在虚拟机正常启动运行后还需要对虚拟机进行动态监控,当虚拟机运行过程中出现异常,如资源超负载和云服务响应下降等情况,则通过资源动态调整和负载均衡技术来及时处理,以免造成用户的更大损失。该层包含的主要功能模块为虚拟调度模块、虚拟机镜像模板库、模板调度模块、虚拟机实例化模块、虚拟机状态监控模块、资源动态调整模块和负载均衡实现模块。

(3)虚拟化资源层

该层在离散的基础设施之上通过虚拟化技术为核心管理层提供一个统一且共享的物理资源池,它向上提供一个基于多种物理资源的一个单个物理资源的虚拟化资源;向下将一个物理资源拆分,并提供多个性能的物理资源的虚拟化资源。

该层主要的功能有支持虚拟化资源和物理资源之间一对一、一对多或多对一的映射,以及在不同物理节点的虚拟化资源之间切换和虚拟化资源规模的变更等。

(4)物理资源层

该层提供虚拟平台所需的计算资源、存储资源、网络资源及其他资源等基础设施,如计算资源用于满足用户的计算需求、存储资源用于保存虚拟机镜像模板库,以及用户个性化服务信息和快照等。 

2. 核心模块功能

(1)用户认证模块

用户认证是实现商业模式不可或缺的一环,该模块提供用户交互接口、识别用户身份、创建用户程序的运行环境、对用户的使用进行计费,以及存储和管理用户的使用信息等。

(2)虚拟机信息发布模块

该模块将虚拟平台所能提供的虚拟机类型提供给用户供其选择,这样使用户能够更直观地申请虚拟机服务。

例如,一个云计算平台可选择的虚拟机信息如下表所示。

(3)资源申请模块

用户提交自己的服务需求,可以在平台提供虚拟机信息列表中选择。也可以向平台申请个性化的虚拟机类型服务,这个环节主要是通过提交交虚拟机配置参数来实现。

(4)资源调度模块

该模块接受用户接口层传来的用户服务申请需求参数,然后在虚拟机资源层中选择满足用户需求的硬件资源作为宿主机,在这个过程中要结合目前平台中计算资源、存储资源等的使用情况和用户的服务需求来做出最优选择。

(5)镜像模板管理模块

实现与模板有关的管理功能,如定义模板的数据结构、模板的物理和逻辑存储结构、模板与模板的关系,以及用户和模板的所属关系等。

模板管理提供的服务包括查询、添加、更新和删除等。管理人员享有所有服务的权限,用户可以享有通用模板的查询服务和对自己创建模板的更新和修改服务。该部分是模板调度模块的基础,通过对虚拟机镜像模板管理的改进可以为调度策略的优化打下基础。

(6)模板调度模块

根据用户接口层提供的用户需求模板类型找到合适的模板,然后采用一定的调度策略将位于云计算存储资源池中的虚拟机镜像模板文件传输至用户的宿主机中。由于模板文件往往比较大,在这个传输过程中需要消耗比较长的时间,因此目前有不少研究人员釆取不同方法旨在通过对这个环节的优化来改进云计算下虚拟机部署的效率。

(7)虚拟机实例化模块

通过实例化模块将虚拟机镜像模板文件实例化即可完成虚拟机的创建。例如,实例化工具VMware的VMrun通过实例化命令来使用,如vmrun-T ws start"c∶\my VMs\myVM.vmx"。

(8)虚拟机状态监控模块

旨在为用户提供可靠的服务,为达到这一要求,必须保证虚拟机的正常运行。在大规模的云计算平台可能有上万台虚拟机在运行。当其中一台出现故障时必须及时采取措施,以避免虚拟机故障带来的损失。

该模块用于监控宿主机和虚拟机运行实时状态,监控的指标主要有处理器利用率、存储利用率、内存连接和配置状态等。这样可以方便管理员随时了解云平台运行现状,进而保证用户服务的稳定和高效。

(9)负载均衡实现模块

该模块的作用是当有新的用户服务请求时选择一个最优的资源节点满足该请求,该模块设计不好会使计算资源负载不平衡,从而影响系统的性能。

(10)资源动态调整模块

该模块可以借助运行在物理硬件和操作系统之间的虚拟机监控器来实现虚拟机和物理资源的重映射,即把虚拟机的整个运行环境从一台物理机迁移到另外一台物理机。虚拟机动态迁移能够实现负载均衡、在线维护和出错管理。

(11)虚拟化资源管理模块

该模块利用虚拟化技术将离散的硬件资源统一为可以动态共享的资源平台,这样可以将多台服务器虚拟为一个统一的资源池。用户可以相互独立地使用各自申请并且易于分配和回收的虚拟机,采用这种方式可以大大降低运行成本并提高计算资源的利用效率。 

5、虚拟机部署的工作流程

下图所示为虚拟机部署的工作流程:

一个典型的虚拟机部署过程如下:

  1. 用户以客户端或Web方式访问云计算平台。
  2. 判断是否第1次申请服务或者是否了解申请流程,如果了解,则查看用户帮助模块相关信息后转步骤3;否则直接转步骤3。
  3. 进入用户认证环节,该过程包括新用户注册和旧有用户登录验证等环节,其意义在于保证用户服务的安全性、保存和记录用户的服务信息。以便以后针对不同用户提供个性化的服务,进而提高服务的质量。
  4. 用户登录服务平台后可以通过云服务商的虚拟机信息发布模块来查看相关服务类型,包括虚拟机的软硬件配置,如CPU核心数、内存、网络带宽和磁盘大小等,以及相关参数和虚拟机镜像模板等,通过该环节用户可以非常便捷地选择适合需要的虚拟机类型。
  5. 用户选择所需服务之后通过资源申请模块输入自己服务请求的相关参数,如CPU核心数、内存、磁盘大小、网络带宽、操作系统类型和应用软件等。
  6. 资源申请模块将用户所需的硬件资源相关参数打包并发送至核心管理层的资源调度模块。
  7. 由资源调度模块在虚拟化资源池中选择能够满足用户服务的计算、存储和网路等硬件资源作为宿主机。
  8. 资源申请模块将用户申请虚拟机模板类型,包括虚拟机的操作系统和各种应用程序发送至虚拟机镜像模板管理模块。
  9. 虚拟机镜像模板管理模块选择出适合用户虚拟机模板。
  10. 由虚拟机调度模块来实现将用户所需的虚拟机镜像模板从云存储资源池中加载至宿主机中。
  11. 通过虚拟机实例化模块将虚拟机镜像模板文件在宿主机上实例化创建虚拟机。
  12. 启动虚拟机。
  13. 在虚拟机运行过程中需对虚拟机和宿主机的运行状态进行监控,当出现如虚拟机资源超负载和云服务响应下降等情况,则通过资源动态调整和负载均衡技术来及时处理突发事件,以免造成用户的损失。

6、虚拟机部署策略

1. 传统的虚拟机部署策略

传统的调度平台主要由调度中心、宿主机和虚拟机镜像模板库3个部分组成,如图所示。

1)调度中心

接收部署请求,根据该请求在机群中选择满足特定条件的目标宿主机。

2)宿主机

承载虚拟机的实例化及运行功能,主要包含宿主机管理、模板传输和实例化等模块,其中虚拟机管理模块用于提供虚拟机的运行及管理服务;模板传输模块用于从虚拟机镜像模板库中获取模板文件至宿主机;实例化模块用于对虚拟机镜像模板进行实例化。

3)虚拟机镜像模板库

用来存储与管理云计算平台预定制的各类型虚拟机模板。

其部署流程如下:

  1. 调度中心接收部署请求。
  2. 调度中心根据部署请求及约束条件在集群中选择能够满足需求的一台宿主机作为目标主机,并将该请求转给该宿主机的虚拟机管理模块。
  3. 宿主机中的模板传输模块从虚拟机镜像模板库中获取虚拟机镜像模板文件。
  4. 通过宿主机中的实例化模块将虚拟机镜像模板文件加载并实例化。 

2. 传统虚拟机部署策略的局限性

传统部署方法存在3个方面的局限性,一是通常一台安装操作系统和各种应用业务软件的虚拟机模板映像的容量在几个,甚至几十个GB以上。传输这种大尺寸的映像文件往往需要很长的时间,降低了整体的部署效率。二是在部署含有大量虚拟机的集群时会导致较高的网络传输开销。三是大多数虚拟机模板库依赖于集中式存储,它往往成为数据吞吐的瓶颈,而且其单点故障也会对平台的整体运行带来关键影响。

3. 优化的虚拟机模板部署策略

优化的虚拟机模板调度模型由5个部分组成,如图所示。


 

1)调度中心

接收用户服务请求,根据该请求在服务器集群中选择满足用户需求的一台服务器作为宿主机并将服务请求转给该宿主机。

2)宿主机

包含虚拟机管理模块、数据块传输模块、数据块合并模块、存储节点负载表和实例化模块,虚拟机管理模块根据调度中心命令配置宿主机硬件环境。数据块传输模块从数据块管理服务器中获取模板与数据块的信息,以并发方式从客户机存储资源处存储各数据块。数据块合并模块将获取的各数据块合并为镜像模板;存储节点负载表主要包含分块存储位置、该存储节点负载量和该节点的传输速度。

3)数据块服务器

包含数据块传输模块、数据块分割模块和数据块信息数据库,数据块传输模块从虚拟机镜像模板库中传输模板文件;数据块分割模块将模板文件分割为大小相等的数据块(除了最后一个数据块);数据块信息数据库用于存储模板和数据块的相关信息,主要包括模板分块表和数据块存储表。

4)虚拟机镜像模板库

用来存储云平台所提供的虚拟机镜像模板和用户虚拟机的镜像模板。

5)集群存储资源池

将各宿主机的部分可用存储介质组成共享的通用存储池,用于分布式存储虚拟机模板数据块作为模板传输源。

这种方法的两个优势一是潜在的高扩展性,随着用户数目的增加自动增加虚拟机镜像模板的存储空间;二是释放大量的集中存储空间,促进I/O性能提高并提供数据吞吐量。

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/128708343