剖析系统虚拟化(1)- 简介
作者 吴朱华 | 2010-04-11 16:24 | 类型 云计算, 新兴技术 | 23条用户评论 »
系列目录 漫谈虚拟化技术因为在写探索UCS系列的时候,我发现弯曲的受众群主要以从事网络和通信为主,对系统虚拟化这方面不是特别熟悉,从而导致大家有可能无法很好地吸收UCS的一些技术,所以我特地准备写一个关于系统虚拟化的系列,来帮助大家加深对虚拟化技术的了解,希望大家能喜欢。
简单而言,虚拟化(Virtulization)是表示计算机资源的抽象方法。通过虚拟化可以对包括基础设施,系统和软件等计算机资源的表示,访问和管理进行简化,并为这些资源提供标准的接口来接受输入和提供输出。 虚拟化技术有很多种,比如,网络虚拟化,内存的虚拟化,桌面虚拟化,应用虚拟化和虚拟内存等等。因为篇幅的原因,本系列将重点关注系统虚拟化,特别是X86平台。今后此系列当中提到的虚拟化皆指系统虚拟化。 系统虚拟化的目的通过使用虚拟化管理器(Virtual Machine Monitor,简称VMM)是在一台物理机上虚拟和运行一台或多台虚拟机(Virtual Machine,简称VM)。VMM主要有两种形式:
系统虚拟机的分类由于采用技术的不同,可以将系统虚拟化分为五大类:
硬件仿真(Emulation)简介:属于Hosted模式,在物理机的操作系统上创建一个模拟硬件的程序(Hardware VM)来仿真所想要的硬件,并在此程序上跑虚拟机,而且虚拟机内部的客户操作系统(Guest OS)无需修改。知名的产品有Bochs,QEMU和微软的Virtual PC(它还使用少量的全虚拟化技术)。 图1. 硬件仿真架构图 优点:Guest OS无需修改,而且非常适合用于操作系统开发,也利于进行固件和硬件的协作开发。固件开发人员可以使用目标硬件 VM 在仿真环境中对自己的实际代码进行验证,而不需要等到硬件实际可用的时候。 缺点:速度非常慢,有时速度比物理情况慢100倍以上。 未来:因为速度的问题,渐趋颓势,但是还应该有一席之地。 全虚拟化(Full Virtulization)简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且属于 Hosted 模式和 Hypervisor 模式的都有,知名的产品有IBM CP/CMS,VirtualBox,KVM,VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere)。 图2. 全虚拟化架构图 优点:Guest OS无需修改,速度和功能都非常不错,更重要的是使用非常简单,不论是 VMware 的产品,还是Sun(Oracle?)的 VirtualBox。 缺点:基于Hosted模式的全虚拟产品性能方面不是特别优异,特别是I/O方面。 未来:因为使用这种模式,不仅Guest OS免于修改,而且将通过引入硬件辅助虚拟化技术来提高其性能,我个人判断,在未来全虚拟化还是主流。 半虚拟化(Parairtulization)简介:它与完全虚拟化有一些类似,它也利用Hypervisor来实现对底层硬件的共享访问,但是由于在Hypervisor 上面运行的Guest OS已经集成与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hyperivosr来实现虚拟化。通过这种方法将无需重新编译或捕获特权指令,使其性能非常接近物理机,其最经典的产品就是Xen,而且因为微软的Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于半虚拟化。 图3. 半虚拟化架构图 优点:这种模式和全虚拟化相比,架构更精简,而且在整体速度上有一定的优势。 缺点:需要对Guest OS进行修改,所以在用户体验方面比较麻烦。 未来:我觉得其将来应该和现在的情况比较类似,在公有云(比如Amazon EC2)平台上应该继续占有一席之地,但是很难在其他方面和类似VMware vSphere这样的全虚拟化产品竞争,同时它也将会利用硬件辅助虚拟化技术来提高速度,并简化架构。 硬件辅助虚拟化(Hardware Assisted Virtualization)简介:Intel/AMD等硬件厂商通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化(具体将在下文详述)来提高性能。硬件辅助虚拟化技术常用于优化全虚拟化和半虚拟化产品,而不是独创一派,最出名的例子莫过于VMware Workstation,它虽然属于全虚拟化,但是在它的6.0版本中引入了硬件辅助虚拟化技术,比如Intel的VT-x和AMD的AMD-V。现在市面上的主流全虚拟化和半虚拟化产品都支持硬件辅助虚拟化,包括VirtualBox,KVM,VMware ESX和Xen。 优点:通过引入硬件技术,将使虚拟化技术更接近物理机的速度。 缺点:现有的硬件实现不够优化,还有进一步提高的空间。 未来:因为通过使用硬件技术不仅能提高速度,而且能简化虚拟化技术的架构,所以预见硬件技术将会被大多数虚拟化产品所采用。 操作系统级虚拟化(Operating System Level Virtualization)简介:这种技术通过对服务器操作系统进行简单地隔离来实现虚拟化,主要用于VPS。主要的技术有Parallels Virtuozzo Containers,Unix-like系统上的chroot和Solaris上的Zone等。 图4. 操作系统级架构图 优点:因为它是对操作系统进行直接的修改,所以实现成本低而且性能不错。 缺点:在资源隔离方面表现不佳,而且对Guest OS的型号和版本有限定。 未来:不明朗,我觉得除非有革命性技术诞生,否则还应该属于小众,比如VPS。 五大类之间比较根据个人的经验,我在性能,用户体验和使用场景这三方面对这五大类进行了比较,具体请看下图:
表1. 系统虚拟化五大类之间的比较 因为这表只是我笼统的经验之谈,仅供参考,特别在操作系统级虚拟化这块。 系统虚拟化的用处主要有那些用处呢?
本篇结束,下篇将关注X86虚拟化技术的发展。 参考资料: | ||||||||||||||||||||||||
雁过留声
“剖析系统虚拟化(1)- 简介”有23个回复
鼓励一下,这方面的东西,我基本不懂。
等你系列写完后,我打印研究一下,争取能提出一些问题。
呵呵,谢谢支持,先剧透一下,我将会给大家分析一下,全虚拟化的颠峰VMware ESX的架构,半虚拟化的经典Xen的架构和Intel的硬件辅助虚拟化技术。
虚拟化技术现在铺天盖地。术语也很多。我喜欢通常在看一个东西之后,用自己的理解捋一遍。可否这样理解:
1. 一个OS都不知道自己被底层的东西忽悠了(活在一个虚拟化的CPU上),例如,我们不知道自己是在matric里的一个变量,还是一个真正的human being。那么,这个虚拟化的环境就叫做全虚拟化。
2. 如果1不是,也就是说,一个OS都知道自己是被忽悠的,但没办法,只得将就(现在流行在体制内活命。。。)。这就叫做半(Para虚拟化)。
楼行总结的精辟啊,哈哈
to 陈怀临:
初不多就是这个意思!
好东西,谢谢!
Paravirtulization称作半虚拟化是否贴切?有没有更好的译法?
to Sunny:
Paravirtulization是比较常见译法,目前没有更好的译法,只能将就着。
Para vs. Full:区别是是否修改guest OS。
Para显然更难实现,代价更大。那么通过修改Guest OS,Para到底得到什么?是不是性能提升?为什么能够得到性能提升?
另外,我相信,对OS的修改应该都是内核和驱动程序的修改,修改的目的应该是对用户上层透明的。而且,如果Para能够得到比Full更好的性能,我认为相对于Full,Para只会提升用户体验,为什么会在用户体验方面有问题?
to Sunny:
1. Para到底得到什么?
和你说的是一样的,“对OS的修改应该都是内核和驱动程序的修改“。
2. 是不是性能提升?为什么能够得到性能提升?
这个问题不错!简单的来说,半虚拟化比全虚拟化走了更多的捷径。下篇会对半虚拟化进行一些介绍,在后面会有具体对Xen架构的介绍,希望后面这些文章能回答你的问题。
3. 为什么会在用户体验方面有问题?
因为修改Guest OS很麻烦,而且现在只有少数几个linux发行版能支持这种修改。总体而言,Xen需要专业人员才能玩的转,而VMware的产品比Xen简单很多,所以用户体验方面不佳。
paravirtulization的角色有变化了,现在主要是为了提升性能,在服务器应用很广泛,MS之前炒作的开放源代码的就是做了一个hyper-v对linux的paravirt,这跟Xen的最初目的应该差别很大
很多时候paravirt就是Linux的一个kernel driver,KVM相关的很多,比如说virtio
KVM针对windows也做了些类似的事情
TO ABCD:
关于Hyper-v,我同意你的看法,因为Hyper-v是微软和Xen合作的产物,架构基本一致。
关于KVM,我觉得还是偏全虚拟化和硬件辅助虚拟化更多一点。谈到KVM和windows的关系,我不是特别熟悉,你能详细点吗?
硬件(CPU/Memory/IO)的virtualization已经差不多是标配了,但是这还不够。通过pv可以有更多的信息,更好的控制,所以有更高的throughput. 而没有硬件支持之前,pv是用来帮助实现虚拟化的,所以说角色不太一样了。
KVM给windows做了两个pv的驱动(网卡和硬盘),没有这个驱动windows也能跑的
to ABCD:
谢谢,关于KVM的信息。关于PV,它不只是有更多的信息,更好的控制,特别是XEN,XEN的架构和VMware的差别很大,在下篇文章,我有一定的介绍。
to 首席:
“2. 如果1不是,也就是说,一个OS都知道自己是被忽悠的,但没办法,只得将就(现在流行在体制内活命。。。)。这就叫做半(Para虚拟化)”
个人觉得不是这样,在para虚拟化中,操作系统是自己主动寻求被忽悠,不然在没有硬件虚拟化的环境里,有些敏感的指令会逃离控制,从而不能完全实现虚拟化。而在有硬件虚拟化的环境里,para虚拟化的很多东西还是有它的作用,能够提高guest的性能,同时能让hypervisor更好的控制guest。
举个形象的例子:首席想到某个美女的房间找些东西,在全虚拟化的情况下,首席在不了解房间里的情况时,肯定是毕恭毕敬的敲门打招呼,然后经过美女审核,才能进入。在para虚拟化的环境下,首席通过身边的小弟和美女建立了联系,可以知道某段美女不在房间,这样可以免去敲门这些繁文缛节,直接破门而入,为所欲为。另外一方面,美女可以通过首席的小弟取得首席的情报,在不在家的时候,可以故意丢点啥能让首席浮想连翩的东西在家或者报警。通过首席的小弟,双方可以提高效率,达到各自的目的。
to ikewu83:
“XEN的架构和VMware的差别很大,在下篇文章,我有一定的介绍”
虚拟化的东西现在都是大同小异了,通常的xen和vmware esx我个人觉得是一样的都是hypervisor+domain0的架构。xen现在也有个相关的项目叫HXEN,跟我们现在用的vmware或者virtualbox类似,运行在一个现有的os上
丢一个香手绢,故意吸引我?
另外,我问一下,XEN在ARM上似乎动静不大?为什么?没听说联想或者其他什么公司做?
to 陈怀临:
呵呵,那块主要是三星来弄,现在好像能支持ARM9平台,但最近两年都没什么动作。具体可以参看这个链接http://wiki.xensource.com/xenwiki/XenARM
to 首席:
三星搞过xen在arm上的东西。而且目前xen也有个在arm上的项目xen arm就是由三星在主导。
技术方面,从l4的以前一篇文章看,手机虚拟化和服务器虚拟化还是有些需求上的差异。xen目前还是在服务器方面的需求比较多。所以基本上还是xen还是基于x86,准确地说应该是x86_64
关于arm上的问题,我个人认为还是一个市场需求的问题,具体到手机市场,目前的确没有这方面的需求,至少我身边的朋友不需要这个功能。
随着智能手机的逐步普及, 以及云计算对于 小巧但是智能 的终端的需求,会决定 虚拟化将会在 手持终端上有市场. 对于手持终端来说, 需要隔离. 想像一下 手机支付之类的东西跑在AP OS上引起的安全隐患有多大?但是现在都是怎么做的. 而一旦 手机上的恶意软件形成规模, 那么 我们应该提供什么样的方案?
网络终端移动化是明显的,从早年的PDA到现在的smartphone,从上网本、电子书到中间的混合产品ipad,从最简单的嵌入式小CPU,到强大的多核,加上Google的网络理想和云计算,从技术本身看,移动终端成为每个人的第一生活和工作助理(老婆和小蜜们可能要有所担忧了:),在涉及安全的业务,比如支付和工作,使用一些独立的虚拟系统应该是很有意义的,这些系统因为只在系统内使用,而不是和日常生活的internet混用,能够避免日常生活中很难避免的防不胜防的骗子和强盗,当然,如果有大盗把服务端的系统给搞了,那对个人当然没辙了,但是如果服务端是强大的云计算供应商,也顾了一大批武林高手来应付江湖大盗小盗,虽然也有难免湿鞋的时候,大大多数情况下,一般的江湖骗子和强盗,还是很难有所收获的,可能还要考虑一下自身的安全。所以未来看云计算+虚拟化+E2E安全象international一样,而不是communism,就一定会实现
弯曲很久之前一个 OKL4 Nirvana(涅磐) 手机架构的介绍. 大家可以翻出来看一看
俺是来踢场子的。请楼主就参考资料2中1.3前4段描述区分下:
partial-virt 和 para-virt
convince下我等无知小白.