随着虚拟化技术的发展, 越来越多的名词和术语出现在虚拟化技术中, 这些名词一般跟虚拟化技术的某些特性相关, 了解它们对掌握具体的虚拟化技术以及选择合适的虚拟化产品会大有帮助。
(1) Virtual Machine 虚拟机
一般是指通过虚拟化技术模拟的硬件。它为操作系统的运行提供了模拟的硬件环境。
(2) 客户操作系统(Guest OS)
运行在虚拟机之上的操作系统称之为客户操作系统。“客”字可以理解为“做客”, 在虚拟机中启动的计算机可以看成是在基础操作系统中“做客”。
(3) Hypervisor 虚拟机管理程序
在虚拟化技术中, Hypervisor 就是提供管理与监控虚拟机的软件, 它处于基础物理层与客户操作系统(Guest OS) 之间, 可允许虚拟机或应用程序共享硬件。有些人把它称为VMM (Virtual Machine Monitor), 但笔者觉得称为Hyperviosr 更加贴切, 因为它不仅仅可以监控, 同时还具有管理虚拟机以及协调虚拟机与硬件设备的能力。虚拟化技术中各组成部分的关系如图2-1 所示。
图2-1 虚拟化技术中各组成部分关系图
(4) 完全虚拟化(Full virtualization)
在完全虚拟化中, Hypervisor 通过模拟一个相应的硬件设备使客户机操作系统在虚拟机模拟的硬件环境中运行。这种方案正是1960 年IBM 大型机所使用的虚拟化技术。故也有人称它为原始虚拟化。在这种技术中, 虚拟机扮演客户操作系统(Guest OS) 和原始硬件之间协调者的角色。故硬件设备上的特定受保护指令必须被捕获下来并在Hypervisor 中进行处理, 防止虚拟机同时访问某些资源时造成操作冲突。
(5) 部分虚拟化(Partial virtualization)
Hypervisor 只模拟部分底层硬件, 因此客户机操作系统不进行修改是无法在虚拟机中运行的。在计算机的历史中, 部分虚拟化是通往全虚拟化道路上的重要里程碑, 它最早出现在第一代的分时系统CTSS 和IBM M44/44X 实验性的分时系统中。虽然有时候这并不被视为一般意义上的虚拟机, 但这在历史上是非常重要的一页。
(6) 半虚拟化(Para – virtualization)
半虚拟化(也有资料将para – virtualization 翻译为平行虚拟化) Hypervisor 提供特殊的编程接口供客户机操作系统使用, 故客户机操作系统必须经过改造才能够在半虚拟化环境中运行。由于半虚拟化技术使客户操作系统直接与硬件交互, 故性能上会比全虚拟化要好。然而由于使用了Hypervisor 提供的特殊编程接口, 所以客户操作系统必须定制, 从而失去了向不同硬件平台移植的方便性。同时, 因为客户机使用特殊编程接口可直接与硬件交互, 当某一个客户机对硬件操作不当时, 就将会影响该硬件上所有客户操作系统的运行。
(7) 操作系统层虚拟化(OS – level virtualization)
在操作系统层虚拟化中, 独立主机被虚拟化在操作系统层中, 可使得多个独立虚拟化的服务器运行在一台计算机上。客户操作系统环境与宿主服务器分享同一个操作系统, 例如,相同的系统内核被用来创建客户机环境。程序运行在被视为独立系统的客户机环境中。简单讲就是将操作系统划贰豹独立分区供不同用户使用, 用户在使用的时候感觉像在使用一台独立的计算机。操作系统层虚拟化不需要安装客户操作系统, 但只能虚拟与本操作系统相同的虚拟机。比如Sun 的Solaris 操作系统, 使用这种技术可在Solaris 操作系统中虚拟化多个彼此独立的操作系统空间供用户使用。
(8) 动态迁移(Live Migration)
动态迁移就是在一个虚拟机运行的状态下, 将它从一台计算机迁移到另外一台计算机。试想这样一种情况: 某组织有两台服务器A 与B, 各有16 个CPU, 在服务器A 上运行着8个虚拟机, 每个虚拟机使用1 个CPU。而服务器B 上也同样运行着8 个虚拟机, 且每个虚拟机也只用1 个CPU。而且这样的状况持续了相当长的时间, 两台服务器的利用率都只有50%。如果服务器A、B 上的Hypervisor 支持动态迁移, 我们就可以把服务器B 上的所有虚拟机移动到服务器A 上, 并关闭服务器B。既提高了服务器A 的使用效率, 又节省了一个服务器的资源, 可谓是一种“绿色环保技术”(英语里称Green IT)。同时, 动态迁移还可发挥自动恢复的作用, 当硬件出稀笔题时, 自动迁移到之前配置的其他硬件上。
(9) 硬件辅助虚拟化
硬件辅助虚拟化需要硬件提供支持, 帮助创建虚拟机, 监视并允许客户机操作系统独立运行。硬件辅助虚拟化是在1972 年, 为了使用第一个虚拟机操作系统VM/370, 第一次由IBM System/370 引入。在2005 年与2006 年, Intel 和AMD 分别为虚拟化提供了额外的硬件支持。Intel 称之为VT, AMD 称之为AMD – V。硬件辅助虚拟化是指借助硬件(主要是主机处理器) 的支持来实现高效的全虚拟化。Guest OS 和Hypervisor 的执行环境自动地完全隔离开来, Guest OS 有自己的“全套寄存器”, 可以直接运行在最高级别。Intel – VT 和AMD – V是目前x86 体系结构上可用的两种硬件辅助虚拟化技术。
对于硬件辅助虚拟化, 首先需要弄清楚在传统平台下哪些因素限制了虚拟化性能的发挥。虚拟化技术使得人们可以在一台物理服务器上运行多个不同的虚拟机。这就要求一台物理服务器可以创建和管理多个虚拟系统。而虚拟化技术的核心在于Hypervisor, 它是成功完成多个虚拟化相关任务的关键。Hypervisor 同时管理多个不同的操作系统实例, 并且掌管这些实例间的进程切换, 从而保证每个虚拟机都可以访问到底层的处理器、内存和本地磁盘等硬件资源。它通过竞争机制在不同的实例之间分配计算资源, 同时还要保证不同虚拟机之间的相对独立性。
而在Intel 和AMD 推出相应的硬件辅助虚拟化技术之前, 虚拟化平台的性能问题主要集中于处理器中缺少对应的内部指令集, 因而无法保证处理器的虚拟化任务可以高效完成。这些虚拟化任务的分配是在软件层面实现的, 因此会在虚拟机体验、资源控制和效率等方面表现得非常差。简单地讲就是: 如果某个虚拟机做坏事, 则整个服务器都受到影响。而AMD和Intel 都在致力于新的处理器升级开发以满足新增加的虚拟化方面的需求。这些升级减少(甚至是消除) 了客户操作系统之间的资源争夺和限制, 从而极大改善了虚拟机实例的安全性和性能。
还有一种需求是从硬件厂商的角度出发, 由于Hypervisor 提供给虚拟机很多访问基础硬件设备的方法, 而如果一个虚拟机由于操作不慎访问了不该访问的底层硬件控制接口, 就会对其他计算机造成影响, 所以硬件厂商需要提供特殊的接口以确保虚拟机之间在硬件层面互不干扰。
Intel – VT 技术被Intel 认为是一项针对高端个人计算机及服务器的新技术。只有高端的Intel CPU 才加入这种技术。而AMD 的AMD – V 技术浴被广泛应用于AMD 新推出的CPU中, 比如Phenom II 羿龙。
不管是Intel 还是AMD 它们的硬件辅助虚拟化技术, 对于开发人员而言最后就是一组CPU 指令集。但不同厂商间的CPU 指令集不能兼容。比如Intel – VT 的Flex Migration (动态迁移) 功能允许在虚拟化平台中快速、方便地在多个支持Intel – VT 指令集的物理服务器之间迁移虚拟机。但这项扩展的迁移功能无法适用于AMD 处理器平台。在不同处理器厂商平台之间的迁移, 可能会导致严重的性能问题, 甚至发生系统故障。所以在搭建云基础设施时既要考虑到成本问题又要考虑到基础设施兼容性问题。
在实际的工作中, 全虚拟化与半虚拟化技术应用比较广泛, 我们将挑选几类较为常见而恰比较容易获得的虚拟化产品着重介绍。