虚拟化技术介绍
目录
一、虚拟化技术概览
1. 虚拟化技术简介
什么是虚拟化
虚拟化的含义很广泛。将任何一种形式的资源抽象成另一种形式的技术都是虚拟化,是资源的一种逻辑表示。解除了物理硬件和操作系统之间的紧耦合关系
服务器虚拟化前到虚拟化后解决
-
资源使用率低,资源得到共享
-
硬件和操作系统解耦,一台服务器能够运行多台VM
虚拟化中的重要概述
(1)Guest OS:虚拟机操作系统
(2)Guest Machine:虚拟机
(3)Hypervisor:虚拟化软件层/虚拟机监控机(VMM)
(4)Host OS:运行在物理机之上的OS
(5)Host Machine:物理机
虚拟化的类型
(1)全虚拟化
-
使用VMM实现CPU、内存、设备I/O的虚拟化,而Guest OS和计算机系统硬件都不需要进行修改
-
该方式兼容性好,但会给处理器带来额外开销,会对CPU资源占用过多
(2)半虚拟化
-
使用VMM实现CPU和内存虚拟化,设备I/O虚拟化由Guest OS(虚拟机操作系统)实现。需要修改Guest OS,使其能够与VMM协同工作。
-
该方式兼容性差,但性能较好,需要修改操作系统,开源(Linux),性能相对于全虚拟化会好很多
(3)硬件辅助虚拟化
-
借助硬件(主要是处理器CPU)的支持来实现高效的全虚拟化。该方式不需要修改Guest OS,兼容性好
-
通过硬件(处理器CPU)完成高效虚拟化功能,该技术将逐渐消除软件虚拟化技术之间的差别,成为未来的发展趋势
虚拟化的特点
(1)分区:在单一物理服务器上同时运行多个虚拟机
(2)隔离:在单一物理服务器上的多个虚拟机之间相互隔离
(3)封装:整个虚拟机执行环境封装在独立文件中,可以通过移动文件的方式来迁移该虚拟机
(4)相对于硬件独立:虚拟机无需修改,即可在任何服务器上运行
虚拟机的优势
(1)传统物理服务器
-
操作系统与物理服务器绑定
-
难以迁移,可靠性难以控制
-
难以扩展,资源利用率低
-
空间占用高,难以管理
(2)虚拟化服务器
-
操作系统与物理服务器分离(解耦)
-
易于迁移、扩展,资源整合(资源共享)
-
标准化的虚拟硬件由一系列文件组成,易于保护(虚拟机皆文件)
CPU虚拟化
用户空间和内核空间
-
内核空间:所操作的一些动作都是属于高危操作或者要调用硬件资源的
-
指令级别:用户指令、内核指令,相对于Ring3~Ring0
(1)没有虚拟化
Ring3:用户应用程序
Ring2
Ring1
Ring0:OS(kernel)
(2)基于二进制翻译的全虚拟化:宁可错杀1000,也不放过1个的原则,将所有VM的指令全部捕获进行处理(虚拟机不知道自己是虚拟机)
Ring3:用户应用程序
Ring2
Ring1:Guest OS
Ring0:VMM,捕获、翻译、模拟Guest OS,虚拟机操作关机动作,会将指令发送给VMM,在VMM对这个指令进行处理
(3)CPU硬件辅助虚拟化:root模式(VMM),非root模式(运行虚拟机),服务器的CPU就能识别出哪些指令是root模式下发的,哪些指令是非root模式下发的(告诉虚拟机你就是虚拟机)
非root模式
Ring3:用户应用程序
Ring2
Ring1:Guest OS
Ring0:VMM,捕获、翻译、模拟Guest OS,虚拟机操作关机动作,会将指令发送给VMM,在VMM对这个指令进行处理
root模式
VMM
CPU和vCPU的对应关系:一个线程等于一个vCPU
内存虚拟化
把物理机的真实物理内存统一管理,包装成多份虚拟的内存动态分配给若干虚拟机使用
KVM通过内存虚拟化共享物理系统内存,动态分配给虚拟机
HPA(物理内存地址)--HVA(物理虚拟地址)--GPA(虚拟机物理地址)--GVA(虚拟机虚拟地址)
-
影子页表:一个映射表格,记录GVA实际使用的HPA的地址位置
I/O虚拟化
I/O虚拟化可以被看作是位于服务器组件的系统和各种可用I/O处理单元之间的硬件中间件层,使得多个Guest(虚拟机)可以复用有限的外设资源(虚拟出一个IO设备,在中间做一个指令的传输)
设备虚拟化(I/O虚拟化)的过程,就是模拟设备的这些寄存器和内存,截获Guest OS对IO端口和寄存器的访问,通过软件的方式来模拟设备行为
在QEMU/KVM中,客户机可以使用的设备大致可分为三类:
(1)模拟设备:完全由QEMU(虚拟化IO设备的工具)纯软件模拟的设备(I/O虚拟化-全虚拟化)
-
用软件完全模拟一个特定的设备
保持一样的软件接口,如:PIO、MMIO、DMA、中断等
可以模拟出跟系统中的物理设备不一样的虚拟设备
-
每次I/O操作需要多次上下文切换
VM<->Hypervisor
QEMU<->Hypervisor
-
软件模拟的设备不影响虚拟机中的软件栈
原生驱动
(2)Virtio设备:实现VIRTIO API的半虚拟化设备(I/O虚拟化-Virtio)
-
虚拟出特殊的设备
特殊的设备驱动,包括VM中的Front-end驱动和主机上的Back-end驱动
Front-end和Back-end驱动之间的高效通信
-
减少VM和主机的数据传输开销
共享内存
Batchen I/O
异步事件通知Eventfd轻量级进程间“等待/通知”机制
(3)PCI设备直接分配(I/O虚拟化-PCI设备直接分配)
-
相当于直接把一个物理I/O设备分配给了虚拟机,其他虚拟机都不能使用
2. 主流虚拟化技术介绍
Xen虚拟化简介
Xen的Hypervisor是服务器经过BIOS启动之后载入的首个程序,然后启动一个具有特定权限的虚拟机,称之为Domain 0(简称Dom0)。Dom0的操作系统可以是Linux或Unix,Domain 0实现对Hypervisor控制和管理功能。在所承载的虚拟机中,Dom0是唯一可以直接访问物理硬件(如存储和网卡)的虚拟机,它通过本身加载的物理驱动,为其他虚拟机(Domain U,简称DomU)提供访问存储和网卡的桥梁
会有一台管理虚拟机Domain0(首次创建的第一台虚拟机),其他虚拟机统称为DomainU,DomU在使用物理资源时(存储或网卡)它需要将指令交给Dom0去完成最终的资源调用
安全性会相对比较高,效率比较低
KVM虚拟机简介
(1)KVM是基于内核的虚拟机
(2)KVM中,虚拟机其实就是一个Linux进程,由CPU进行调度运行
(3)KVM本质是Linux内核中的虚拟化功能模块(程序)kvm.ko,利用Linux做大量事,如任务调度、内存管理与硬件设备交互等
(4)KVM运行在内核空间,提供CPU、内存的虚拟化,它本身不执行任何模拟。运行在用户空间的QEMU提供硬件I/O的虚拟化模拟
KVM与QEMU
在KVM虚拟化方案中,KVM主要用于管理CPU和内存的虚拟化,IO设备的虚拟化由QEMU来完成
QEMU是一个纯软件实现的开源(模拟)软件,它能够模拟整套虚拟机的实现,包括CPU、内存、IO设备、USB、网卡等
-
KVM它是LInux内核中的一个模块,其实就是一个程序/软件(VMM),只能管理CPU和内存资源
-
由物理处理器实现CPU、内存虚拟化功能,QMEU实现I/O设备虚拟化能力