虚拟化技术介绍
虚拟化(Virtualization)的含义很广泛。将任何一种形式的资源抽象成另一种形式的技术都是虚拟化,是资源的一种逻辑表示。解除了物理硬件和操作系统之间的紧耦合关系。
•虚拟化是云计算的基础。简单地说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的CPU、内存、IO硬件资源,但逻辑上虚拟机之间是相互隔离的。
•在计算机方面,虚拟化一般指通过对计算机物理资源的抽象,提供一个或多个操作环境,实现资源的模拟、隔离或共享等。
•本质上,虚拟化就是对硬件资源的一种抽象与模拟。通过空间上的分割、时间上的分时以及模拟,虚拟化可将一份资源抽象成多份,亦可将多份资源抽象成一份。
虚拟化中的重要概念
虚拟化架构
宿主虚拟化
很好理解,就是你想装虚拟化软件,需要先装一个操作系统
就比如 Windows系统上的 VMware Workstation VirtualBox 软件 ,Mac OS 上的 Parallels Desktop 软件
宿主虚拟化的 hypervisor 就像是安装在子操作系统上的一个应用,这种方式比裸机虚拟化的 hypervisor 提供更好的硬件兼容性,因为调用硬件的流程是 虚拟机内核 -> Hypervisor -> 操作系统 -> 硬件,但这也导致了宿主虚拟化的性能是要比裸机虚拟化差很多的
优点:
1、硬件兼容性好
2、使用方便,附加功能比较丰富
缺点:
1、性能差
裸金属虚拟化
这个不需要操作系统, 虚拟管理程序本身就是一个操作系统,例如:VMware ESXI 、Proxmox VE、Microsoft Hyper-V, 裸机虚拟化的性能是要优于宿主虚拟化的,一般IDC都是运行的这类系统
裸机型在虚拟化中Hypervisor直接管理访问硬件资源,不需要底层操作系统,也可以将Hypervisor看作是一个很薄的操作系统, hypervisor直接访问硬件资源,这个使得虚拟机能够获得更好的性能、扩展性与稳定性。
调用的流程是 虚拟机内核 -> Hypervisor -> 硬件
优点:
1、性能好,损耗极低
2、一般拥有资源管理、高可用性和安全方面的功能,比较适合企业数据中心
缺点:
1、硬件支持有限,因为hypervisor通常内置的设备驱动很有限,比如esxi
虚拟化类型(全虚/半虚/硬件辅助拟化)
分类 | 说明 |
---|---|
全虚拟化 | 使用VMM实现CPU、内存、设备I/O的虚拟化,而Guest OS和计算机系统硬件都不需要进行修改。该方式兼容性好,但会给处理器带来额外开销。 |
半虚拟化 | 使用VMM实现CPU和内存虚拟化,设备I/O虚拟化由Guest OS实现。需要修改 Guest OS,使其能够与VMM协同工作。该方式兼容性差,但性能较好。 |
硬件辅助虚拟化 | 借助硬件(主要是处理器)的支持来实现高效的全虚拟化。该方式不需要修改Guest OS,兼容性好。该技术将逐渐消除软件虚拟化技术之间的差别,成为未来的发展趋势。 |
虚拟化特点
•分区:分区意味着虚拟化层为多个虚拟机划分服务器资源的能力;每个虚拟机可以同时运行一个单独的操作系统(相同或不同的操作系统),使您能够在一台服务器上运行多个应用程序;每个操作系统只能看到虚拟化层为其提供的“虚拟硬件”(虚拟网卡、CPU、内存等),以使它认为运行在自己的专用服务器上。
•隔离:虚拟机是互相隔离的
▫一个虚拟机的崩溃或故障(例如,操作系统故障、应用程序崩溃、驱动程序故障,等等)不会影响同一服务器上的其它虚拟机。
▫一个虚拟机中的病毒、蠕虫等与其它虚拟机相隔离,就像每个虚拟机都位于单独的物理机器上一样。
▫可以进行资源控制以提供性能隔离:您可以为每个虚拟机指定最小和最大资源使用量,以确保某个虚拟机不会占用所有的资源而使得同一系统中的其它虚拟机无资源可用。
▫可以在单一机器上同时运行多个负载/应用程序/操作系统,而不会出现我们刚才讨论传统x86服务器体系结构的局限性时所提到的那些问题(应用程序冲突、DLL冲突等)。
•封装:封装意味着将整个虚拟机(硬件配置、BIOS配置、内存状态、磁盘状态、CPU 状态)储存在独立于物理硬件的一小组文件中。这样,您只需复制几个文件就可以随时随地根据需要复制、保存和移动虚拟机。
•相对于硬件独立:因为虚拟机运行于虚拟化层之上,所以只能看到虚拟化层提供的虚拟硬件;此虚拟硬件也同样不必考虑物理服务器的情况;这样,虚拟机就可以在任何x86服务器(IBM、Dell、HP等)上运行而无需进行任何修改。这打破了操作系统和硬件以及应用程序和操作系统/硬件之间的约束。
虚拟化优势
CPU虚拟化
•x86操作系统是设计成直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件。x86架构提供四个特权级别给操作系统和应用程序来访问硬件。Ring是指CPU的运行级别,Ring 0是最高级别,Ring 1次之,Ring 2更次之…… 就Linux+x86 来说:
▫操作系统(内核)需要直接访问硬件和内存,因此它的代码需要运行在最高运行级别Ring0上,这样它可以使用特权指令,控制中断、修改页表、访问设备等。
▫应用程序的代码运行在最低运行级别上Ring 3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从Ring 3到Ring 0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从Ring 0返回Ring 3。这个过程也称作用户态和内核态的切换。
•那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在Ring 0 的,客户操作系统就不能也在Ring 0 了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,但是没有执行权限是会出错的。所以这时候虚拟机管理程序(VMM)需要避免这件事情发生。VM通过VMM实现Guest CPU对硬件的访问,根据其原理不同有三种实现技术:
▫全虚拟化
▫半虚拟化
▫硬件辅助的虚拟化
CPU和vCPU的对应关系
•vCPU数量和物理CPU对应关系如图所示。
•以RH服务器使用2.6 GHz主频CPU为例,单台服务器有2个物理CPU,每颗CPU有8核,又因为超线程技术可以提供每个物理内核两个处理线程,因此每颗CPU有16线程,总vCPU数量为282=32个vCPU。总资源为32*2.6 GHz=83.2 GHz。(线程数等于vcpu的数量)
•虚拟机vCPU数量不能超过单台CNA节点可用vCPU数量。多个虚拟机间可以复用同一个物理CPU,因此单CNA节点上运行的虚拟机vCPU数量总和可以超过实际vCPU数量。
内存虚拟化
HPA(物理内存地址)–>GPA(虚拟机OS获取的地址)–>GVA(虚拟机应用程序获取的地址)
把物理机的真实物理内存统一管理,包装成多份虚拟的内存动态分配给若干虚拟机使用。
KVM通过内存虚拟化共享物理系统内存,动态分配给虚拟机。
•KVM中,虚机的物理内存即为qemu-kvm进程所占用的内存空间。KVM使用CPU辅助的内存虚拟化方式。
•内存虚拟化 – 影子页表:
▫由于宿主机MMU不能直接装载客户机的页表来进行内存访问,所以当客户机访问宿主机物理内存时,需要经过多次地址转换。即首先根据客户机页表把客户机虚拟地址(GVA)转换成客户机物理地址(GPA),然后再通过客户机物理地址(GPA)到宿主机虚拟地址(HVA)之间的映射转换成宿主机虚拟地址,最后再根据宿主机页表把宿主机虚拟地址(HVA)转换成宿主机物理地址(HPA)。而通过影子页表,则可以实现客户机虚拟地址到宿主机物理地址的直接转换。
▫Intel的CPU提供了EPT(Extended Page Tables,扩展页表)技术,直接在硬件上支持GVA->GPA->HPA的地址转换,从而降低内存虚拟化实现的复杂度,也进一步提升内存虚拟化性能。
•KVM为了在一台机器上运行多个虚拟机,需要增加一个新的内存虚拟化层(客户机物理地址空间),这个地址空间不是真正意义上的物理地址空间,它们之间还有一层转换。客户机虚拟地址(GVA)到客户机物理地址(GPA)的转换。
•但是客户操作系统不能直接访问实际机器内存,因此VMM需要负责映射客户物理内存到实际机器内存(GPA ->HPA)。
I/O虚拟化
-
全虚拟化
-
- VM–>Hypervisor–>QEMU(Domain0)–>IO设备
-
半虚拟化
-
- VM–>QEMU(Domain0)–>IO设备
-
设备直通 (硬件辅助虚拟化)
-
- VM–>IO设备
I/O虚拟化可以被看作是位于服务器组件的系统和各种可用I/O处理单元之间的硬件中间件层,使得多个guest可以复用有限的外设资源。
设备虚拟化(I/O虚拟化)的过程,就是模拟设备的这些寄存器和内存,截获Guest OS对IO端口和寄存器的访问,通过软件的方式来模拟设备行为。
在QEMU/KVM中,客户机可以使用的设备大致可分为三类:
-
- 模拟设备:完全由QEMU纯软件模拟的设备
- Virtio设备:实现VIRTIO API的半虚拟化设备
- PCI设备直接分配(PCI device assignment)
•I/O虚拟化需要解决两个问题:
▫ 设备发现:
▪需要控制各虚拟机能够访问的设备;
▫ 访问截获:
▪通过I/O端口或者MMIO对设备的访问;
▪设备通过DMA与内存进行数据交换。
•模拟I/O设备方式的优点是对硬件平台依赖性较低、可以方便模拟一些流行的和较老久的设备、不需要宿主机和客户机的额外支持,因此兼容性高;而其缺点是I/O路径较长、VM-Exit次数很多,因此性能较差。一般适用于对I/O性能要求不高的场景,或者模拟一些老旧遗留(legacy)设备(如RTL8139的网卡)。
•Virtio半虚拟化设备方式的优点是实现了VIRTIO API,减少了VM-Exit次数,提高了客户机I/O执行效率,比普通模拟I/O的效率高很多;而其缺点是需要客户机中与Virtio相关驱动的支持(较老的系统默认没有自带这些驱动,Windows系统中需要额外安装Virtio驱动),因此兼容性较差,而且I/O频繁时的CPU使用率较高。
主流虚拟化技术介绍
xen虚拟化(虚拟机虚拟化)安全性
-
Domain0
-
- 处于特权级别的虚拟机
- 实现IO的虚拟化
- 管理DomainU
- 管理硬件
-
DomainU
-
- 普通用户虚拟机
KVM虚拟化(软件虚拟化)性能好—充分利用了CPU的硬件辅助虚拟化能力
-
KVM(Kernel-based Virtual Machine)是基于内核的虚拟机
-
架构
-
- 内核态:启用KVM.KO内核模块以实现CPU和内存的虚拟机
- 用户态:部署QEMU以实现IO虚拟机
-
KVM(Kernel-based Virtual Machine)是基于内核的虚拟机。
-
KVM本质是Linux内核中的虚拟化功能模块kvm.ko,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。
-
KVM是开源软件,于2007年2月被集成到Linux2.6.20内核中。
-
KVM中,虚拟机其实就是一个Linux进程,由CPU进行调度运行。
-
KVM运行在内核空间,提供CPU、内存的虚拟化,它本身不执行任何模拟。运行在用户空间的QEMU提供硬件I/O的虚拟化模拟。
KVM与QEMU
•KVM基本结构如上图。KVM已经是内核模块,被看作是一个标准Linux字符集设备(/dev/kvm)。QEMU通过Libkvm应用程序接口,用fd(文件描述符)通过ioctl向设备驱动来发送创建、运行虚拟机命令。设备驱动KVM会解析命令。
•KVM模块让Linux主机成为了一个虚拟机监视器(VMM),在原有执行模式基础上,增加了客户模式。在虚拟机运行时,三种模式的工作为:
▫客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下。
▫用户模式:代表用户执行I/O指令,QEMU运行在这个模式下,它用来为虚拟机模拟执行I/O类的操作请求。
▫内核模式:实现客户模式切换,处理因I/O或者其他指令引起的从客户模式退出动作(VM-Exit)。KVM模块工作在这个模式下。此模式下可以真正操作硬件,当Guest OS执行I/O类操作或特权指令操作时,需要向用户模式提交请求,然后由用户模式再次发起硬件操作请求给内核模式,从而真正操作硬件。
KVM工作原理
虚拟化平台管理工具 – Libvirt
Xen vs KVM
思考题
1.全虚拟化使用VMM实现CPU和内存虚拟化,设备I/O虚拟化由Guest OS实现。需要修改Guest OS,使其能够与VMM协同工作。该方式兼容性差,但性能较好。
A.正确
B.错误
2.Libvirt是Linux上的虚拟化库,主要目标是提供一种通用并且稳定的软件层,来管理物理主机上多种不同的虚拟化方式和虚拟主机,并支持远程管理。
A.正确
B.错误
KVM:Kernel-based Virtual Machine,基于内核的虚拟机
VMM:Virtual Machine Monitor,虚拟化软件层/虚拟机监控机
答案在下面
▫B
▫A
习题精讲
分区,隔离,封装,相对于硬件独立
以下关于虚拟化特点中隔离的描述,正确的是哪些项?
A.虚拟化的隔离使得一个虚拟机的崩溃或故障不会影响同—服务器上的其它虚拟机(正确答案)
B.隔离指对通过分区所建立的多个虚拟机采用逻辑隔离措施(正确答案)
C.隔离可以使服务器在同—时间运行多个操作系统(正确答案)
D.隔离不能进行资源控制
隔离特点:
可以进行资源控制以提供性能隔离:您可以为每个虚拟机指定最小和最大资源使用量,以确保某个虚拟机不会占用所有的资源而使得同一系统中的其它虚拟机无资源可用。
裸金属和宿主虚拟化
以下关于裸金属虚拟化的描述,正确的是哪些项?
A.裸金属虚拟化,Hypervisor直接调用硬件资源,不需要底层Host OS (正确答案)
B.裸金属虚拟化实现虚拟化层的内核开发难度小,相较于硬件辅助虚拟化易于实现
C.所有的虚拟机和虚拟资源都由时Hypervisor负责统一管理并分配(正确答案)
D.创建在裸金属虚拟化上的虚拟机不要求一定使用某个类型的操作系统(正确答案)
在裸金属虚拟化中,虚拟化层Hypervisor不可以直接调用硬件资源(错误)
KVM
KVM虚拟化平台专用的虚拟机磁盘格式的描述 VDI是Oracle的,VMDK是VMware的
闭源和开源虚拟化技术
主流的虚拟化技术有很多,一般分为开源和闭源两类,其中FusionCompute是闭源类虚拟化技术。
开源技术KVM和Xen
一类(裸金属)和二类(宿主)虚拟化技术
我们常见的 VMWare Workstation、VirtualBox、Parallels Desktop、Hyper-V等均属于二型 虚拟化 软件,他们需要运行于宿主操作系统。
而企业级 虚拟化 平台例如 VMWare vSphere、KVM、Hyper-V server 等则属于一型 虚拟化 ,他们直接运行于裸金属服务器。
RISC和CISC指令集
RISC,Reduced Instruction Set Computer,就是“精简指令运算集”
CISC,Complex Instruction Set Computer。就是“复杂指令运算集”
在RISC指令集架构的服务器中,敏感指令是虚拟化的一种特殊指令,是指将Guest OS中原本需要在Ring0模式下才能运行的特权指令剥夺特权后,交给VMM来执行的指令。