虚拟化技术学习笔记

虚拟化技术学习笔记

虚拟化是云计算的基础,它将物理资源抽象为逻辑资源,实现硬件与操作系统的解耦。本笔记系统梳理虚拟化的本质、主流技术(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 虚拟化要解决两个核心问题:

  1. 如何模拟 CPU 指令:所有敏感指令(可读写系统关键资源的指令)必须被 VMM 截获并模拟。绝大多数敏感指令是特权指令,只能在处理器最高特权级(内核态)执行。
  2. 如何让多台 VM 共享 CPU:通过类似传统操作系统的定时器中断机制,在中断触发时陷入 VMM,由 VMM 根据调度策略将物理 CPU 时间片分配给不同 vCPU。

2.2 vCPU 与物理 CPU 的对应关系

  • 物理 CPU 的内核(core)通过超线程(Super Thread)可提供多个逻辑处理器。
  • VMM 将每个逻辑处理器抽象为 vCPU,分配给虚拟机。
  • 多个 vCPU 可以复用同一个物理核,通过时间片轮转运行。

3. 内存虚拟化

3.1 核心问题

传统操作系统对内存有两点认知:

  1. 物理地址从 0 开始。
  2. 内存地址是连续的。

内存虚拟化需解决:

  • 地址 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 虚拟化需要解决:

  1. 设备发现:控制每个虚拟机可以访问哪些设备。
  2. 访问截获:截获虚拟机通过 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,并支持远程管理。

本笔记适用于快速掌握虚拟化核心原理及主流实现方案。

相关推荐
一只机电自动化菜鸟1 小时前
一建机电备考笔记(33) 机电专业技术(起重技术-吊装方案)(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
吃好睡好便好2 小时前
博客等级升级啦
学习
小新同学^O^2 小时前
简单学习 --> Spring事务
数据库·学习·spring
rabbit_pro2 小时前
Docker compose部署Ollama使用模型
linux·运维·docker
ECT-OS-JiuHuaShan2 小时前
彻底定理化:从量子纠缠到量子代谢
数据库·人工智能·学习·算法·生活·量子计算
小陈phd3 小时前
多模态大模型学习笔记(四十)——从“看字”到“懂结构”:版面分析与表格解析技术全解
笔记·学习
xuhaoyu_cpp_java3 小时前
SpringMVC学习(二)
java·经验分享·笔记·学习·spring
笑洋仟4 小时前
docker的overlay2目录占用磁盘空间很大,清理办法
运维·docker·容器
知识分享小能手4 小时前
R语言入门学习教程,从入门到精通,R语言日期和时间序列(6)
开发语言·学习·r语言