虚拟化技术原理

3. 2 虚拟化技术原理

到目前为止,虚拟化技术的各方面都有了进步,虚拟化也从纯软件的虚拟化逐深入到处理器级虚拟化,再到平台级虚拟化乃至输入/输出级虚拟化。对数据中心来说,虚拟化可以节约成本,最大化利用数据中心的容量和更好的保护数据。虚拟化技术已经成为私有云和混合云设计方案的基础。
本节将简单地介绍虚拟化技术原理,包括虚拟机的原理、CPU虚拟化原理、内存虚拟化原理以及网络虚拟化原理。

3. 2. 1 虚拟机技术原理

虚拟机(Virtual Machine, VM) 是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。简单地说,虚拟机就是通过软件在宿主机上虚拟出一台计算机。虚拟机技术是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以
比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式、地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和数据存储。在实际的生产环境中,虚拟机技术主要用来解决云数据中心和高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化地利用物理硬件。即将多个操作系统整合到一台高性能服务器上,最大化利用硬件平台的所有资源,用更少的投入实现更多的应用,还可以简化IT 架构,降低管理资源的难度,避免IT 架构的非必要扩张。而且虚拟机的真正硬件无关性还可以实现虚拟机运行时迁移,实现真正的不间断运行,从而最大化保持业务的持续性,不用为购买超高可用性平台而付出高昂的代价。
虚拟机技术实现了一台计算机同时运行多个操作系统,而且每个操作系统中都有多个程序运行,每个操作系统都运行在一个虚拟的CPU或虚拟主机上。虚拟机技术需要 CPU、主板芯片组、BIOS和软件的支持,如VMM软件或者某些操作系统本身。虚拟机技术的核心是虚拟机监视器VMM (Virtual Machine Monitor) , VMM也称为Hypervisor. VMM的作用是向底层分配访问宿主机的硬件资源,向上管理虚拟机的操作系统和应用程序。它是一个宿主程序,该程序是一层位于操作系统和计算机硬件之间的代码,用来将硬件平台分割成多个虚拟机,实现一台计算机支持多个完全相同的执行环境。每个用户都会感觉到自己在一台独立的、与其他用户相隔离的计算机上进行操作,尽管事实上为每个用户提供服务的都是同一台机器。在此种情况下,一台虚拟机就是由一个潜在的控制程序管理的操作系统。VMM为每个客户操作系统虚拟一套独立于实际硬件的虚拟硬件环境(包括处理器、内存、I/O 设备等)。VMM采用某种调度算法在各个虚拟机之间共享CPU, 如采用时间片轮转调度算法。
虚拟机系统与实际的计算机操作系统没有区别,也会感染病毒,但是由于虚拟机是封闭的虚拟环境,如果虚拟机不与宿主机连接,则不会受宿主机病毒的影响。

3. 2. 2 CPU 虚拟化原理

首先,CPU虚拟化的目的是为了允许让多个虚拟机可以同时运行在VMM中。CPU虚拟化技术是将单CPU模拟为多CPU, 让所有运行在VMM之上的虚拟机可以同时运行,并且它们相互之间都是独立的,互不影响的,以提高计算机的使用效率。在计算机体系中,CPU是计算机的核心,没有 CPU 就无法正常使用计算机,所以,CPU 能否正常被模拟成为虚拟机能否正常运行的关键。
从CPU设计原理上来说,CPU主要包含三大部分:运算器、控制器以及处理器寄存器。每种CPU都有自己的指令集架构(Instruction Set .Architecture, ISA) , CPU 所执行的每条指令都是根据ISA提供的相应的指令标准进行的。ISA主要包含两种指令集:用户指令集(User ISA) 和系统指令集(System ISA) .用户指令集一般指普通的运算指令,系统指令集一般指系统资源的处理指令。不同的指令需要有不同的权限,指令需要在与其相对应的权限才能体现指令执行效果。在X86的体系框架中,CPU指令权限一般分为4种,ring0、1、2、3, 如图3-6所示。
最常用的 CPU 指令权限为0与3: 权限为0的区域的指令一般只能内核可以运行,而权限为3的指令则是普通用户运行。而权限为1、2的区域一般被驱动程序所使用。想要从普通模式(权限为3) 进入权限模式(权限为0) 需要有以下三种情况之一发生:
异步的硬件中断,如磁盘读写等。
系统调用,如int、call等。
异常,如 page fault等。
从上面内容可以看出,要实现CPU 虚拟化,主要是要解决系统ISA的权限问题。普通的ISA 不需要模拟,只需保护CPU运行状态,使得每个虚拟机之间的状态分隔即可。而需要权限的ISA 则需要进行捕获与模拟。因此要实现CPU的虚拟化,就需要解决以下几个问题:
所有对虚拟机系统 ISA 的访问都要被 VMM以软件的方式所模拟。即所有在虚拟机上所产生的指令都需要被 VMM所模拟。
所有虚拟机的系统状态都必须通过VMM保存到内存中。
所有的系统指令在VMM处都有相对应的函数或者模块来对其进行模拟。
CPU 指令的捕获与模拟,是解决 CPU 权限问题的关键。如图3-7所示。
虚拟化技术原理_第1张图片
当然真实的情况没有那么简单,并不是所有的CPU 框架都支持类似的捕获,而且捕获这类权限操作所带来的性能负担可能是巨大的。并且,在指令虚拟化的同时,也需要实现CPU 在物理环境中所存在的权限等级,即虚拟化出 CPU 的执行权限等级因为没有了权限的支撑,指令所执行出
来的效果可能就不是想要得到的效果了。
为了提高虚拟化的效率与执行速度,VMM实现了二进制转换器BT (Binary Translator) 与翻译缓存 TC (Translation Cache) .BT负责指令的转换,TC用来储存翻译过后的指令。BT 在进行指令转换一般有以下几种转换形式。

  1. 对于普通指令,直接将普通指令拷贝到TC中。这种方式称为“识别(Ident) ”转换。
  2. 对某些需要权限的指令,通过一些指令替换的方式进行转换,这种方式称为"内联(Inline) ”转换。
  3. 对其他需要权限的指令,需要通过模拟器进行模拟,并将模拟后的结果转交给VM才能达到虚拟化的效果。这种方式称为“呼出” (Call-out) 转换。
    因为指令需要进行模拟,所以有些操作所消耗的时间比较长,在全虚拟化的情况下,它的执行效果会比较低下,因此,才出现了半虚拟化与硬件辅助虚拟化两种另外的虚拟化技术,用于提高虚拟机运行的效率。虚拟化技术原理_第2张图片

3. 2. 4 网络虚拟化原理

网络虚拟化提供了以软件的方式实现的虚拟网络设备,虚拟化平台通过这些虚拟网络设备可以实现与其他网络设备进行通信。而通信的对象可以是真实的物理网络设备,也可以是虚拟的网络设备。所以,网络虚拟化是要实现设备与设备之间的与物理连接没有关系的虚拟化连接。因此,网络虚拟化最主要解决的问题有两个,网络设备与虚拟连接。虚拟化的网络设备可以是单个网络接口,也可以是虚拟的交换机以及虚拟的路由器等。在同一个局域网内,任何两个不同的虚拟设备都可以实现网络的连接;如果不是在同一个网内,则需要借助到网络协议才能实现网络的正常连接与通信,如VLAN (Virtual Local Area Network) 、VPN (Virtual Private Network) 等协议。
以 VLAN 为例简单说明网络虚拟化的连接与通信。VLAN 将网络结点按需划分成若干个逻辑工作组,每一个逻辑工作组就对应一个虚拟网络。每一个虚拟网络就像是一个局域网,不同的虚拟网络之间相互独立,无法连接与通信。如果需要通信,则需要路由设备的协助,转发报文才能正常通信。由于这些分组都是逻辑的,所以这些设备不受物理位置的限制,只要网络交换设备支持即可。

3. 3 常见的虚拟化技术解决方案

随着虚拟化技术的发展与应用,市场上出现了多种虚拟化技术解决方案。下面将对这些常见的虚拟化技术解决方案进行概述。

3. 3. 1 OpenStack

OpenStack (https: //www.openstack.org/) 是由NASA (美国国
家航空航天局)和 Rackspace 合作研发并发起的、以Apache 许可证授权的自由软件和开放源代码项目,其Logo如图 所示OpenStack是一款开源的云平台,通过相应的API与驱动对虚拟机进行管理,它几乎支持市面所有类型的虚拟化环境。OpenStack 本身不提供虚拟化功能,虚拟化由VMM提供,Openstack则是根据相应的API 对VMM 进行管理。Openstack负
责平台的搭建与周边功能的完善。OpenStack 设计的初衷就是适应分布式应用的架构,应用的组件在该平台中可以跨越多个物理设备或虚拟设备。这些类型的应用也被设计成随着规模的增加,可以通过添加应用实例或者重新平衡应用实例间的负载。它要实现的目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。
从逻辑上来看,OpenStack 由三个部分组成:控制模块,网络模块及计算模块。控制模块主要运行一些API接口服务、消息队列、数据库管理模块及Web的接口等;网络模块主要提供为各个虚拟机提供网络服务;计算模块则主要负责处理消息、控制虚拟机等操作。
从OpenStack的组成来看,它包含了众多的模块,并且这些模块都可以分布式部署。主要包含以下几个重要模块:Nova、Keystone、Ceilometer、Horizon、Glance、Neutron、Cinder及Swift等。Nova主要提供计算功能;Keystone 负责认证与授权;Ceilometer用于资源与系统运行情况的监控;Horizon 为用户提供了方便管理的Web平台;Neutron负责网络环境的搭建与虚拟化;Glance用于镜像文件的管理;Cinder 负责块存储,可以为用户提供 SaaS (Storage asa Service, 存储即服务)服务;Swift 同样负责存储,但它主要负责数据对象、镜像、数据备份等平台所用的数据存储,同样也可以对Cinder的数据进行备份存储。
虚拟化技术原理_第3张图片

3. 3. 2 KVM

基于内核的虚拟机(Kemel-based Virtual Machine, KVM) 是开源软件,其
所示,其官网地址为:https: //www.linux-kvm.org/page/Main Page.KVM是一款基于X86 架构,且硬件支持虚拟化技术的Linux全虚拟化解决方案。硬件支持虚拟化技术由CPU厂商提供,目前市面上有两种技术方案,Intel-VT与 AMD-V.KVM 首次被并入 Linux 的内核版本为2. 6. 20, 在 RHEL 5. 4中推出,并于2007年2月5日正式发布。只要硬件支持 Intel- VT或AMD-V就可以使用KVM.可以通过命令 grep-E"vmxlsvm"/proc/cpuinfo 来确定当前硬件平台的支持情况.虚拟化技术原理_第4张图片

3.3.3Huper-V

Huper-V 设计的目的是为了广大的用户提供更为熟悉以及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。Huper-V 采用微内核的架构,兼顾了安全性和性能的要求。由于 Hyper-V 底层的 Hypervisor 代码量很小,不包含任何第三方的驱动,非常精简,安全可靠、执行效率高,能充分利用硬件
盗源,使虚拟机系统性能更接近真实系统性能。Hyper-V 采用基于 VMBUS (Virtual MachineBus) 的高速内存总线架构,所有来自虚拟机的硬件请求,不论是显卡、鼠标、键盘或者其他设备,都可以直接经虚拟化服务客户机(Virtualization Service Consumer, VSC) , 通过VMBUS 总线发送到根分区的虚拟化服务提供者(Virtualization Service Provider, VSP) , VSP则调用对应的设备驱动直接访问硬件,中间不再需要通过Hypervisor的管理。这种方式下,每个虚拟机的硬件请求,不再需要经过用户模式、内核模式的多次上下文切换转移,从而极大地提高了运行效率。
如果想要在 Hyper-V 中运行 Linux 操作系统也是没有问题的,只需要安装与 Linux 相关的组件即可。这些组件可以是支持 Xen 的 Linux 内核,也可以是专门为 Linux 设计的集成组件。当然,这些组件本身就已经集成了相关的驱动,所以用户不再需要关心在 Hyper-V中的驱动相关的问题。在安装完成这此组件后,Hyper-V 可以很完美地支持 Linux.
Hyper-V 可以采用半虚拟化和全虚拟化两种模拟方式创建虚拟机。半虚拟化方式要求虚
玖机与物理主机的操作系统(通常是版本相同的 Windows) 相同,以使虚拟机具备高性能:全虚拟化方式要求CPU 支持全虚拟化功能,如 Inter-VT 或AMD-V, 以便能够创建使用不间的操作系统的虚拟机,如Linux 或者 Mac OS.
虚拟化技术原理_第5张图片

3. 3. 4 VMware

VMware (https: //www.vmware.com/) 旗下有很多虚拟化产品,对不同的需求有不同的产
品系列,如 VMware ESX/ESXi、VMware Workstation、VMware Player等。

  1. VMware ESXi
    VMware ESXi前身为 VMware ESX (Elastic Sky X) , 是一款企业级虚拟化产品,其Logo
    VMware (https: //www.vmware.com/) 旗下有很多虚拟化产品,对不同的需求有不同的产品系列,如 VMware ESX/ESXi、VMware Workstation、VMware Player等。
  2. VMware ESXi
    VMware ESXi前身为 VMware ESX (Elastic Sky X) , 是一款企业级虚拟化产品,其Logo 虚拟化技术原理_第6张图片

3. 3. 5 Xen

Xen (https: //www.xenproject.org/) 是剑桥大学的开源项目,是最早的开源虚拟化引擎,在由被 Intel 支持的 Linux基金组织开发,其Logo如图所示。Xen 采用的架构是裸金属架构,它是直接运行在硬件之上,使用微内核实现。它支持在同一台设备上同时并行执行多个不同的操作系统实例。Xen支持IA-32、X86-64以及ARM平台。目前来说,Xen是市面上唯一一款裸金属架构的开源虚拟化引擎。它最常被用到的地方是服务器虚拟化、基础设施即服务(IaaS) .Xen 的特点与优势是非常显著的。虚拟化技术原理_第7张图片
1)内核非常小,接口也少。因为是微内核设计,使用了非常少的内存,接口数据也少,所以它比其他的虚拟化架构更加安全,更加稳定。
2)Xen 支持各种各样的操作系统,包括 Windows、NetBSD及OpenSolaris 等操作系统。在Xen 上面安装最多的操作系统是Linux.
3) 取动隔离。Xen 框架允许系统中主要的设备驱动都保持在虚拟机本身内部运行。如果其中一个驱动运行异常,只需要将运行驱的虚拟机重启或虚拟机内部相应的驱动模块重启便可,这个重启不会影响到系统上正在运行的其他系统。它们都是相互独立,互不影响的。
4) 半虚拟化。因为是Xen半虚拟化的,所以相应的 Guest OS 需要做一些修改与调整,这可以使得它的运行效率比全虚拟运行的效率高了很多。另外,它也可以运行在一些不支持虚拟化的硬件设备中。最后,Xen 也支持全虚拟化,但只支持硬件辅助的全虚拟化,即硬件需要支持Intel-VT或AMD-V等。Xen目前运行在X86架构的机器上,需要P6或更新的 CPU (如 Pentium Pro、Celeron、Pentium II, Pentium III、Pentium IV. Xeon AMD Athlon、AMD Duron) 才可以运行。Xen 支持多处理器,并且支持超线程(Simultaneous Multithreading, SMT) .Xen以高性能、占用资源少著称,赢得了IBM、AMD、HP、Red Hat 和 Novell 等众多世界级软硬件厂商的高度认可和大力支持,已被国内外众多企事业用户用来搭建高性能的虚拟化平台。

3. 3. 6 Docker

Docker (https: //www.docker.com/) 最初是dotCloud公司创始人Solomon Hykes 发起的一个公司内部项目。Docker是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以Apache 2. 0授权协议开源,其主要项目代码在 GitHub上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立了推动开放容器联盟。Docker的Logo 如图所示。虚拟化技术原理_第8张图片
Docker是一个开源的应用容器引擎,在容器里面运行的实例都是相互独立的,属于操作系统虚拟化的一种。Docker 让开发者可以将应用以及依赖包打包到一个可移植的容器中,然后发布到任何流行的操作系统上。最重要的是,这些容器不依赖于任何语言、框架、包括系统。镜像(打包文件)是一个轻量级的、独立的可执行包,而这个包已经包含了它运行时需要的所有依赖,包括软件、库、环境与配置文件等。而容器则是一个运行时的镜像实例,即镜像加载到了内存中运行。这个镜像的运行完全是与主机环境相隔离开的,它除了访问主机的文件与端口外,与主机没有其他任何关系。简单来说,容器类似于沙箱,所有沙箱的运行相互不影响,系统的其他进程运行也不会影响到沙箱,它们相互之间不会有任何接口,相互独立。但沙箱与系统相关,而 Docker 实现的容器则与系统无关,它所打包的镜像已经包含了镜像所需要的所有依赖,所以只需要一次打包,所有Docker的环境都可使用。同样的,Docker 的使用与部署都很容易,几乎没有性能开销,Docker 可以很容易地部署到本地或数据中心。因为容器是直接运行在本地主机内核之上的,相对来说,在容器里面的运行效率比在虚拟机里面的效率更加高效,每一个容器的运行就是一个单独的进程,它们所消耗的内存也比虚拟机所消耗的内存更少。

你可能感兴趣的:(虚拟化技术原理)