虚拟化与云计算 

前言  

从我服离开2个月了,在这期间思考了很多关于生活和工作的事情。本来年初的时候就计划想要写一系列关于云计算和虚拟机化方面的博客。但是由于各种原因耽搁了,现在正好补起来。

 


1.1 虚拟化与云计算的关系 

在我看来云计算并不是一种综合技术而是一种商业模型,所以云计算是一个概念,资源使用和交付的模式。而虚拟化指的是一种综合技术。他两是彼此独立,互不影响的,但是云计算又需要使用到虚拟化技术。我们也可以说云计算包含虚拟化。

1.2 云计算 

云计算的兴起,改变了现有的以本地计算为主的应用模式。用户不再需要付费购买软件并将其安装到本地的计算机中执行,取而代之的是大量的计算任务,由客户端通过网络发起在云计算的提供商的数据中心的服务器集群上进行运算,其结果由网络返回,在客户端进行呈现。

1.3 虚拟化 

虚拟化是一个广义的术语,是指计算单元在虚拟的技术上而不是真实的技术上运行。对于程序员来说虚拟化应该不都陌生,像JAVA虚拟机,安卓模拟器,VDI都是虚拟化技术的体现。在我看来虚拟化的本质其实就**是位于下层的模块,根据上层的模块期待与需要,抽象(虚拟)出一个虚拟的资源(软件或硬件等)使得上一层的模块直接运行在这个与自己期待完全一致的虚拟资源上**。资源可以表现为各种各样的是形式,例如,如果把整个X86平台包括处理器、内存和外设作为资源,那么对应的虚拟化技术就是平台虚拟机化(例如VDI)。

1.4 虚拟化技术 

虚拟化技术有很多种实现方式,比如软件虚拟化和硬件虚拟化,再比如准虚拟化(也叫半虚拟化)和全虚拟化。在介绍这些概念之前

我们先来看一下VMM。

 

1.4.1 VMM 

在x86平台虚拟技术中,新引入了虚拟化层通常称为虚拟机监控器(Virtual Machine Monitor,VMM),也叫做Hypervisor。通常VMM运行的环境就是真实的物理机,称之为宿主机(host),而虚拟出来的平台通常称为客户机(guest)里面运行的系统对应地也称为客户机操作系统。VMM处于中间层,既要负责对虚拟资源的管理,包括虚拟环境的调度,虚拟机之间的通信以及虚拟机的管理等,又要负责物理资源的管理,包括CPU,终端,内存,设备等管理。

VMM从虚拟化平台来划分可以分为如下:

1. 完全虚拟化

2. 类虚拟化

从实现结构来划分又可以分为如下三类:

1. Hypervisor模式

2. 宿主模式

3. 混合模式

 

1.4.2 软件虚拟化和硬件虚拟化 

软件虚拟化: 纯软件虚拟化,顾明思义,就是用纯软件的方法在现有的物理平台上(往往并不支持硬件虚拟化)实现对物理平台的指令截获和模拟。常见的软件虚拟机例如qemu,它是通过纯软件来仿真X86平台处理器的获取、解码和执行,客户机的指令并不在物理平台上直接执行。由于所有的指令都是软件模拟的,因此性能往往比较差,好处是可以在同一平台上模拟不同架构平台的虚拟机。

硬件虚拟化: 硬件虚拟机化就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持,甚至新的硬件提供额外的资源来帮助软件的实现对关键硬件资源的虚拟化,从而提升性能。以X86平台虚拟化为例,支持虚拟技术的x86 CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件就会暂停客户机的运行,控制权交回给VMM处理。正式由于虚拟化硬件的提出,从而原先操作系统可以直接在虚拟平台上运行,无需再进行指令集转换,相对于软件虚拟化来说大大减少了相关的性能开销,从而极大简化的VMM的设计,进而使得VMM能够按通用标准进行编写,性能更加强大。Intel的VT-x技术是代表,在处理器上引入了一个新的执行模式用于运行虚拟机.当虚拟机执行在这个特殊模式中时,任何特权操作都会被处理器截获并报告给VMM.

1.4.3 半虚拟化和全虚拟化

半虚拟化 

软件虚拟化可以在缺乏硬件虚拟化支持的平台上通过VMM软件来实现对各个虚拟机的监控,以保障他们之间批次独立和隔离。但是付出的代价是软件的复杂度的增加,和性能的损失。减轻这种负担的一种方法,就是改动客户机的内核模块,使得它以为自己运行在虚拟环境下,能够与VMM协同工作。这种方法叫做半虚拟化。半虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化为客户机主动通知VMM。所以需要修改客户机内核源码来实现主动通知。假如你是深信服的云桌面使用者,你会发现在装有windows的客户机上会自带许多fastIO的驱动。其实这些驱动就是为半虚拟化服务的,其作用就是提升虚拟机的性能。

这些驱动就是大名鼎鼎的virtio半虚拟化驱动。在后面的文章中会详细介绍这些驱动,这里就不过多介绍了

全虚拟化

与半虚拟化技术不同,全虚拟化为客户机提供了完成的虚拟X86平台,包括cpu,内存和外设。不需要对客户机内核做任何修改即可正常运行在非虚拟化环境中,是全虚拟化无可比拟的优势。但是性能上相对半虚拟化还是要差一点。业界很多都认为,基于硬件的全虚拟化产品将是未来虚拟化技术的核心。但是本人认为混合虚拟化才是未来的核心,因为所有硬件的虚拟化都有内核提供开发成本太大而且完全没有必要,只需要将最重要的CPU虚拟化和内存虚拟化放入内核中,其余设备的都可以通过半虚拟化来提高性能。KVM-QEMU就是这样做的,在后序的文章中也会介绍到

1.4.4 VMM实现结构 

上文已经说过按VMM的实现结构来分,VMM可以分为三类:

1.Hypervisor模式 

在Hypervisor模式中,VMM首先是一个完备的操作系统,是为虚拟化而设计的,还具备虚拟化功能.从物理资源上看,所有的物理资源都归VMM所有,VMM承担着管理物理资源的责任.其次,VMM需要向上提供虚拟机用于运行客户机操作系统,负责虚拟环境的创建和管理。所以简单来说在Hypervisor模式中VMM即是操作系统,也是虚拟化软件。

Hypervisor有点就是效率高,虚拟机的安全只依赖VMM,缺点就是管理所有的物理资源,意味着VMM要承担很多开发工作,特别是驱动层面的开发。我们知道硬件的 I/O 设备是很多的,这些设备都要有对应的驱动来设配才能为虚拟机提供功能。

VmwareESXServer,就是基于Hypervisor架构.

 

2.宿主模式 

在宿主模型中,物理资源是由宿主机操作系统管理,宿主机操作系统是传统操作系统,本身不具备虚拟化功能,实际的操作系统由VMM来提供,VMM通常是宿主机操作系统独立的内核模块,通过调用宿主机操作系统的服务来获得资源,实现处理器,内存和I/O设备的虚拟化.

比如 KVM 技术就是其中的佼佼者,KVM 技术可以说是云计算最核心的技术了,后面会经常用到。一般 KVM 只负责 CPU 和内存的虚拟化,I/O 的虚拟化则由另外一个技术来完成,即 Qemu。

 

3.混合模式 

混合模型是两种模式的汇合体.VMM依然位于最底层,拥有所有的物理资源.VMM会让出大部分I/O设备的控制权,交由一个运行在特权虚拟机中的特权操作系统来控制VMM的虚拟化功能也被分担,处理器和内存的虚拟化依然由VMM来完成,而I/O的虚拟化则由VMM和特权操作系统共同合作完成.

Xen是一款基于GPL授权的开源虚拟机软件,起源于英国剑桥大学,属于混合模型,基于Xen的虚拟化产品有Ctrix, Redhat, Novell等.

结束语 

上面粗略的介绍了云计算的概念和虚拟化技术,本系列文章的重点是从零开始学习虚拟化。

接下来的文章会着重介绍KVM和qemu,并且一步一步和大家如何从零开始搭建一个虚拟化系统。

此外还会涉及到编译和调试qemu的相关文章。希望大家会喜欢这一系列的文档.由于本人也是刚接触

虚拟化不久难免有些错误,所以还请见谅