虚拟化技术学习笔记
虚拟化是云计算的基础,它将物理资源抽象为逻辑资源,实现硬件与操作系统的解耦。本笔记系统梳理虚拟化的本质、主流技术(Xen/KVM)及 CPU、内存、I/O 三大虚拟化原理。
1. 虚拟化技术概览
1.1 什么是虚拟化
虚拟化(Virtualization)是将任何一种形式的资源抽象成另一种形式的技术,是资源的逻辑表示。其核心在于解除物理硬件和操作系统之间的紧耦合关系。
- 虚拟化前:操作系统与硬件紧耦合,每种硬件对应特定操作系统。
- 虚拟化后:通过虚拟化层将物理资源抽象为共享资源池,上层操作系统从资源池中动态分配资源,实现与硬件的解耦。
1.2 虚拟化中的重要概念
| 术语 | 含义 |
|---|---|
| Guest OS | 虚拟机中运行的操作系统 |
| Guest Machine | 虚拟机(VM) |
| Hypervisor / VMM | 虚拟化软件层(Virtual Machine Monitor),负责管理硬件资源并为虚拟机提供虚拟硬件抽象 |
| Host OS | 运行在物理机上的操作系统(KVM 方案中即 Linux) |
| Host Machine | 物理服务器 |
1.3 虚拟化的优势
- 资源池化:将 CPU、内存、存储等物理资源统一管理,按需分配。
- 隔离性:每个虚拟机独立运行,互不影响。
- 灵活性:虚拟机可以在物理服务器之间在线迁移。
- 高可用性:支持故障恢复、负载均衡。
2. CPU 虚拟化
2.1 核心问题
CPU 虚拟化要解决两个核心问题:
- 如何模拟 CPU 指令:所有敏感指令(可读写系统关键资源的指令)必须被 VMM 截获并模拟。绝大多数敏感指令是特权指令,只能在处理器最高特权级(内核态)执行。
- 如何让多台 VM 共享 CPU:通过类似传统操作系统的定时器中断机制,在中断触发时陷入 VMM,由 VMM 根据调度策略将物理 CPU 时间片分配给不同 vCPU。
2.2 vCPU 与物理 CPU 的对应关系
- 物理 CPU 的内核(core)通过超线程(Super Thread)可提供多个逻辑处理器。
- VMM 将每个逻辑处理器抽象为 vCPU,分配给虚拟机。
- 多个 vCPU 可以复用同一个物理核,通过时间片轮转运行。
3. 内存虚拟化
3.1 核心问题
传统操作系统对内存有两点认知:
- 物理地址从 0 开始。
- 内存地址是连续的。
内存虚拟化需解决:
- 地址 0 冲突:物理地址 0 只有一个,无法同时满足多个虚拟机从 0 开始的要求。
- 连续性:直接分配连续物理页会降低内存使用效率,缺乏灵活性。
3.2 内存虚拟化实现
虚拟化层(VMM)管理物理机的真实物理内存,将其包装成多份虚拟内存动态分配给虚拟机。以 KVM 为例,内存虚拟化涉及以下地址转换:
text
GVA (Guest Virtual Address) → GPA (Guest Physical Address)
GPA → HVA (Host Virtual Address)
HVA → HPA (Host Physical Address)
3.3 影子页表与 EPT
- 影子页表(Shadow Page Table):由 VMM 维护,直接将 GVA 映射为 HPA,省略中间转换步骤。但带来额外的同步开销。
- Intel EPT(Extended Page Tables):硬件支持两级页表转换。客户机页表将 GVA 转换为 GPA,EPT 将 GPA 转换为 HPA,全部由 CPU 硬件自动完成,效率极高。
重要 :现代 KVM 默认使用 EPT 技术,极大提升了内存虚拟化性能。
3.4 透明大页(THP)
透明大页是 Linux 内核的特性,可以自动将连续的小页合并为大页(2MB 或 1GB),减少 TLB(快表)缺失,提高内存访问效率。在虚拟化场景中,THP 可以显著降低影子页表或 EPT 的遍历开销。
4. I/O 虚拟化
4.1 核心问题
I/O 虚拟化需要解决:
- 设备发现:控制每个虚拟机可以访问哪些设备。
- 访问截获:截获虚拟机通过 I/O 端口或 MMIO 对设备的访问,以及通过 DMA 与内存的数据交换。
4.2 三种 I/O 虚拟化方式
(1)全模拟(Full Emulation)
- 由 VMM 用软件完全模拟一个特定设备(如 e1000 网卡),虚拟机能使用原生的驱动程序。
- 优点:兼容性最好,无需修改 Guest OS。
- 缺点:每次 I/O 操作需要多次上下文切换(VM↔Hypervisor↔QEMU),性能较差。
(2)Virtio 半虚拟化
- 在 Guest OS 中安装前端驱动(Front-end),在主机上运行后端驱动(Back-end)。
- 前后端通过共享内存、批量 I/O(Batched I/O)和异步事件通知(Eventfd)进行高效通信。
- 优点:接近原生性能,减少 VM Exit。
- 缺点:需要在客户机中安装特定的 Virtio 驱动。
(3)PCI 设备直通(PCI Passthrough / VT-d)
- 利用硬件 VT-d(Intel)或 IOMMU 技术,将物理 PCIe 设备直接分配给虚拟机独占使用。
- Guest OS 直接与该设备交互,几乎无需 Hypervisor 参与。
- 优点:性能最高,接近物理机。
- 缺点:设备独占,无法被多个虚拟机共享;需要硬件支持。
5. 主流虚拟化技术:Xen 与 KVM
5.1 Xen
- Xen 的 Hypervisor 直接运行在物理硬件上,是服务器启动后的第一个程序。
- Dom0(Domain 0):一个特权虚拟机,负责硬件驱动和物理资源管理,为其他虚拟机提供 I/O 支持。
- DomU(Domain U):普通的客户虚拟机,通过 Dom0 访问存储和网络。
架构特点:Hypervisor 层极薄,Dom0 承担大量管理工作,类似"管理代理"。
5.2 KVM(Kernel-based Virtual Machine)
- KVM 是 Linux 内核的一个模块(kvm.ko),将 Linux 变成一个 Hypervisor。
- KVM 负责:CPU 和内存的虚拟化(利用硬件辅助虚拟化:Intel VT-x 或 AMD-V)。
- QEMU 负责:I/O 设备的虚拟化模拟(运行在用户空间)。
- 每个虚拟机在宿主机上表现成一个普通的 QEMU 进程,由 Linux 调度器统一调度。
KVM 工作模式:
| 模式 | 说明 |
|---|---|
| 客户模式(Guest) | 执行 Guest OS 的非 I/O 指令 |
| 用户模式(User) | QEMU 运行在此模式,处理 I/O 模拟 |
| 内核模式(Kernel) | 处理 VM Exit,进行 CPU、内存虚拟化操作 |

5.3 Xen vs KVM 对比
| 特性 | Xen | KVM |
|---|---|---|
| 虚拟化架构 | 独立 Hypervisor,Dom0 辅助 | 基于 Linux 内核,宿主 OS 即 Hypervisor |
| I/O 处理 | Dom0 提供后端驱动 | QEMU 模拟或 Virtio 半虚拟化 |
| 进程模型 | 无(独立调度) | 虚拟机是 Linux 进程 |
| 成熟度 | 早期广泛使用,现多由 KVM 取代 | 目前 Linux 主流虚拟化方案 |

6. 虚拟化平台管理:Libvirt
6.1 Libvirt 简介
Libvirt 是一套由 C 语言开发的 API 和守护进程(libvirtd),为上层管理工具(如 virsh、Virt-Manager)提供统一的接口,支持同时管理多种虚拟化方案:
- KVM / QEMU
- Xen
- VMware ESX
- Microsoft Hyper-V
6.2 节点、Hypervisor 与域的关系
- 节点(Node):物理服务器。
- Hypervisor:节点上运行的虚拟化软件层。
- 域(Domain):运行在 Hypervisor 上的虚拟机实例。
Libvirt 通过守护进程与各 Hypervisor 通信,提供远程管理能力。
7. 知识点速查表
7.1 核心概念速查
| 概念 | 一句话解释 |
|---|---|
| 虚拟化 | 将物理资源抽象为逻辑资源,实现硬件与 OS 解耦 |
| Hypervisor (VMM) | 虚拟化软件层,管理硬件并向虚拟机提供虚拟硬件抽象 |
| Guest OS | 虚拟机中运行的操作系统 |
| 全虚拟化 | 完全模拟硬件,Guest OS 无需修改,兼容性好但性能较低 |
| 半虚拟化 (Virtio) | Guest OS 需安装特定驱动,通过前后端高效通信,性能接近原生 |
| 硬件辅助虚拟化 (VT-x/AMD-V) | CPU 提供专门的虚拟化指令集,降低 VMM 实现复杂度 |
| EPT | Intel 硬件支持的扩展页表,加速内存地址转换 |
| VT-d / IOMMU | 硬件支持将 PCIe 设备直接分配给虚拟机,实现直通 |
7.2 三种 I/O 虚拟化方案对比
| 方案 | 性能 | 兼容性 | 是否需要 Guest 驱动 | 共享能力 |
|---|---|---|---|---|
| 全模拟 | 低 | 高(无需修改 Guest OS) | 否 | 可共享 |
| Virtio | 高(接近原生) | 需 Virtio 驱动 | 是 | 可共享 |
| PCI 直通 | 最高(接近物理设备) | 支持相应硬件的 Guest OS | 否(原生驱动) | 独占 |
7.3 KVM 内存地址转化路径
text
GVA (Guest 虚拟地址)
│ 客户机页表 (CR3)
▼
GPA (Guest 物理地址)
│ EPT (硬件)
▼
HPA (Host 物理地址)
注:影子页表直接将 GVA → HPA,但维护开销大,现已被 EPT 取代。
7.4 关键判断
- 全虚拟化 使用 VMM 实现 CPU 和内存虚拟化,设备 I/O 虚拟化也可由 QEMU 完全模拟,不需要修改 Guest OS 。若要求修改 Guest OS 协同工作(如 Virtio),则为半虚拟化。
- Libvirt 确实是 Linux 上的虚拟化库,提供通用稳定的管理接口,支持 KVM、Xen、VMware 等多种 Hypervisor,并支持远程管理。
已被 EPT 取代。
7.4 关键判断
- 全虚拟化 使用 VMM 实现 CPU 和内存虚拟化,设备 I/O 虚拟化也可由 QEMU 完全模拟,不需要修改 Guest OS 。若要求修改 Guest OS 协同工作(如 Virtio),则为半虚拟化。
- Libvirt 确实是 Linux 上的虚拟化库,提供通用稳定的管理接口,支持 KVM、Xen、VMware 等多种 Hypervisor,并支持远程管理。
本笔记适用于快速掌握虚拟化核心原理及主流实现方案。