虚拟化分类

寄居虚拟化架构

寄居虚拟化架构指在宿主操作系统之上安装和运行虚拟化程序,依赖于宿主操作系统对设备的支持和物理资源的管理。类似vmware workstation

裸金属虚拟化架构

裸金属虚拟化架构指直接在硬件上面安装虚拟化软件,再在其上安装操作系统和应用,依赖虚拟层内核和服务器控制台进行管理。

操作系统虚拟化

容器

比较

比较

寄居虚拟化

裸金属

系统虚拟

优点

简单、易于实现、开发难度点

虚拟化不依赖宿主机操作系统支持多种操作系统性能极强

简单、易于实现管理开销低

缺点

管理开销大、性能损耗大

虚拟层内核开发难度大

多容器共享同一操作系统

厂家

Vmware workstation、Oracle virtual box

Microsoft hyper-v、Citrix xen、Vmware vsphere ESXI

docker

计算资源的虚拟化,可以归结为三个方面

  1. CPU虚拟化
  2. 内存虚拟化
  3. IO虚拟化
    其中I/O虚拟化,又可以引申出两个重要的分支 存储虚拟化,网络虚拟化
    存储虚拟化 -> 1、裸设备.逻辑卷 2、存储设备虚拟化 3、文件系统+主机存储虚拟
    网络虚拟化 -> 1、虚拟网卡,端口 2、虚拟交换机

虚拟化技术分类 对象分类

分类

目的

CPU虚拟化

目标是使虚拟机上的指令能被正常执行,且效率接近物理机

内存虚拟化

目标是能做好虚机内存空间之间的隔离,使每个虚机都认为自己拥有了整个内存地址,且效率也能接近物理机

IO虚拟化

目标是不仅让虚机访问到他们所需要的IO资源,而且要做好它们之间的隔离,更重要的是减轻由于虚拟化所带来的开销

虚拟化技术分类 技术过程分类

分类

目的

全虚拟化

使用VMM实现CPU、内存、设备IO的虚拟化,而guest OS和计算机系统硬件都不需要进行修改。该方式兼容性好,但会给处理器带来额外的开销

半虚拟化

使用VMM实现CPU和内存虚拟化,设备IO虚拟化由guest OS实现。需要修改guest OS,使其能够与VMM协同工作。该方式兼容性差,但性能较好。

硬件辅助虚拟化

借助硬件(主要是处理器)的支持来实现高效的全虚拟化

开源虚拟化架构基础

kvm框架

KVM虚拟化的核心主要由以下两个模块组成:

  1. KVM内核模块,它属于标准Linux内核的一部分.是一个专门提供虚拟化功能的模块,主要负责CPU和内存的虚拟化,包括:客户机的创建、虚拟内存的分配、CPU执行模式的切换、vCPU寄存器的访问、vCPU的执行。
  2. QEMU用户态工具,它是一个普通的Linux进程,为客户机提供设备模拟的功能. 包括模拟BIOS, PCI/PCIE总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过 ioctl系统调用与内核态的KVM模块进行交互。

kVM 工作原理

用户模式的qemu利用libkvm通过ioctl进入内核模式,kvm模块未虚拟机创建虚拟内存,虚拟CPU后执行VMLAUCH指令进入客户模式。加载Guest OS并执行。如果Guest OS 发生外部中断或者影子页表缺页之类的情况,会暂停Guest OS的执行,退出客户模式出行异常处理,之后重新进入客户模式,执行客户代码。如果发生I/O事件或者信号队列中有信号到达,就会进入用户模式处理。

QEMU

QEMU原本就是一个著名的开源虚拟机软件项目,而不是KVM虚拟化软件的一部分。 与KVM不同,QEMU最初实现的虚拟机是一个纯软件的实现,通过二进制翻译来实现虚 拟化客户机中的CPU指令模拟,所以性能比较低 但是,其优点是跨平台,QEMU支持在 Linux、Windows、FreeBSD , Solaris, MacOS等多种操作系统上运行,能支持在QEMU本 身编译运行的平台上就实现虚拟机的功能,甚至可以支持客户机与宿主机并不是同一个架构 (比如在x86平台上运行ARM客户机)。作为一个存在已久的虚拟机监控器软件,QEMU的 代码中有完整的虚拟机实现,包括处理器虚拟化、内存虚拟化.以及KVM也会用到的虚拟 设备模拟(比如网卡、显卡、存储控制器和硬盘等)。

libvirt中的三个重要概念

节点:是一个物理机器,上面可能运行着多个虚拟化客户机。Hypervisor和domain都运行在节点上。
Hypervisor:虚拟机监控器(VMM),如kvm,xen,vmware等,它可以虚拟化一个节点让其运行多个客户机。
域(domain):是在hypervisor上运行的一个客户机操作系统实例。

Virsh工具

一些控制方法