虚拟化原理浅析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Celeste7777/article/details/49657811

一、引言
在生产环境中大多需要服务器来提供服务,但每一个服务可能需要的系统资源很少,独占一台服务器会浪费资源增大耗费,但是想象一下如果一台服务器上同时提供20个服务又会很混乱,因此期望提供服务的OS是独立运行的同时又想减少服务器数量,以降低TOC(Total Cost of Ownership),于是可以利用虚拟化技术隐藏底层物理硬件,从而让多个各自独立运行的OS可以透明地使用和共享这些硬件资源。简单来说,平台虚拟化就是让一台物理计算机能并发运行多个OS。就拿熟悉的VMware Workstation在物理机上的架构来说,物理机的OS之上运行了多个进程,VMware只是其中一个,但是在VMware之上又可以运行多个虚拟机,虚拟机的OS各自独立可以是Red Hat,CentOs,Ubuntu等等。VMware可以理解为是一款模拟了一堆硬件的应用软件,在这些硬件上可以运行额外的OS。下面的叙述中也将虚拟机称为Guest OS或者客户机,宿主机也称为Host OS。
这里写图片描述
二、虚拟化概述
Virtual Machine Monitor&&Hypervisor
http://www.ibm.com/developerworks/cn/linux/l-hypervisor/
在典型的分层架构中,提供平台虚拟化的层称为hypervisor,它是一种运行在物理服务器和OS之间的中间软件层,允许多个OS和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,Hypervisor是所有虚拟化技术的核心,具有规划、部署、管理和优化虚拟基础结构等端到端功能。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的Guest OS。有时Hypervisor也称为VMM,即虚拟机监控器,VMM既可以与虚拟机在同一台主机上,也可以单独运行在一台主机上,VMM与虚拟机互不影响。1974年,Popek和Goldberg在一篇论文中定义了“经典虚拟化(Classical virtualization)”的基本需求,他们认为,一款真正意义上的VMM至少要符合三个方面的标准:

  • 等价执行(Equivalient execution):除了资源的可用性及时间上的不同之外,程序在虚拟化环境中及真实环境中的执行是完全相同的;
  • 性能(Performance):指令集中的大部分指令要能够直接运行于CPU上;
  • 安全(Safety):VMM要能够完全控制系统资源;

这里写图片描述
三、虚拟化分类
根据不同标准虚拟化的分类方式有很多,如:完全虚拟化,准/半虚拟化,硬件虚拟化,跨平台虚拟化,应用程序虚拟化等。
1、Full virtualization
在完全虚拟化中,Guest OS不需要做任何修改,对于Guest OS来说,并不知道自己是运行在虚拟的平台上。可以像正常的服务器一样发送敏感指令,由VMM对虚拟机指令做全程过滤。比如Guest OS发出Power off指令,VMM会将该指令改为仅仅关闭当前虚拟机的指令。对于完全虚拟化来说,从虚拟化支持的层次划分,主要分为软件模拟和硬件支持。
Software Emulation virtualization
软件仿真虚拟化简单来说就是指通过软件的方法模拟特权指令集,让客户机的特权指令陷入异常,从而触发Host OS进行虚拟化处理。主要使用的技术是优先级压缩和二进制翻译(Binary Translation)。特权级压缩是指让Guest OS运行在Ring 1级别,由于处于非特权级别,所以客户机的指令基本上都会触发异常,然后Host OS进行接管。但是有些指令并不能触发异常,因此就需要BT技术来对Guest OS中无法触发异常的指令进行翻译。其主要思想是在执行时将VM上执行的Guest OS指令,翻译成x86 ISA的一个子集,其中的敏感指令会被替换成陷入指令,非敏感指令则不经翻译直接执行,翻译过程和指令执行交叉进行。VMM必须监视Guest OS对GDT、IDT等特权资源的设置,防止GuestOS运行在Ring 0级,同时又要保护降级后的Guest OS不受Guest进程的主动攻击或无意破坏。但在技术层面上用软件模拟实现完全虚拟化非常麻烦,而且巨大的开销会消耗许多硬件资源。
这里写图片描述
Hardware Virtual Machine
基于硬件的虚拟化是由CPU厂商直接在芯片上提供了对虚拟化的支持。比如Intel的Virtualization Technology和AMD的AMD-Virtualization都为CPU增加了新的执行模式。Intel对指令集重新设计,使得原本不能通过先陷入后模拟的方式执行的指令都可以顺利执行。Root模式位于Ring 0的下面,可以理解为在硬件级别增添了Ring -1,让VMM运行Ring -1(相当于普通服务器Ring 0),而Guest OS运行在Non-Root模式——Ring 0。当切换到Guest模式时,CPU提供了先前完整的特权等级,让Guest OS可以不加修改的运行在物理的CPU上。此时,VMM通过一个位于内存的数据结构(Intel称为VMCS,AMD称为VMCB)来控制Guest OS与Host OS的交互,以完成整个平台的虚拟化。
这里写图片描述
**注意:**VT-x中并不仅仅只包含CPU虚拟化,还包括中断虚拟化和内存虚拟化等内容,而AMD在AMD-V在官方资料中也是把CPU、内存和中断等虚拟化技术全部放在了SVM技术规范中进行统一讲解的。
内存虚拟化
http://www.ibm.com/developerworks/cn/linux/l-cn-kvm-mem/
传统的OS通过硬件MMU完成虚拟地址到物理地址的映射。在虚拟化环境中,由于Host OS的MMU不能直接装载Guest OS的页表来进行内存访问,所以当Guest OS访问Host OS物理内存时,需要经过多次地址转换。也即首先根据Guest OS页表把Guest OS虚拟地址转传成Guest OS物理地址,然后再通过Guest OS物理地址到Host OS虚拟地址之间的映射转换成Host OS虚拟地址,最后再根据Host OS页表把Host OS虚拟地址转换成Host OS物理地址。而通过影子页表,则可以实现客户机虚拟地址到宿主机物理地址的直接转换。但作为纯粹用软件方法实现的解决虚拟机使用物理内存的技术——Shadow Paging明显的缺点是在传统OS分页处理的基础上增加了额外的开销,包括VMM对Guest OS页表修改的截取以及相关的同步操作,对 CR3 切换的截取以及相关的 Shadow 页表上下文切换操作, 这些操作通常是相当频繁的。 为了解决Shadow Paging的性能问题,Intel和AMD分别通过EPT(Extended Page Tables)和NPT(Nested Page Tables)技术对内存虚拟化提供了硬件支持,实现Guest OS虚拟地址到Host OS物理地址之间的转换,并通过标记(tagged)TLB来避免虚拟机切换时频繁清写(flush)TLB以提高TLB缓存的命中率。
这里写图片描述
2、Para Virtualization
完全虚拟化是CPU密集型技术,因为它要求hypervisor(VMM)管理各个Cuest OS,并让它们彼此独立。准虚拟化就是减轻这种负担的一种方法,即对Guest OS的内核进行修改,让的内核可以意识到自己运行在虚拟化环境中。在正常情况下,进程不能直接访问硬件,驱动程序不会做成系统调用,但在半虚拟化环境中将驱动程序做成系统调用hypercall,而后Guest OS的内核通过hypercall直接和虚拟化层hypervisor交互,hypervisor同时也提供了hypercall来满足其他关键内核操作,比如内存管理、中断和时间保持。可以理解为在半虚拟环境中,基于一种类似于syscall这种方式,实现Guest OS从Non-Root模式到Root模式的切换。半虚拟化降低了虚拟化的损耗,但是其性能优势很大程度上依赖于运行的负载。由于不是所有的OS都允许修改它的内核(例如Windows),因此它的兼容性和可移植性差。在实际的生产环境中,半虚拟化往往因为要深入修改操作系统内核而会导致操作系统支持和维护的艰难。
这里写图片描述
PV on HVM
http://wiki.xensource.com/wiki/PV_on_HVM
也称为PVHVM or PV-on-HVM drivers,是半虚拟化和完全硬件虚拟化的混合物。其主要目标是通过使用专门优化的半虚拟化设备驱动程序提高完全虚拟化HVM Guest性能。这些驱动针对全虚拟化环境绕过模拟磁盘和网络IO,同时也可以使用CPU的功能支持,例如Intel EPT or AMD NPT。可以从下面的示例中权衡信息以提升性能

  • For workloads that favor PV MMUs, PV on HVM is similar to PV
  • For workloads that favor nested paging (in hardware with Intel EPT or
    AMD NPT support), PV on HVM performs better than PV

这里写图片描述
I/O虚拟化
http://www.ibm.com/developerworks/cn/linux/l-pci-passthrough/
Emulation:通过软件模拟的传统设备,由VMM捕捉Guest的IO请求,将其经过Host OS上的User Space传递到Kernel Space,最终到达物理设备。
Hypervisor:半虚拟化,I/O请求由Guest OS的Kernel Space直接调用Host OS提供的hypercall,性能较模拟相比有了很大提升。
Passthrough: I/O透传,Guest OS直接绕过Host OS使用硬件设备,但是在Host OS上可以管理硬件,通过管理接口向一个特定Guest OS提供一种设备隔离,以便该设备能够被那个Guest OS独占使用。使用设备透传可以获得近乎本机的性能,但是如果系统上有多个虚拟机使用透传技术则需要有足够多的硬件。
这里写图片描述
Intel 和 AMD 都在它们的新一代处理器架构中提供对设备透传的支持(以及辅助管理程序的新指令)。Intel 将这种支持称为 Virtualization Technology for Directed I/O (VT-d),而 AMD 称之为 I/O Memory Management Unit (IOMMU)。不管是哪种情况,新的 CPU 都提供将 PCI 物理地址映射到客户虚拟系统的方法。当这种映射发生时,硬件将负责访问(和保护),客户操作系统在使用该设备时,就仿佛它不是一个虚拟系统一样。除了将客 户机映射到物理内存外,新的架构还提供隔离机制,以便预先阻止其他客户机(或管理程序)访问该内存。
四、虚拟化模型
宿主模型(OS-hosted VMMs)
该结构的VMM,物理资源由Host OS(Windows, Linux etc.) 管理,实际的虚拟化功能由VMM提供,其通常是Host OS的独立内核模块(有的实现还含用户进程,如负责 I/O 虚拟化的用户态设备模型)。VMM模块负责 CPU和内存虚拟化,由 ULM 请求 Host OS 设备驱动,实现 I/O 设备的虚拟化。VMM创建出VM后,通常将VM作为Host OS的一个进程参与调度。
这里写图片描述
优点:可以充分利用现有OS的设备驱动,VMM无需自己实现大量的设备驱动,轻松实现 I/O 设备的虚拟化。
缺点:因资源受Host OS控制,VMM需调用Host OS的服务来获取资源进行虚拟化,其效率和功能会受到一定影响。
常见产品:

  • VMware Workstation
  • VMWare Server (GSX)
  • Microsoft Virtual PC
  • SUN Virtual Box(已被Oracle收购)
  • QEMU (常于xen结合使用,为xen模拟硬件,作者法布里斯·贝拉)
  • WINE(Library Virtulization)

Hypervisor模型
Hypervisor/VMM是直接运行在物理硬件之上的,可以将其看作一个专门服务于虚拟化的完整 OS,掌控有所有资源(CPU,内存,I/O 设备)。
Hypervisor除了需要管理资源,其还需向上提供VM用于运行Guest OS,因此Hypervisor还负责虚拟环境的创建和管理。
这里写图片描述
优点:因Hypervisor同时具有物理资源的管理功能和虚拟化功能,故虚拟化的效率会较高;安全性方面,VM的安全只依赖于Hypervisor的安全。
缺点:因Hypervisor完全拥有物理资源,因此,Hypervisor需要进行物理资源的管理,包括设备的驱动,而设备驱动的开发工作量是很大的,这对Hypervisor是个很大的挑战。
常见产品:

  • VMware vSphere
  • VMWare ESX(商业)、VMware ESXi(免费)
  • WindRiver Hypervisor
  • KVM(基于内核的虚拟机)

混合模型(Hybrid VMMs)
该结构是上述两种模式的混合体,VMM依然位于最底层,拥有所有物理资源,但VMM会主动让出大部分I/O设备的控制权,将它们交由一个运行在特权VM上的特权OS来控制。VMM只负责CPU和内存的虚拟化,I/O 设备的虚拟化由VMM和特权OS共同完成。
这里写图片描述
优点:可利用现有OS的I/O设备驱动;VMM直接控制CPU和内存等物理资源,虚拟化效率较高;若对特权OS的权限控制得当,虚拟机的安全性只依赖于VMM。
缺点:因特权OS运行于VM上,当需要特权OS提供服务时,VMM需要切换到特权OS,这里面就产生上下文切换的开销。
常见产品:

  • Xen
  • Sun Logical Domain

主要参考
http://blog.chinaunix.net/uid-20071539-id-1978450.html
http://blog.chinaunix.net/uid-26000137-id-3761117.html
http://blog.sina.com.cn/s/blog_722dabf20100p3ti.html
http://www.mcplive.cn/?controller=Article&id=5994&page=5

没有更多推荐了,返回首页