虚拟化技术的介绍

提到虚拟化技术,大家普遍想到的是虚拟机,脑海中很快飘过 Vmware[Vmware workstation],VirtualBox[Oracal VM VirtualBox],Qemu,Xen等,那么到底什么是虚拟机技术? 和虚拟机之前的关联是什么? 让我们来一一揭秘。

发展历史线

早在计算机还是庞然大物的上世纪60年代,虚拟化技术已经开始悄悄发展了。

  • 1964年 IBM M44/44X被认为是世界上第一个支持虚拟化的系统,其技术方式是:像分时系统一样,在每个时间片,一个IBM 7044大型机独占所有硬件资源来运行,并且提出了分页的概念,由于其依赖硬件来实现虚拟化,史称硬件虚拟化
  • 1974年,论文Formal requirements for virtualizable third generation architectures提出了虚拟化系统结构的三个基本条件[1]
  • 1972年著名的天才法国程序员Fabrice Bellard出生。
  • 1979年的 Unix 第7版引入了 chroot 机制,chroot 就是让一个进程把指定的目录作为根目录,它的所有文件系统操作都只能在这个指定目录里进行
  • 1990年 Xen hypervisor 的Xenoserver初始代码工程由 Keir Fraser 和 Ian Pratt 创建。
  • 1998年,很著名的X86 模拟器Bochs出现了,其正式版本的退出时间为1998年11月。
  • 1999年,Vmware 公司率先推出针对X86平台的商用虚拟机Vmaware workstation
  • 2001年,目前最流行的采用动态二进制翻译技术的虚拟化软件Qemu(Quick EMUlator)发布第一个版本,其作者是Fabrice Bellard。
  • 2003年,剑桥大学发布了首个Public 的Xen 版本,通过半虚拟化技术实现了对包括x86-64 平台多个平台的虚拟化支持。
  • 同年,Intel 公布了将在x86平台的cpu上支持虚拟化技术VT。
  • 2007年1月,Sun 公司发布了开源虚拟化VirtualBox
  • 2007年2月,Linux Kernel 主线版本2.6.20合入了由以色列公司Qumranet开发的KVM(Kernel-based Virtual Machine,支持KVM的前提是CPU必须要支持硬件虚拟化。
  • 2008年第一季度,微软连同Windows Server 2008同时发布了虚拟化产品Hyper-V
  • 2008年6月,Linux Container 发布了0.1.0版本,其可以提供轻量级的虚拟化,用来隔离进程和资源。
  • 2008年9月4,Red Hat 收购了色列公司Qumranet,并着手开始用KVM替换在Red Hat中的使用的Xen**[Xen开始在主流Linux 发行厂商中衰落]**。
  • 2010年10月21,NASA发布了可以提供基础设施即服(IaaS)服务的云平台OpenStack>,并提供了第一个版本。
  • 2011年1月11,Ubuntu的创始人Mark shuttleworth宣布,Ubuntu 将采用Openstack 作为基础的云平台,在之前的版本Ubuntu 采用的是Eucalyptus。
  • 2013年3月15,在加利福尼亚州圣克拉拉召开的 Python 开发者大会上,DotCloud 的创始人兼首席执行官 Solomon Hvkes 在一场仅五分钟的微型演讲中,首次提出了Docker这一概念,并于会后将源码进行了开源,托管在了github上。
  • 2014年6月,Docker发布了第一个正式版本1.0,彼时,Docker的下载量已经超过275万次,1年之内Redhat 和 AWS就宣布为Docker提供官方支持。
  • 2015年国外国内涌现各种从事云的公司,并提供了各种云服务,诸如Laas,Paas,Saas等。

从上述时间线,我们的发现,各种如春笋般的新技术的出现,必将有旧技术的没落,技术界的革新比我们想象的要快太多。

基础概念

什么是虚拟化?

从维基百科以及各路大神的释义,我这里简单归纳一下我的理解:
1. 虚拟化是资源的一种逻辑表示,并不会受限于物理资源。
2. 运行的环境不在真实的硬件上,而是硬件之上的虚拟内存中的一段,或者说是虚拟的环境中。
3. 虚拟化为数据,计算能力,存储资源等提供了一个逻辑视图,而不是物理视图。
4. 虚拟化的发展,大幅降低了IT硬件成本,减少了资源的浪费,并且提升了系统的稳定性和安全性。

关键字: 全虚拟化、半虚拟化

全虚拟化

全虚拟化(Full Virtualization)也称为原始虚拟化技术,该模型使用虚拟机协调guest操作系统和原始硬件,VMM在guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。
Full Virtualization
全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。

半虚拟化

半虚拟化(Para Virtualization)是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的guest操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。
Para Virtualization
半虚拟化需要guest操作系统做一些修改,使guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。

虚拟化技术得以快速发展的几个技术因素

同质 - equivalence

即VM的运行环境和物理机的环境在本质上是相同的,表现上允许有一些差异。如CPU的桥片必须一致,CPU core的个数以及内存可以不同,不必使用同类型的网络适配器驱动等等。

高效 - efficiency

即VM的性能必须接近物理机。因此,常见的虚拟系统模拟器(Boches,simics等)就不能成为VM。为达此目的,软件在虚拟系统上运行时,大多数指令要直接运行在硬件上执行,只有少量指令需要VMM的模拟或翻译处理。

资源受控 - resource control

即VMM(Virtual Machine Monitor)对物理机的所有资源有绝对的控制力。虚拟机不允许直接执行敏感指令。

主流虚拟化系统软件介绍

随着技术的发展,目前的主流的虚拟化系统软件包括KVM、Xen、Hyper-V、Vmware ESXI、QEMU等,主流软件其功能性方面做的都还不错,尤其是在Intel提供了VT技术[2]之后,虚拟化系统软件都做的很完美。

KVM

KVM是什么?
KVM全称是Kernel-based Virtual Machine,即基于内核的虚拟机。
Para Virtualization
KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。

Xen

Xen 是第一类运行再裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,Xen支持hypervisor和虚拟机互相通 讯,而且提供在所有Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),能让虚拟机有效运行而不需要仿 真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。
Xen 最初是作为剑桥大学的一个项目,目前 xen.org 社区在负责它的开发及维护,它已经在开源社区中得到了极大的发展。Xen 是一种直接运行在硬件上一层软件,它可以让电脑硬件上同时跑多个用户的操作系统。由于对 x86, x86-64, Itanium, Power PC, 和 ARM 这些处理器的支持,所以 Xen 管理工具可以支持的操作系统有 Linux, NetBSD,FreeBSD,Solaris, Windows 和其他一些运行在 XEN 上的正常的操作系统。
如下图所示 Xen 在系统中的位置:
Xen

Xen 目前具有以下几种产品:
Xen Hypervisor —— 后面会详细讲解,在此不作赘述。会导致转换有问题;
XCI —— 种嵌入式管理工具,基于 Xen Hypervisor 的基础之上修改而来,相对于标准的 Xen Hypervisor,它使用的库更小,目前主要用在笔记本以及一些移动设备上,可以使用 Intel 或者 AMD 的架构;
Xen Cloud Platform —— 目前它为 ISVs 和服务提供商提供了一套基于强大的管理栈的云架构平台,这个栈是基于开放的标准 API;

Hyper-V

Hyper-V 是微软提出的一种系统管理程序虚拟化技术,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V 底层的 Hypervisor 运行在最高的特权级别下,微软将其称为 ring -1(而 Intel 则将其称为 root mode),而虚机的 OS 内核和驱动运行在 ring 0,应用程序运行在 ring 3 下,这种架构就不需要采用复杂的 BT(二进制特权指令翻译)技术,可以进一步提高安全性。从架构上讲 Hyper-V 只有“硬件-Hyper-V-虚拟机”三层,本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机 系统性能更接近真实系统性能。架构图如下:
Hyper-V
Hyper-V 支持分区层面的隔离。分区是逻辑隔离单位,受虚拟机监控程序支持,并且操作系统在其中执行。Microsoft 虚拟机监控程序必须至少有一个父 / 根分区,用于运行 64 位版本的 Windows Server 2008 操作系统。虚拟化堆栈在父分区中运行,并且可以直接访问硬件设备。随后,根分区会创建子分区用于承载来宾操作系统。根分区使用虚拟化调用应用程序编程接口 (API) 来创建子分区。

分区对物理处理器没有访问权限,也不能处理处理器中断。相反,它们具有处理器的虚拟视图,并运行于每个来宾分 区专用的虚拟内存地址区域。虚拟机监控程序负责处理处理器中断,并将其重定向到相应的分区。Hyper-V 还可以通过输入输出内存管理单元 (IOMMU) 利用硬件加速来加快各个来宾虚拟地址空间相互之间的地址转换。IOMMU 独立于 CPU 使用的内存管理硬件运行,并用于将物理内存地址重新映射到子分区使用的地址。从系统的结构图,我们可以看出来 Hyper-V 与 Xen 的架构很相似

Vmware ESXI

Vmware ESXI 体系结构图
EXSI
由上图我们可以看出来管理工具也是直接嵌入到了 ESXi vmKernel 中,没有再分化出单独的管理工具,这一点与 Xen 是相区别的。

QEMU

QEMU是一款由Fabrice Bellard所编写的开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。

双剑合璧 QEME and KVM

准确来说,KVM是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚 拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Mips的CPU,并可利用它编译出 可运行在Mips上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两 大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是 KVM和QEMU 的关系。

可以用下面一张图来简单描述QEMUE和KVM之间的关系。
KVM+QEMU

其它虚拟化软件详见下图

compare

KVM or Xen?

下面这些观点来自于KVM or Xen ? 哪个更好?。

  • Xen 现阶段在稳定和功能上略胜一筹。KVM获得的社区支持更多。
  • 昨天在Ubuntu上想安装Xen,发现原来的那些链接和很多安装方法改变了,看来被商业公司收购之后,Xen会在各方面有所改变。虽然KVM现在还无法和Xen相比,但是其植入Linux内核,以及被社区支持,让我更看好它的未来。
  • 开源社区抛弃xen,就像抛弃openoffice一样。Xen如果要发展可能来自citrix oracle的支持。在开源社区xen的式微是不可避免。redhat,suse,ubuntu已经处于转换中。。。
  • 我看到的方向也是 KVM。
  • IBM丢弃Xen用KVM,Ubuntu丢弃Xen用KVM。Redhat就更不用说了,当然支持自家的KVM。 KVM完全开源,而Xen只有核才开源。Citrix 指望Xen及外围工具挣钱呢。
  • KVM 最大的优势是:随着kernel的更新
  • Xen:最大的弊端是恰好是Dom0 不能用最新的kernel,kernel 3.0之后估计会好很多
  • 还是要多看看应用场景,IO问题是不是关键,XEN和KVM的混合设计可根据业务场景的技术层面关注点来设计,简单来看还是KVM更好,但毕竟市场份额现有的还是XEN的高,有点类似于.NET刚出来时vs JavaEE的感觉,还是需要一定的应用历程才能发展起来的
  • 未来趋势,应该是KVM,但是现在最成熟,还是Xen。

But.. 我依然还是Kvm的小红粉!!!!


[1]Formal requirements for virtualizable third generation architectures - Gerald J. Popek & Robert P. Goldberg
[2]Intel VT技术白皮书
上述历史发展线数据均来自发行软件的官网网站,如果纰漏,敬请海涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值