知晓全虚拟

图片 13
亚洲城ca88手机版官网

  众多的Linux用户在经历了对Linux由好奇到熟悉的过程之后,是否希望按照自己机器的实际配置对Linux进行定制,从而获得最佳的系统性能呢?也许有用户会认为在自己使用Linux的过程中没有碰到到任何问题,Linux确实象人们所宣传的那样“永远不会崩溃”,因此完全没有必要冒着风险对系统内核进行的改动。其实,对Linux系统内核进行定制和修改并不向很多人想象中的那么复杂。如果用户能够根据自己的实际情况对Linux系统内核进行合理的修改,可以有效的简化Linux内核,去除不需要的组件,从而提供更快的系统启动速度,释放更多的内存资源。
  下面我们对Linux系统内核做一下简单介绍。

众多的Linux用户在经历了对Linux由好奇到熟悉的过程之后,是否希望按照自己机器的实际配置对Linux进行定制,从而获得最佳的系统性能呢?也许有用户会认为在自己使用Linux的过程中没有碰到到任何问题,Linux确实象人们所宣传的那样“永远不会崩溃”,因此完全没有必要冒着风险对系统内核进行的改动。其实,对Linux系统内核进行定制和修改并不向很多人想象中的那么复杂。如果用户能够根据自己的实际情况对Linux系统内核进行合理的修改,可以有效的简化Linux内核,去除不需要的组件,从而提供更快的系统启动速度,释放更多的内存资源。
下面我们对Linux系统内核做一下简单介绍。

接触过的一些搞了几年云计算的童鞋,也没明白常见的几种虚拟机技术方案的异同,比如只是记住了半虚拟要在虚拟机装驱动而全虚拟不需要,也不知道有时候为什么需要打开BIOS里的VT项。本人呢,在看了各种讲解虚拟化的书籍之后,有些概念虽然不是很清晰,但对各种虚拟化技术解决方案产生的根源及实现手段还是基本能够理解。最近要研究下QEMU的源码,于是乎又看了很久以前就看过的VMware关于虚拟化技术的白皮书。虽然本人长期阅览各种英文资料,读英文和中文几乎没有什么差别,但为加深理解决定翻译一下。今天是周日,真是做到了一天足不出户,终于完成翻译工作,虽然这白皮书是2007年写的,但还是具有很好的参考价值,并且偶发现看过的很多书其实都参考或使用了这白皮书的图片。要看白皮书原版的点击这里。

  所谓系统内核实际上是系统设计人员编写的控制系统的各个组件,在不同程序之间分配系统资源,同时协调系统与硬件和外设之间数据传递的系统核心程序代码。与Windows系统的内核不同,Linux系统的内核是可配置的,用户可以根据自己的实际需要,在对系统内核进行定制。例如,用户可以针对自己机器CPU的具体型号对系统内核进行优化。

所谓系统内核实际上是系统设计人员编写的控制系统的各个组件,在不同程序之间分配系统资源,同时协调系统与硬件和外设之间数据传递的系统核心程序代码。与Windows系统的内核不同,Linux系统的内核是可配置的,用户可以根据自己的实际需要,在对系统内核进行定制。例如,用户可以针对自己机器
CPU的具体型号对系统内核进行优化。

 

  尽管不同厂商在推出其各自的Linux产品之前,都已经针对某些具体的硬件设备或网络协议对系统内核进行了设置,但是用户还是可以针对自己所实际使用的机器对Linux系统内核进行进一步的修改,从而将Linux系统的性能提升到新的高度。
  本文将主要结合目前较为流行同时也是较为成熟的Red
Hat
Linux版本对系统内核的定制进行详细的介绍。使用其它厂商推出的Linux产品的用户也可以参照本文的介绍,对Linux内核进行定制。
图片 1

尽管不同厂商在推出其各自的Linux产品之前,都已经针对某些具体的硬件设备或网络协议对系统内核进行了设置,但是用户还是可以针对自己所实际使用的机器对Linux系统内核进行进一步的修改,从而将Linux系统的性能提升到新的高度。
本文将主要结合目前较为流行同时也是较为成熟的Red Hat
Linux版本对系统内核的定制进行详细的介绍。使用其它厂商推出的Linux产品的用户也可以参照本文的介绍,对Linux内核进行定制。

理解全虚拟、半虚拟以及硬件辅助的虚拟化

准备工作

 

尽管重新编译Linux系统内核的操作大多数可以自动完成而且也并不复杂,但是一旦出现错误,将可能导致Linux系统无法正常启动。因此,为了预先防范可能出现的任何问题,用户一定要在对Linux系统内核进行任何的改动之前,制作一张Linux系统启动盘注:用户在安装Linux系统的过程中可能已经被要求制作了系统启动盘,如果用户没有现成的系统启动盘,可以按照本文随后的介绍重新制作一张),同时还应当将一些重要的数据进行及时的备份。下面,我们就来看一下如何实现Linux系统内核的定制。

序言

用户需要以管理员root帐号登录Linux系统。因为本文的所有命令都是通过命令方式实现,所以用户最好选择以命令方式登录。如果用户机器上的Linux系统默认登录到图形方式的话,可以使用图形环境下的终端命令窗口单击GNOME桌面任务条中以计算机图案显示的按钮)。

 

制作启动盘

1998年,VMware就琢磨着解决一度被认为不太可能完成的的x86平台的虚拟化问题,并且开创了x86平台的虚拟化市场。解决方案就是,在允许多个虚拟机系统完全隔离地运行于一个硬件系统的处理器上,在可承受虚拟化代价的前提下,使用二进制翻译和直接指令执行相结合的方式来完成。

一般在Linux系统的安装过程中,安装程序都会要求用户制作一张Linux系统启动盘,这样当Linux系统出现严重错误而无法正常启动时,用户就可以使用启动盘重新启动Linux系统。如果用户没有任何现成的启动盘,可以按照如下所述方法自己动手制作。

这项技术的扩散进而产生了成千上万的公司,这又进一步推动了从桌面到数据中心的虚拟计算技术的采用。一些新的厂商进入到这个领域并想差异化他们的产品,在他们的宣传口号和术语中迷惑视听。举个例子,硬件辅助虚拟化是一个很有价值的技术,它会不断成熟并增加可被硬件辅助来虚拟化的任务,半虚拟化并不是一个全新且能带来量级性能优化的技术。

假设用户使用的是Red Hat
推出的Linux产品,首先在命令模式或命令终端窗口下输入“more
/etc/lilo.conf”命令,然后回车。该命令将会分屏显示Linux加载程序,即Linux
Loader(简称LILO)的配置文件。用户在文件中找到如下条目“image=/boot/vmlinuz-2.2.12-20”。该项指出的路径正是用户每次启动Linux系统时首先被装载的Linux系统内核的位置。其中“vmlinuz-”项后的数字代表用户目前所使用的Linux系统内核的版本,实际显示值视用户的具体情况可能会有所不同。记下该数字之后,输入“q”返回到命令方式。

这是一个复杂又不断进化的领域,通过对这些技术进行很好地解释,可帮助那些公司明白他们有哪些可选方案并选择自己的方向。这个白皮书旨在澄清用来虚拟化x86硬件的各种不同技术,各自的优势和劣势,以及VMware如何以最佳效率利用和发展这些新兴的虚拟化技术。图1是x86虚拟化技术时间线的一个总览,从VMware的二进制翻译到最近的内核半虚拟化和硬件辅助的虚拟化技术。

随后用户输入 “mkbootdisk –verbose –device /dev/fd0 2.212-20
”命令,其中的Linux系统内核版本号以用户的实际版本数字为准。回车之后,Linux将会要求用户插入一张软盘,然后自动为我们制作一张系统启动盘。设置系统内核

图片 2

现在,我们开始对Linux系统内核进行定制。首先,用户输入命令“cd
/usr/src/linux”,将当前的工作目录转换到/usr/src/linux。

 

Linux系统为用户提供了两种系统内核的设置接口,分别为menuconfig和xconfig。其中,用户可以在任何命令方式下通过输入命令
“make
menuconfig”启动menuconfig,然后使用方向键和Tab键进行选择和修改。对于xconfig,用户只能在X
Windows下通过命令“make
xconfig”启动。xconfig提供了更加友好的用户界面,用户可以通过鼠标点击选择选择各项菜单和按钮。本文将主要介绍xconfig使用方法,用户可以通过使用menuconfig实现同样的功能。

x86虚拟化概观

用户输入命令“make
xconfig”按回车,在一连串文字飞快显示之后,将会弹出xconfig的主窗口。该窗口包含许多按钮选项,点击其中任意一项会弹出对Linux系统内核进行具体设置的设置窗口。例如,用户点击xconfig窗口中的第二项“Processor
type and
features“之后,就可以在相应的弹出窗口中对用户自己机器处理器进行设置。

 

在每一个设置窗口中,用户可以通过选择
“Y”或“N”选项启动或关闭任意功能。此外,用户还可以选择“M”选项,把某些功能作为模块进行编辑。所谓模块并不是系统内核的组成部件,但是在需要时系统内核会连接指定的模块从而共同提供特定的功能。在默认情况下,设置窗口中的许多功能都是作为不同的模块被编辑的。

“虚拟化”这个术语本身就极大地表明了服务请求和底层物理交付的分离。对于x86虚拟化,在硬件和操作系统之间,添加了一个虚拟化层,如图2。

如果用户在具体的设置过程中对某一个具体功能的设置不清楚的话,可以点击该功能选项的帮助按钮,启动相应的帮助文本。帮助文本能够提供所有功能选项的详细说明。如果用户发现自己可能选择了错误的选项而希望恢复以前的设置的话,可以选择直接返回主窗口而不保存任何所做的改动。用户在完成了所有需要改动的设置之后,可以点击xconfig主窗口的“Save
and Exit“,保存用户设置并退出xconfig。

图片 3

编辑系统内核

 

用户在按照个人的实际需要完成对系统内核的设置之后,需要对新的系统内核进行编译。

这个虚拟化层使得多个操作系统实例可以并行地运行在一台计算机上,并动态地瓜分和共享诸如CPU、存储、内存和I/O设备等物理资源。

用户在关闭所有打开的程序之后,在命令方式下输入“make
bzImage”命令。该命令会自动完成对新系统内核的编辑,大约需要10到30分钟,具体时间取决于用户机器的性能。

 

编译完系统内核之后,返回到命令方式。这时如果出现报错信息,则表示用户对系统内核进行了错误的设置,例如没有启动某一个功能所必须的其它附加功能等。这时用户所能做的只能是从头开始,从新设置系统内核。

随着桌面和服务器处理能力持续逐年地增加,虚拟化技术被认为是一种可以简化软件开发测试、进行服务器整合、提高数据中心敏捷性和业务连续性的强大技术。事实表明,将操作系统和应用程序完全从硬件中抽象出来然后封装成具有可移植性的虚拟机后,会带来很多虚拟化设施才具有的而单纯硬件所没有的特性。例如,现今的服务可以24*7*365不间断地运行在配置有容错特性的虚拟设施中,数据备份和硬件维护也不需要停止服务。VMware有一些客户,他们生产环境上的服务器已经运行了三年多没出现过服务停止现象。

在顺利编译完新的系统内核之后,用户还需要对配置系统内核过程中设定的各种功能模块进行编译和安装。具体为:输入“make
modules”命令,然后按回车。该命令将会完成对内核模块的编译。完成编译之后,输入“make
modules_install”命令,该命令会自动安装已编译模块。

对于业界标准的x86系统,虚拟化采取hosted或者hypervisor架构。hosted架构将虚拟化层以一个应用程序的方式安装运行于操作系统之上,支持最为广泛的各种硬件配置。hypervisor(裸金属)架构将虚拟化层直接安装到干净的x86系统上,由于它不需要通过操作系统而直接访问硬件,hypervisor架构相对于hosted架构效率更高,且具有更好的可扩展性、健壮性和性能。VMware
Player, ACE, Workstation和Server使用了hosted架构的便捷性,而ESX
server针对已认证的硬件采用hypervisor架构以达到数据中心级别的性能。

收尾工作

了解各个组件的大概背景,有助于更好的理解x86虚拟化技术。虚拟化层是负责运行和管理所有虚拟机的软件,运行于虚拟机监控器(VMMs)上。如图3所示,虚拟化层是直接运行在硬件上的hypervisor,基于不同架构和实现方法的hypervisor所具有的功能有很大不同。运行于hypervisor上的每个VMM实现了虚拟机的硬件抽象并负责运行虚拟机系统,每个VMM需要通过分割和共享CPU、内存和I/O设备来完成系统的虚拟化。

在完成了对新系统内核以及模块的编译之后,我们需要把新的系统内核复制到Linux的启动目录中。用户可以输入以下命令“cp
arch/i386/boot/bzImage
/boot/vmlinuz-mykernel”。此外,我们还需要对LILO进行相应的修改,以便使LILO在系统启动时能够找到新的系统内核。我们可以使用任何一种Linux系统下的文本编辑工具对LILO配置文件进行修改。这里我们使用pico文本编辑器。输入“pico
/etc/lilo.conf”命令,启动pico编辑器,并载入LILO配置文件。找到“image=“项,用“/boot/vmlinuz-
mykernel”替代该项的现有值。建议用户记下“image=“项的当前值,这样如果出现任何问题,就可以方便的恢复到安全设置。完成修改之后,按
Ctrl-X,选择“Y”然后回车,保存设置并退出pico编辑器。这样,我们已经完成了定制Linux系统内核的所有工作。重新启动机器再次进入Linux系统之后,用户将会感受到新的系统内核所带来的新的体验。

图片 4

 

CPU虚拟化

x86硬件虚拟化的挑战

 

x86操作系统被设计成直接运行在硬件上,自然这些系统会认为它们拥有硬件的全部控制权。如图4所示,x86架构为操作系统和应用程序提供了四个不同级别的权限来管理对硬件的访问,分别为ring
0,1,2和3。用户程序一般运行在ring
3,操作系统需要直接访问内存和硬件,因此需要在ring
0执行它的特权指令。x86架构的虚拟化需要在操作系统(运行于最高权限的ring
0)之下放置一个提供共享资源的虚拟化层来创建和管理虚拟机。比较糟的是,有些敏感指令在非ring
0下执行时具有不同的语义,因此不能很好地将其虚拟化。在运行时陷入并翻译这些敏感指令和特权指令是一个艰难的挑战,这使得x86架构的虚拟化起初看起来是不可完成的任务。

图片 5

 

VMware在1998年就攻克了这个挑战,开发了二进制翻译技术使得VMM运行在ring
0以达到隔离和性能的要求,而将操作系统转移到比应用程序所在ring
3权限高和比虚拟机监控器所在ring 0权限低的用户级。基于VMware
20000多客户的安装使用情况以及所形成的广大合作伙伴生态系统,VMware使用二进制翻译的全虚拟化方案已经成为事实上的标准,总的来说业界还没有一个开放的标准来定义和管理虚拟化。每个开发虚拟化解决方案的公司可以用不同的方式应对这个技术上的挑战,提供的解决方案良莠不齐。

正如以下阐述的,目前有三种技术来实现x86架构CPU敏感指令和特权指令的虚拟化,分别为:

. 使用二进制翻译的全虚拟化;

. 操作系统辅助或半虚拟化;

. 硬件辅助的虚拟化(第一代);

 

技术 1  — 使用二进制翻译的全虚拟化

 

使用二进制翻译和直接指令执行相结合的技术,VMware可以虚拟化任何基于x86的操作系统。这种方法如图5所示,将内核代码翻译,以便使用一系列作用于虚拟化硬件可达到所需效果的新指令序列替换那些不可虚拟化的指令。同时,用户级的代码直接运行在物理处理器上保证虚拟化的高性能。虚拟机监控器为每个虚拟机提供类似于真实物理系统所具有的服务,如一个虚拟的BIOS,虚拟化设备和虚拟化的内存管理。

图片 6

 

二进制翻译和直接指令执行相结合的全虚拟化使得虚拟机系统和底下的物理硬件彻底解耦。虚拟机系统没有意识到它是被虚拟化的,因此不需要虚拟机系统做任何的修改。全虚拟化是不需要硬件辅助或操作系统辅助来虚拟化敏感指令和特权指令的唯一方案。hypervisor将操作系统的指令翻译并将结果缓存供之后使用,而用户级指令无需修改就运行,具有和物理机一样的执行速度。

全虚拟化为虚拟机提供最佳的隔离和安全性,使移植变得简单,因为同样的虚拟机系统可运行于虚拟化环境或真实物理硬件上。VMware的虚拟化产品和微软的Virtual
Server是全虚拟化的例子。

 

技术 2 — 操作系统辅助虚拟化或半虚拟化

 

“Para”是源于希腊的英文词缀,意为“beside”、“with”、“alongside”。就以“alongside
virtualization”来说,半虚拟化指的是虚拟机系统和hypervisor通过交互来改善性能和效率。如图6所示,半虚拟化涉及到修改操作系统内核来将不可虚拟化的指令替换为直接与虚拟化层交互的超级调用(hypercalls)。hypervisor同样为其他关键的系统操作如内存管理、中断处理、计时等提供了超级调用接口。

图片 7

 

半虚拟化和全虚拟化不一样,全虚拟化时未经修改的虚拟机系统不知道自身被虚拟化,系统敏感的调用陷入后再进行二进制翻译。半虚拟化的价值在于更低的虚拟化代价,但是半虚拟化相对全虚拟化的性能优势根据不同的工作负载有很大差别。半虚拟化不支持未经修改的操作系统(如Windows
2000/XP),因此它的兼容性和可移植性较差。由于半虚拟化需要系统内核的深度修改,在生产环境中,半虚拟化在技术支持和维护上会有很大的问题。开源的Xen项目是半虚拟化的一个例子,它使用一个经过修改的Linux内核来虚拟化处理器,而用另外一个定制的虚拟机系统的设备驱动来虚拟化I/O。

使用二进制翻译来实现虚拟化更复杂更困难,相对来说修改虚拟机系统较容易。这些年来,VMware在自己的产品线中,以VMware
tools和经优化的虚拟设备驱动的方式使用了半虚拟化某些方面的技术。VMware
tools为VMM
hypervisor进行时间同步、日志服务、和关闭虚拟机等服务提供了一个后门。Vmxnet是一个半虚拟化的I/O设备驱动,它和hypervisor共享一些数据结构。它通过利用宿主机设备的能力来获得更好的吞吐量和更低的CPU的使用量。需要澄清的是,VMware
tools服务和vmxnet设备驱动并不是CPU半虚拟化方案,它们是小型的,非入侵式地安装在虚拟机系统中,不需要系统内核作修改。从今往后,VMware也在帮助开发半虚拟化的linux版本,以支持概念验证和产品开发。更多的信息见之后的页11。

 

技术 3 — 硬件辅助的虚拟化

 

硬件厂商迅速拥抱虚拟化并开发出新的硬件特性来简化虚拟化技术。第一代技术包括Intel虚拟化技术(VT-x)和AMD的AMD-V,两者都针对特权指令为CPU添加了一个执行模式,VMM运行在ring
0,同时在新增的根模式下。如图7所示,特权和敏感调用自动陷入hypervisor,不再需要二进制翻译或半虚拟化。虚拟机的状态保存在虚拟机控制结构(VMCS,VT-x)或虚拟机控制块(VMCB,AMD-V)中。带有VT和AMD-V的处理器在2006年投入使用,因此新的系统才会带有这些硬件辅助特性。由于hypervisor到虚拟机转换的高代价和僵化的编程模型,目前VMware的二进制翻译技术在很多情况下会比第一代硬性辅助的实现表现更好。第一代硬件辅助虚拟化的实现中,僵化的编程模型使软件在管理hypervisor到虚拟机转换的频率和代价方面失去灵活性。出于此,VMware仅使用了第一代硬件辅助的少数特性,例如在Intel处理器上支持64位虚拟机。

图片 8

 

内存虚拟化

 

除了CPU虚拟化之外,下一个关键的组件是内存虚拟化。内存虚拟化涉及到对系统物理内存的共享和动态地为虚拟机分配内存。内存虚拟化和当代操作系统对虚拟内存的支持类似。应用程序看到的连续地址空间和底下真正的物理内存不一定是一一对应的。操作系统保存了虚拟页号到物理页号的映射。当前所有的x86
CPU包含了一个内存管理单元(MMU)和一个旁路缓冲(TBL)以优化虚拟内存的性能。

为了在一个系统上运行多个虚拟机,还需要另外一层的内存虚拟化。也就是说,MMU需要被虚拟化来支持虚拟机系统。虚拟机系统还是控制着虚拟地址到虚拟机内存物理地址的映射,但虚拟机系统不能直接访问真实的机器内存。VMM负责将虚拟机物理内存映射到真实的机器内存,并使用影子页表来加速映射过程。如图8种标红线之处所示,VMM使用硬件中的TLB来直接映射虚拟内存到机器内存以避免每次访问时需要两级转换。当虚拟机改变了虚拟内存到物理内存的映射时,VMM更新影子页表使得后续可以直接查找。对于所有的虚拟化方案来说,MMU虚拟化都会带来一定的代价,这也是第二代硬件辅助虚拟化方案会改进的地方。

图片 9

 

设备和I/O虚拟化

 

除了CPU和内存虚拟化之外,最后一个需要虚拟化的组件是设备和I/O虚拟化,这涉及到对虚拟设备和共享的物理设备之间的I/O请求路径的管理。

相对于直接访问(direct
pass-through)物理硬件的方法,基于软件的I/O虚拟化及管理具有更丰富的特性和更简化的管理方式。以网络方面为例,虚拟网卡和虚拟交换机可以在虚拟机之间创建虚拟网络,而不需要消耗物理网络的带宽,网卡组合(NIC
teaming)使得多个物理网卡变成逻辑上的一块网卡,这对虚拟机来说,物理网卡的故障转移是透明的。这样一来,虚拟机通过VMotion可以无缝地在不同系统之间迁移,并且保留已有的MAC地址。高效I/O虚拟化关键的一点就是要保留虚拟化的这些好处同时对CPU增加的消耗减到最少。

hypervisor虚拟化了物理硬件,为虚拟机呈现一系列标准的虚拟设备,如图9所示。这些虚拟设备有效的模拟了所熟知的硬件并将虚拟机的请求翻译成对系统物理硬件的请求。设备驱动的标准化也帮助了虚拟机的标准化并增加在不同平台间的可移植性,因为所有的虚拟机都配置成运行在虚拟硬件上,跟底下真实的系统物理硬件无关。

图片 10

 

当前x86虚拟化技术的总结

 

VMware目前无论在生产环境还是开发实验室都使用了所有这些x86虚拟化技术,并在性能和功能特性之间做到最佳的平衡。和虚拟化技术概观一节所描述的一起,图10中的对比总结有助于从更高层次去理解各种不同技术的优缺点。

图片 11

 

二进制翻译的全虚拟化是当前最为成熟的技术

 

二进制翻译的全虚拟化是当前最为成熟和可靠的技术。VMware在常见的Windows和Linux操作系统中的实现都具有最高的虚拟化性能、最健壮的特性集和最简易的管理方式。除了64位的虚拟机以二进制翻译的方式运行于Intel
CPU上,VMware在生产环境中都支持全虚拟化和硬件辅助的虚拟化方案,可根据对性能的相对需求进行选择。

二进制翻译的全虚拟化在之后几年仍然是一项有用的技术,更新更快的硬件在性能上会继续比通过二进制翻译执行的未经修改的虚拟机系统具有更高的性能。硬件辅助的虚拟化是虚拟化的未来,半虚拟化在性能上的优势将会减少。

 

硬件辅助是虚拟化的未来,它真正的优势还没发挥出来

 

Intel和AMD的第一代硬件辅助特性在2006年发布,是hypervisor可以不依赖于二进制翻译和OS-assisted的处理器半虚拟化的第一步。正如Xen项目所展示的,早期的这些硬件辅助特性使得创建一个不依赖于二进制翻译和半虚拟化技术的hypervisor容易得多。Xen使用硬件辅助特性来虚拟化Windows,但相较于VMware的二进制翻译和Xen半虚拟化的Linux,效率上打了不少折扣。挑战在于,这些第一代硬件辅助的实现提供了一个僵化的编程模型,同时hypervisor到虚拟机的转换要付出高昂的代价,导致了硬件辅助的虚拟化比VMware的二进制翻译性能更低。VMware跟合作伙伴Intel和AMD一起,为改善未来硬件的设计使得能更充分利用软件固有的灵活性来应对虚拟化挑战而努力。

第二代硬件辅助技术正在开发之中,它将对虚拟化系能有更大影响,同时降低内存的消耗代价。AMD和Intel都公布了他们的开发路线图,包括硬件支持的内存虚拟化(AMD
Nested Page Tables[NPT]和Intel Extended Page
Tables[EPT]),以及硬件支持的设备和I/O虚拟化(Intel VT-d,AMD IOMMU)。

CPU密集型的工作负载在二进制翻译和直接指令执行的方式下已经可以运行得很好,但是NPT/EPT通过摒弃影子页表来减少对系统内存的消耗,将会获得明显的性能提升。未来CPU的性能提升和虚拟化代价减少的期待是广泛使用硬件辅助特性的动力,但不要期待有什么革命性的改变。随着处理器每年变得更快,每年处理器性能的提升似乎比未来硬件辅助优化对虚拟化容量和性能带来的影响更大。

随着时间的推移,可见到硬件辅助的虚拟化性能会超越处理器和内存半虚拟化的性能。随着对CPU、内存和I/O设备进行硬件辅助开发,半虚拟化相对于硬件辅助虚拟化的性能优势将逐渐缩小。随着硬件辅助特性的开发和成熟,hypervisors
will commoditize as they increasingly leverage a common set of hardware
assist features,但它们还会在性能、可管理性、功能特性上继续竞争。

 

Xen的CPU半虚拟化带来性能提升却有维护代价

 

Xen好像是把半虚拟化当作第二代虚拟化技术,而把VMware的全虚拟化技术当作第一代。现实情况是,半虚拟化是一项老而有用的技术,对于某些工作负载确实提供了性能上的好处,但往往需要付出维护代价。毫无疑问,要获得性能提升,需要在虚拟机系统安装虚拟化管理程序和设备驱动,但数据中心必须权衡减少虚拟化代价的优势和运行一个经过修改的虚拟机系统内核来使能半虚拟化所需要的支持维护成本。性能优势还依赖于工作负载的特质。大部分的工作负载获得很少的提升,不是所有的负载都能获得接近物理机的性能。

Xen最大的挑战是处理器半虚拟化无法作用于未经修改的虚拟机系统,因此不适用于无法修改的虚拟机系统(如Windows)和不需要修改的虚拟机系统(when
supported versions of Linux are
required)。大部分的数据中心不愿意将业务应用运行在半虚拟化的第三方Linux内核而这些内核又运行在开源的hypervisor上。此外,入侵式的内核修改使得虚拟机系统和hypervisor在一些数据结构上紧耦合,阻止了修改后的虚拟机系统无法运行在其它的hypervisor或裸机上。

即使主流的Linux发行版开始将半虚拟化功能捆绑到操作系统内核,部署半虚拟化的系统会增加维护成本和减少可移植性。不少公司发现Xen的Linux半虚拟化方案不适合企业应用,一些新的Xen系的虚拟化厂商则完全抛弃了Linux半虚拟化。例如,Virtual
Iron宣称半虚拟化是个“穷途末路的方法(dead-end
approach2)”,而集中精力在基于硬件辅助的使用未经修改虚拟机系统的全虚拟化技术。

这给Xen带来了第二个竞争挑战。Xen
3.x只引入了硬件辅助使用未经修改虚拟机系统的全虚拟化支持。VMware的二进制翻译比使用第一代硬件辅助的Xen复杂很多,性能更高,Xen厂商在整体的性能、可靠性、易于管理方面还无法跟VMware竞争。那些没有完全放弃处理器半虚拟化的厂商经常迷惑试听,暗示他们的Linux半虚拟化性能比基于硬件辅助虚拟化使用未经修改的虚拟机系统性能好。

需要明确的是,VMware发现处理器半虚拟化对现今的某些工作负载来说确实能很大地提升性能,但当第二代硬件辅助特性发布时,这种性能好处是否会保持则难以预测。性能的差异或许会减少、消除甚至扩大,因为半虚拟化的接口也许会有新的改进。这是个开放的问题。

在VMware看来,处理器半虚拟化最大的问题在于它需要修改虚拟机操作系统,这使得虚拟机系统的运行依赖于特定的hypervisor。例如,Xen接口实现的深度半虚拟化对hypervisor有很强的依赖性。虚拟机操作系统和hypervisor实现的数据结构有强耦合。Xen的Linux内核不能运行在裸机或其它的hypervisor上,这带来了不兼容性,使kernel的发布和需要维护的版本数增加了2倍。另外,对新的开源操纵系统来说有限制,因为对虚拟机操作系统的修改需要操作系统厂商的支持。最后,对hypervisor的强依赖性阻碍了内核的独立进化。

 

VMware的透明半虚拟化平衡了性能好处和维护成本

 

Xen的半虚拟化实现对Linux内核进行入侵式修改,VMware围绕标准接口来获得OS辅助的半虚拟化性能上的好处同时减轻维护成本。VMware于2005年提出透明半虚拟化接口VMI(Virtual
Machine Interface),作为虚拟机操作系统和hypervisor之间标准的通信机制。

如图11所示,VMI是位于hypervisor和半虚拟化虚拟机系统之间的一层。透明半虚拟化实现中,同样的虚拟机操作系统可以运行在裸机上、在虚拟化环境中或其它任何兼容的hypervisor中。所有的VMI调用有两种实现,一种是为裸机准备的内联原生指令,另一种是在虚拟机中间接调用到虚拟机OS和hypervisor之间的VMI层。两种实现都做到了高性能。VMI的版本控制使得hypervisor和虚拟机系统的发展相互独立,这就获得了可维护性和可扩展性。VMI层支持hypervisor的多样性,因为VMI-Linux运行时可使用Xen
hypervisor中一个合适的间接层。对可移植性,后续的一个Linux版本已经被移植到VMI接口。

图片 12

 

VMware继续和Linux社区合作开发半虚拟化接口来支持不同的hypervisor。VMware在2006年发布了VMI规范,在Ottawa
Linux
Symposium的VMI提议促成了paravirt-ops接口在Linux社区的开发。paravirt-ops接口合并了VMI的多个概念,包括对透明半虚拟化的支持,是由一个联合小组开发,成员来自包括IBM、VMware、Ret
Hat和XenSource。使用这个接口,半虚拟化的Linux操作系统可以运行在任何支持该接口的hypervisor上。VMware发力在虚拟机系统的paravirt-ops接口开发,这些接口使用VMI接口调用hypervisor,paravirt-ops从Linux内核2.6.20版本开始成为内核的一部分。在Linux
2.6.22版本中,包含了用来补充paravirt-ops接口的VMI
backend。有了这个规范,Linux系统发行方和ISV可支持单个含有半虚拟化的内核镜像,同时获得性能好处和可管理性。这使得处理器半虚拟化的兼容性有机会得到改善。

为获得反馈和评估,VMware在Workstation
6中包含了支持试验的VMI功能,即在宿主环境中支持操作系统的半虚拟化。这个Workstation发布版提供了2005年就和Linux社区讨论的透明半虚拟化接口。你可以下载一个功能齐全的支持半虚拟化接口的VMware
Player虚拟机监控器,和一个流行的支持半虚拟化的Linux内核。VMware
Player和Workstation中的这个试验支持目标受众是那些希望评估VMware半虚拟化技术的开发者。

由于这个试验是在宿主架构模式中,因此不宜用来评估半虚拟化的I/O性能改善,不过它可以用来评估CPU密集型工作负载的性能改善。后续的实现将是在裸机hypervisor架构下,如VMware
ESX
Server,会展示半虚拟化带来的CPU和I/O系能改善。VMware计划对半虚拟化操作系统添加支持,因为这些系统在商用的虚拟化平台设施中被采用了。

 

VMware正在促进虚拟化的开放标准

 

在过去的几年中,VMware和一些领头的技术厂商合作来定义虚拟化的开放标准。作为最初的一步,VMware贡献了自己现有的框架和API,以中立的方式帮助开发这些业界标准。VMware之所以提出这些开放接口和格式,是因为技术界最为成功的接口和格式是基于客户实际的部署标准。7年多来,VMware的技术被广泛部署从而获得了很多现实世界的经验。

任何一个行业,开放接口和格式被证明是产品被广泛采用的一个保证,虚拟化也不例外。虽然今天虚拟化的势头很猛,但它还处于早期阶段。VMware采取这一步来带动虚拟化的增长,加速客户解决方案的交付最终形成虚拟化技术的广泛采用。

VMware采取这一步骤还因为合作伙伴和客户的需求。使用不同虚拟化方案的产品在不断地增加,只要虚拟化解决方案兼容,客户就可以进行更大范围的访问从而受益。开放接口和格式对业界的好处是,它促进虚拟化生态系统中厂商的合作和创新并为大家扩大了市场机会。

 

VMware提供了以下开放接口和格式:

. 虚拟机接口 — hypervisor和虚拟机之间的APIs

. 管理接口 —
针对单个虚拟机环境和高度动态的、数据中心规模的虚拟化系统的标准运维管理的框架

. 虚拟机镜像磁盘格式 —
虚拟机磁盘镜像,使得虚拟机提供、迁移和维护可跨平台。

 

VMware倾向于这些东西都是开放的,厂商中立的,任何拥抱这种虚拟化开放标准的厂商可以参与。

 

VMware使用Multi-Mode VMM架构来提供性能和灵活性

 

大部分初创的虚拟化厂商只具有在产品中使用一种虚拟化方案的资源。他们自然愿意集中精力在他们的虚拟化方案中并使该方案的弱点最小化同时填补功能上的差距。这就容易出现市场的混乱局面,因为他们片面的宣称扭曲了现实。

每发布一个产品,VMware都经过挖掘现有的和未来的虚拟化技术,以获得在性能、稳定性、功能特性、可管理性之间的最佳平衡。VMware同时积极地和合作伙伴一起为企业虚拟化开发一个可互操作的生态系统。

VMware提供了一个灵活的“multi-mode”
VMM架构,如图12所示,每个VMM管理一个虚拟机。VMware让你自己选择模式来达到在CPU支持的情况下获得最佳的性能。同样的VMM架构已经在用于ESX
Server,Player,Server,Workstation和ACE。

图片 13

 

现今的工作负载可使用一个32位BT
VMM或一个伴有BT/VT-x的64位VMM,以后的工作负载将运行在支持32/64位AMD-V+NPT和VT-X+EPT的VMM上。

VMware提供一个灵活的架构来支持不断涌现的虚拟化技术。Multi-mode
VMM使用二进制翻译,硬件辅助虚拟化和半虚拟化来为每种工作负载选择最佳的操作模式和处理器组合。硬件辅助技术将不断成熟,同时拓宽了可被虚拟化的工作负载种类。

 

结语

 

长期以来,在虚拟化性能改善方面,VMware寻求了很多的策略。二进制翻译、硬件辅助虚拟化、操作系统辅助(半虚拟化)都是有效的x86虚拟化技术,但它们的重要性和价值不断消长,因为企业虚拟化市场仍然在不断的进化和成熟过程中。差不多10年前,VMware就开始了这场革命,直到现在还在引领业界建立一个开放标准、操作系统无关的虚拟化生态系统,来帮助企业实现IT环境的转型。

未来的虚拟化估计会有厂商支持的半虚拟化操作系统安装在业界标准的磁盘文件格式中,并且可运行在裸机上或者在一系列兼容的可互操作的hypervisor上,同时利用了硬件辅助管理CPU、内存、I/O设备的优势。

今天,VMware虚拟化技术作为领先的方案部署在世界前100强中100%的企业和前1000强中的84%的企业中。没有另一个选择能在性能、稳定性、方便管理、安全性、技术支持、功能性和广大的合作伙伴系统方面能和VMware相比。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图