虚拟化技术介绍
一、虚拟化基础概念
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 创建
所有评论(0)