文章目录
- 虚拟化技术介绍
-
- 一、虚拟化基础概念
-
- [1. 什么是虚拟化](#1. 什么是虚拟化)
- [2. 重要概念(必背)](#2. 重要概念(必背))
- [3. 虚拟化发展史关键节点](#3. 虚拟化发展史关键节点)
- [4. 虚拟化三种类型(易考对比)](#4. 虚拟化三种类型(易考对比))
- [5. 虚拟化四大特点](#5. 虚拟化四大特点)
- [二、CPU 虚拟化](#二、CPU 虚拟化)
-
- [1. 需要解决的两个问题](#1. 需要解决的两个问题)
- [2. x86 特权级 Ring](#2. x86 特权级 Ring)
- [3. CPU 与 vCPU 对应关系](#3. CPU 与 vCPU 对应关系)
- 三、内存虚拟化
-
- [1. 需要解决的两个问题](#1. 需要解决的两个问题)
- [2. 核心:三级地址转换(必背)](#2. 核心:三级地址转换(必背))
- [3. MMU](#3. MMU)
- [4. 影子页表 vs EPT](#4. 影子页表 vs EPT)
- [5. 透明大页 THP](#5. 透明大页 THP)
- [四、I/O 虚拟化](#四、I/O 虚拟化)
-
- [1. 需要解决的两个问题](#1. 需要解决的两个问题)
- [2. QEMU/KVM 三类 I/O 设备(重点对比)](#2. QEMU/KVM 三类 I/O 设备(重点对比))
- [五、Xen 虚拟化](#五、Xen 虚拟化)
- [六、KVM 虚拟化(重点)](#六、KVM 虚拟化(重点))
-
- [1. KVM 简介](#1. KVM 简介)
- [2. 1型虚拟化 vs 2型虚拟化(补充)](#2. 1型虚拟化 vs 2型虚拟化(补充))
- [七、KVM 与 QEMU(补充)](#七、KVM 与 QEMU(补充))
-
- [1. 分工(必背)](#1. 分工(必背))
- [2. Xen 与 KVM 架构对比](#2. Xen 与 KVM 架构对比)
- [3. KVM 三种运行模式](#3. KVM 三种运行模式)
- [八、虚拟化平台管理工具 Libvirt(补充)](#八、虚拟化平台管理工具 Libvirt(补充))
-
- [1. Libvirt 是什么](#1. Libvirt 是什么)
- [2. Libvirt 四大管理工具(必记)](#2. Libvirt 四大管理工具(必记))
- 九、必背缩略语
- 十、考点速记
虚拟化技术介绍
一、虚拟化基础概念
1. 什么是虚拟化
将任何一种形式的资源抽象成另一种形式的技术都是虚拟化,是资源的一种逻辑表示 。本质是解除物理硬件与操作系统之间的紧耦合,把资源抽象成共享资源池,OS 从池中分配资源。
2. 重要概念(必背)
| 概念 |
含义 |
| Host Machine |
物理机(宿主机硬件) |
| Host OS |
运行在物理机上的操作系统 |
| Hypervisor(VMM) |
虚拟化软件层 / 虚拟机监控机(Virtual Machine Monitor) |
| Guest Machine |
虚拟机 |
| Guest OS |
虚拟机里的操作系统 |
3. 虚拟化发展史关键节点
| 年份 |
事件 |
| 1964 |
IBM 首次在大型机上尝试虚拟化 |
| 1999 |
VMware 推出 x86 虚拟化产品 |
| 2002 |
Xen 开源 |
| 2006 |
Qumranet 宣布 KVM 诞生 |
| 2007.2 |
KVM 集成进 Linux 2.6.20 内核 |
| 2008 |
微软 Hyper-V;LXC 容器推出 |
| 2010 |
红帽 RHEL 6.0 默认仅提供 KVM |
| 2013 |
Docker 推出 |
4. 虚拟化三种类型(易考对比)
| 类型 |
实现方式 |
是否改 Guest OS |
优缺点 |
| 全虚拟化 |
VMM 实现 CPU、内存、设备 I/O 全部虚拟化 |
不需要改 |
兼容性好,但处理器额外开销大 |
| 半虚拟化 |
VMM 只做 CPU/内存,I/O 由 Guest OS 自己实现 |
必须修改 Guest OS |
兼容性差,但性能好 |
| 硬件辅助虚拟化 |
借助处理器硬件支持实现高效全虚拟化(Intel VT-x / AMD-V) |
不需要改 |
兼容性好,是未来发展趋势 |
5. 虚拟化四大特点
| 特点 |
一句话说明 |
| 分区 |
一台物理机上同时运行多台虚拟机 |
| 隔离 |
虚拟机之间相互隔离,一台崩溃不影响其他 |
| 封装 |
整台 VM 环境封装成独立文件,拷走文件即可迁移 |
| 相对硬件独立 |
VM 无需修改即可在任何服务器上运行 |
二、CPU 虚拟化
1. 需要解决的两个问题
- 如何模拟 CPU 指令(敏感指令)
- 敏感指令:可以读写系统关键资源的指令
- 特权指令 :绝大多数敏感指令是特权指令,只能在处理器最高特权级(内核态 Ring 0)执行
- 如何让多台 VM 共享 CPU:定时器中断触发时陷入 VMM,由 VMM 按调度机制分配 CPU
2. x86 特权级 Ring
- x86 有 4 个特权级:Ring 0(内核态,最高)→ Ring 1 → Ring 2 → Ring 3(用户态)
- 无虚拟化时:OS 内核占 Ring 0,应用程序在 Ring 3
- 全虚拟化(二进制翻译):VMM 捕获 Guest OS 指令 → 翻译 → 模拟执行
- 硬件辅助虚拟化 :CPU 新增 root 模式(VMM 运行)和非 root 模式(Guest 运行),Guest 执行特权指令自动陷入 VMM,效率高
3. CPU 与 vCPU 对应关系
- 一个物理核心(含超线程 Super Thread)可虚拟出多个 vCPU
- vCPU 由 CPU 统一调度,虚拟机看到的 vCPU 本质是被调度的执行线程
三、内存虚拟化
1. 需要解决的两个问题
传统 OS 认为:①内存都从物理地址 0 开始;②内存都是连续的。但物理地址 0 只有一个,连续分配效率低 → 需要虚拟化抽象。
2. 核心:三级地址转换(必背)
| 缩写 |
全称 |
含义 |
| GVA |
Guest Virtual Address |
客户机虚拟地址(Guest OS 里程序看到的地址) |
| GPA |
Guest Physical Address |
客户机物理地址(Guest OS 认为的"物理内存") |
| HVA |
Host Virtual Address |
宿主机虚拟地址 |
| HPA |
Host Physical Address |
宿主机真实物理地址 |
转换路径:GVA → GPA → HPA(KVM 中虚机的物理内存就是 qemu-kvm 进程占用的内存空间)
3. MMU
- Memory Management Unit,内存管理单元
- 功能:虚拟地址 → 物理地址的转换,以及内存保护、缓存控制、总线仲裁
4. 影子页表 vs EPT
| 技术 |
原理 |
特点 |
| 影子页表 |
软件维护 GVA→HPA 的直接映射表,省去多次转换 |
实现复杂,页表维护开销大 |
| EPT(Intel)/ NPT(AMD) |
CPU 硬件直接完成 GVA→GPA→HPA 两级转换 |
硬件自动完成,效率高,降低实现复杂度 |
EPT 工作流程:CR3 寄存器把 GVA 转成 GPA,EPT 再把 GPA 转成 HPA,两次转换都由 CPU 硬件自动完成。
5. 透明大页 THP
- 普通页 4K,THP 大页 = 2M,对使用者完全透明
- 作用:提高 TLB 命中率、减少访存时间、减少页表项、提高 CPU Cache 效率
- 需要共享或 swap 时拆回 4K;兼容 KSM、EPT/NPT、影子页表
四、I/O 虚拟化
1. 需要解决的两个问题
- 设备发现:控制每台 VM 能访问哪些设备
- 访问截获:截获 Guest OS 通过 I/O 端口或 MMIO 对设备的访问(设备通过 DMA 与内存交换数据)
2. QEMU/KVM 三类 I/O 设备(重点对比)
| 方式 |
原理 |
优点 |
缺点 |
| 全模拟(模拟设备) |
QEMU 纯软件模拟完整设备(PIO/MMIO/DMA/中断接口一致) |
兼容好,不影响 VM 软件栈,可模拟不存在的设备 |
每次 I/O 多次上下文切换(VM↔Hypervisor、QEMU↔Hypervisor),性能最差 |
| Virtio(半虚拟化) |
VM 内装 Front-end 前端驱动,主机上跑 Back-end 后端驱动,二者通过共享内存高效通信 |
减少数据传输开销,性能好;用 Eventfd 做轻量级等待/通知、Batched I/O 批处理 |
需要 VM 装专用 virtio 驱动 |
| PCI 设备直接分配 |
把宿主机物理 PCI/PCI-E 设备独占 分配给一台 VM,靠 VT-d(IOMMU) 硬件支持 |
性能接近物理机,几乎不需要 Hypervisor 参与 |
一个设备只能给一台 VM,利用率低 |
性能排序:PCI 直通 > Virtio > 全模拟
五、Xen 虚拟化
- Xen 的 Hypervisor 是服务器 BIOS 启动后载入的第一个程序
- Dom0(Domain 0) :
- 具有特殊权限的管理虚拟机,OS 为 Linux/Unix
- 唯一能直接访问物理硬件(存储、网卡)的 VM,加载物理驱动
- 负责控制管理 Hypervisor,为其他 VM 提供硬件访问桥梁
- DomU(Domain U):普通业务虚拟机,通过虚拟驱动经 Dom0 访问硬件
- 架构:Hardware → Xen Hypervisor → Dom0(带物理驱动)+ 多个 DomU(带虚拟驱动)
六、KVM 虚拟化(重点)
1. KVM 简介
- KVM:Kernel-based Virtual Machine,基于内核的虚拟机
- 本质是 Linux 内核中的虚拟化模块 kvm.ko,复用 Linux 内核做任务调度、内存管理、硬件交互
- 开源,2007 年 2 月集成进 Linux 2.6.20 内核
- KVM 中,一台虚拟机就是一个 Linux 进程,由 CPU 调度运行
- KVM 运行在内核空间,只负责 CPU、内存虚拟化,本身不做任何设备模拟
2. 1型虚拟化 vs 2型虚拟化(补充)
| 类型 |
别名 |
架构 |
代表产品 |
优点 |
| 1 型虚拟化 |
裸金属型 |
Hypervisor 直接装在服务器硬件上,无宿主机 OS |
KVM、Xen、VMware ESXi(企业级) |
性能强 |
| 2 型虚拟化 |
宿主型 |
先装宿主机 OS(如 Win10),虚拟化软件作为应用程序运行 |
VMware Workstation(和 QQ 一样跑在 Win10 上) |
开发简单 |
大白话:1 型 = Hypervisor 直接踩硬件;2 型 = 虚拟化软件寄居在现成的操作系统里。
七、KVM 与 QEMU(补充)
1. 分工(必背)
| 组件 |
负责部分 |
说明 |
| KVM |
CPU 虚拟化 + 内存虚拟化 |
内核模块,基于硬件辅助,性能强 |
| QEMU |
I/O 设备虚拟化(网卡、USB、磁盘等输入输出设备) |
用户空间纯软件模拟 |
- QEMU 本身是一款开源虚拟化软件,能模拟整套虚拟机(CPU、内存、IO、USB、网卡),但它纯软件模拟 CPU/内存的性能很差
- KVM 诞生背景(课堂补充):以色列公司 Qumranet 为了开发桌面云,顺带着开发了 KVM
- 二者结合成 qemu-kvm:QEMU 负责 IO 虚拟化,KVM 负责 CPU/内存虚拟化,取长补短
- 通信接口:QEMU 通过
/dev/kvm 设备文件与内核中的 KVM 模块交互
2. Xen 与 KVM 架构对比
- Xen:Hypervisor 直接管硬件 → Dom0 跑物理驱动和后端 → DomU 跑前端驱动
- KVM:Linux 内核本身就是 Hypervisor(KVM 模块)→ QEMU 作为用户空间进程模拟设备 → Guest OS
3. KVM 三种运行模式
| 模式 |
运行位置 |
干什么 |
| 客户模式(Guest) |
VMX Non-Root |
执行 Guest OS 客户机代码 |
| 内核模式(Kernel) |
Linux 内核 / KVM 模块(VMX Root) |
处理 VM Exit,负责 CPU/内存调度 |
| 用户模式(User) |
用户空间 QEMU |
处理 I/O 设备模拟、执行 ioctl 调用 KVM |
工作流程:QEMU 用户模式发起 ioctl → KVM 内核模式进入客户模式执行 Guest 代码 → 遇到 I/O 或信号触发退出(VM Exit)→ 回到用户模式由 QEMU 处理 I/O → 循环
八、虚拟化平台管理工具 Libvirt(补充)
1. Libvirt 是什么
- 一套 C 语言开发的 API ,提供通用、稳定的软件层来统一管理物理机上多种虚拟化方式
- Linux 上的开源虚拟化库,支持远程管理
- 被管理对象不限 KVM,还可以是 Xen、VMware、Hyper-V、VirtualBox 等(对上屏蔽底层差异)
2. Libvirt 四大管理工具(必记)
| 工具 |
作用 |
| virsh |
命令行管理工具(最常用) |
| virt-manager |
图形界面管理工具 |
| virt-viewer |
查看/连接虚拟机控制台 |
| virt-install |
创建虚拟机 |
架构层次:用户工具(virsh/virt-manager 等)→ libvirt(daemon + API) → 底层 Hypervisor(KVM/QEMU、Xen、VMware...)
九、必背缩略语
| 缩写 |
全称 |
中文 |
| VMM |
Virtual Machine Monitor |
虚拟机监控器(Hypervisor) |
| KVM |
Kernel-based Virtual Machine |
基于内核的虚拟机 |
| GVA/GPA/HPA |
Guest Virtual/Guest Physical/Host Physical Address |
客户机虚拟/客户机物理/宿主机物理地址 |
| MMU |
Memory Management Unit |
内存管理单元 |
| EPT |
Extended Page Tables |
扩展页表(Intel 硬件内存虚拟化) |
| THP |
Transparent Huge Pages |
透明大页 |
| VT-d |
Intel Virtualization Technology for Directed I/O |
Intel I/O 直通技术(IOMMU) |
| Dom0/DomU |
Domain 0 / Domain U |
Xen 管理域 / 普通客户域 |
十、考点速记
- 虚拟化本质:硬件与 OS 解耦、资源池化 ;四大特点:分区、隔离、封装、硬件无关
- 全虚拟化不改 Guest OS(兼容好、开销大);半虚拟化要改 Guest OS (性能好、兼容差);硬件辅助虚拟化是趋势
- 特权指令只能在 Ring 0 内核态 执行;硬件辅助虚拟化引入 root / 非 root 模式
- 内存地址转换:GVA → GPA → HPA ;EPT 由 CPU 硬件完成转换,影子页表靠软件
- I/O 虚拟化三种方式:全模拟(QEMU,最慢)、Virtio(前后端+共享内存)、PCI 直通(VT-d,最快)
- Xen:Dom0 是唯一能直接访问硬件的管理 VM,DomU 是普通虚拟机
- KVM = Linux 内核模块 kvm.ko,一台虚拟机 = 一个 Linux 进程,2007.2 进入 Linux 2.6.20
- 1 型(裸金属:KVM/Xen/ESXi,性能强)vs 2 型(宿主型:Workstation,开发简单)
- KVM 管 CPU+内存,QEMU 管 I/O,通过 /dev/kvm 通信,合称 qemu-kvm
- KVM 三模式:客户模式、用户模式(QEMU)、内核模式(KVM)
- Libvirt 统一管理 KVM/Xen/Hyper-V;virsh 命令行、virt-manager 图形界面、virt-viewer 查看、virt-install 创建