初识-虚拟化技术

虚拟化技术简介。

什么是虚拟化?

  虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,本质上是软/硬件层的抽象。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化的目的

  虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件,简单来说就是将底层资源进行分区,并向上层提供特定的和多样化的执行环境。

  通过一个简单明了的例子来进行说明为什么需要虚拟化?

  生鲜市场有很多买东西的商贩(企业),他们需要一个库房(服务器)来存放和处理这些商品。但是鱼呀、肉啊都需要低温才可以保鲜,所以得有制冷机(操作系统),主流的制冷机有 Windows 制冷机和 Linux 制冷机两种,配备了制冷机的库房就可以正常工作啦!最初的冷库就是这个样子:

12-1

  可是问题来了,各种库藏品都很矫情,它们对温度的要求不一致,放在一起还会串味儿,鸡腿变成了咸鱼口味,冰激凌有了小龙虾味儿。

  有个叫 VMware 的泥瓦匠想了个办法,把库房隔成很多叫做“虚拟机”的小库房,每个房间放一个制冷机,这样就再也不怕串味儿,每个小房间的温度独立可控,鱼呀虾呀表示很 Happy。这就叫做冷库虚拟化技术。

12-2

  原本是个挺完美的方案了,偏偏有人爱吹毛求疵瞎 BB,比如老板就觉得每个隔间都要放制冷机太占地方而且又费电,总想着找点别的办法。

  好了,故事先说到这里。后续的博客中再介绍改进的办法,这一篇主要关注虚拟化技术的基础。

虚拟化的原理

  在 OS 中加入一个虚拟化层(VMM),虚拟化层可以对下层(HostOS)硬件资源(物理CPU、内存、磁盘、网卡、显卡等)进行封装、隔离,抽象为另一种形式的逻辑资源,再提供给上层(GuestOS)使用。所以你可以理解 VMM 其实就是联系 HostOS 和 GuestOS 的一个中间件(如下图),当然虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象为一份。

12-3

  虚拟机通常叫做客户机(Guest),物理机叫宿主机(Host),VMM(Virtual Machine Monitor,虚拟机监控系统,也叫 Hypervisor)处在中间层,既要负责对虚拟资源的管理,包括虚拟环境的调度,虚拟机之间的通信以及虚拟机的管理等,又要负责物理资源的管理,包括处理器、中断、内存、设备等的管理,此外,还要提供一些附加功能,包括定时器、安全机制、电源管理等。

虚拟化的实现方式

  VMM 根据平台类型和实现结构有两种不同的分类(如下图),按平台类型可以分为全虚拟化和半虚拟化,按实现结构可分为 Hypervisor 模型和宿主模型。

12-4

按平台类型分

12-5

  • 全虚拟化

  全虚拟化也称为原始虚拟化技术,Hypervisor 运行在裸硬件上,充当主机操作系统,而由 Hypervisor 管理的虚拟服务器运行客户端操作系统(Guest OS)。该模型使用 VMM 完全模拟出一个跟物理主机完全一样的环境,VMM 在 Guest 操作系统和裸硬件之间用于工作协调,一些受保护指令必须由 Hypervisor(VMM 虚拟机管理程序)来捕获处理。既 VMM 会为 GuestOS 抽象模拟出它所需要的包括 CPU、磁盘、内存、网卡、显卡等抽象硬件资源,所以全虚拟化的 GuestOS 并不会知道自己其实是一台虚拟机。

  但是,全虚拟化实现非常困难,首先,这需要硬件的支持,而硬件在初期设计的时候,没有那么远的前瞻性,可以预想到为虚拟化提供支持,其次,指令的复杂性,即使通过模拟的方式也很难做到全部指令都模拟。所以,就需要借助其他的一些技术来辅助虚拟化。全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor 需要占用一些资源。典型的全虚拟化软件有:VMWare、Hyper-V、KVM-x86(复杂指令集)。

  完全虚拟化是处理器密集型技术,因为它要求 Hypervisor 管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户操作系统,让它以为自己运行在虚拟环境下,能够与 Hypervisor 协同工作,这种方法就叫半/准虚拟化。

  • 半虚拟化

  半虚拟化也叫准虚拟化,是另一种类似于全虚拟化的技术,它使用 Hypervisor 分享存取底层的硬件,但是它的 Guest OS 集成了虚拟化方面的代码。半虚拟化需要 Guest 操作系统做一些修改,使 Guest 操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。优点是性能高,经过准虚拟化处理的服务器可与 Hypervisor 协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。

  其实现方式有:修改内核,通告被虚拟化出来的操作系统它是运行在虚拟化技术软件之上的,虚拟化出来的操作系统上执行的进程还是运行在真实硬件上,性能还是很好。半虚拟化除了修改内核外还有另外一种实现方法–在每一个 GuestOS 中安装半虚拟化软件:VMTools、RHEVTools。典型的半虚拟化软件有:Xen、KVM-PowerPC(简易指令集)。

按实现结构分

12-6

  • Hypervisor 模型

  VMM 既是操作系统,也是虚拟化软件,也就是集成了虚拟化功能的操作系统,对上为 Guest 提供虚拟化功能,对下管理着所有物理资源,它的优点就是效率高,虚拟机的安全性只依赖于 VMM,缺点就是管理所有的物理资源,意味着 VMM 要承担很多的开发工作,特别是驱动层面的开发,我们知道硬件的 I/O 设备是很多的,这些设备都要有对应的驱动来设配才能为虚拟机提供功能。

  • 宿主模型

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

成熟的虚拟化技术

VirtualBox

  Oracle公司的直接基于 Intel VT 及 AMD-V 的虚拟机管理软件。

VMware Workstation

  Vmware 公司的基于 Vmware 虚拟技术的虚拟机管理软件。

KVM

  KVM 是一个轻量级的虚拟化管理程序模块,该模块主要来自于 Linux 内核。KVM 是一个全虚拟化的解决方案。可以在 x86 架构的计算机上实现虚拟化功能。但 KVM 需要 CPU 中虚拟化功能的支持,只可在具有虚拟化支持的 CPU 上运行,即具有 VT 功能的 Intel CPU 和具有 AMD-V 功能的 AMD CPU。

XEN

  Xen 也是 Linux 下的一个虚拟化解决方案,但它是一个外部的 Hypervisor 程序(虚拟机管理程序);它能够控制虚拟机和给多个客户机分配资源。Xen 的实现方法是运行支持 Xen 功能的 kernel,这个 kernel 是工作在 Xen 的控制之下,叫做 Domain0,使用这个kernel启动机器后,你可以在这个机器上使用 qemu 软件,虚拟出多个系统。

  KVM 与 XEN 对比:

两者区别 Xen KVM
问世时间 2003年 2007年
支持企业 Citrix、Novell、Oracle、Sun、Ret Hat(RHEL5)和Virtual Iron Redhat、Ubuntu等
支持的虚拟化技术 全虚拟化、半虚拟化 全虚拟化
支持架构 x86、IA64和AMD、Fujitsu、IBM、Sun等公司的ARM,以及x86/64 CPU商家和Intel嵌入式的支持 支持虚拟化的CPU
支持操作系统 UNIX、Linux和Microsoft Windows UNIX、Linux和Microsoft Windows
动态迁移 支持 支持(以前不支持)
内核支持 需要对内核打补丁 内置在内核中

  参考资料:

[1] 【炸裂的云计算-01】虚拟化原理和分类

[2] 虚拟化技术总览

[3] 虚拟化技术详解

[4] 虚拟机是怎么实现的?

[5] 虚拟化、(完)全虚拟化、半虚拟化和准虚拟化技术个人总结

坚持原创技术分享,您的支持将鼓励我继续创作!