虚拟化技术介绍

一、虚拟化基础概念

1. 什么是虚拟化

将任何一种形式的资源抽象成另一种形式的技术都是虚拟化,是资源的一种逻辑表示。本质是解除物理硬件与操作系统之间的紧耦合,把资源抽象成共享资源池,OS 从池中分配资源。

2. 重要概念(必背)

概念含义
Host Machine物理机(宿主机硬件)
Host OS运行在物理机上的操作系统
Hypervisor(VMM)虚拟化软件层 / 虚拟机监控机(Virtual Machine Monitor)
Guest Machine虚拟机
Guest OS虚拟机里的操作系统

3. 虚拟化发展史关键节点

年份事件
1964IBM 首次在大型机上尝试虚拟化
1999VMware 推出 x86 虚拟化产品
2002Xen 开源
2006Qumranet 宣布 KVM 诞生
2007.2KVM 集成进 Linux 2.6.20 内核
2008微软 Hyper-V;LXC 容器推出
2010红帽 RHEL 6.0 默认仅提供 KVM
2013Docker 推出

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. 需要解决的两个问题

  1. 如何模拟 CPU 指令(敏感指令)
    • 敏感指令:可以读写系统关键资源的指令
    • 特权指令:绝大多数敏感指令是特权指令,只能在处理器最高特权级(内核态 Ring 0)执行
  2. 如何让多台 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. 核心:三级地址转换(必背)

缩写全称含义
GVAGuest Virtual Address客户机虚拟地址(Guest OS 里程序看到的地址)
GPAGuest Physical Address客户机物理地址(Guest OS 认为的"物理内存")
HVAHost Virtual Address宿主机虚拟地址
HPAHost 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 直接装在服务器硬件上,无宿主机 OSKVM、Xen、VMware ESXi(企业级)性能强
2 型虚拟化宿主型先装宿主机 OS(如 Win10),虚拟化软件作为应用程序运行VMware Workstation(和 QQ 一样跑在 Win10 上)开发简单

大白话:1 型 = Hypervisor 直接踩硬件;2 型 = 虚拟化软件寄居在现成的操作系统里。


七、KVM 与 QEMU(补充)

1. 分工(必背)

组件负责部分说明
KVMCPU 虚拟化 + 内存虚拟化内核模块,基于硬件辅助,性能强
QEMUI/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…)


九、必背缩略语

缩写全称中文
VMMVirtual Machine Monitor虚拟机监控器(Hypervisor)
KVMKernel-based Virtual Machine基于内核的虚拟机
GVA/GPA/HPAGuest Virtual/Guest Physical/Host Physical Address客户机虚拟/客户机物理/宿主机物理地址
MMUMemory Management Unit内存管理单元
EPTExtended Page Tables扩展页表(Intel 硬件内存虚拟化)
THPTransparent Huge Pages透明大页
VT-dIntel Virtualization Technology for Directed I/OIntel I/O 直通技术(IOMMU)
Dom0/DomUDomain 0 / Domain UXen 管理域 / 普通客户域

十、考点速记

  1. 虚拟化本质:硬件与 OS 解耦、资源池化;四大特点:分区、隔离、封装、硬件无关
  2. 全虚拟化不改 Guest OS(兼容好、开销大);半虚拟化要改 Guest OS(性能好、兼容差);硬件辅助虚拟化是趋势
  3. 特权指令只能在 Ring 0 内核态执行;硬件辅助虚拟化引入 root / 非 root 模式
  4. 内存地址转换:GVA → GPA → HPAEPT 由 CPU 硬件完成转换,影子页表靠软件
  5. I/O 虚拟化三种方式:全模拟(QEMU,最慢)、Virtio(前后端+共享内存)、PCI 直通(VT-d,最快)
  6. Xen:Dom0 是唯一能直接访问硬件的管理 VM,DomU 是普通虚拟机
  7. KVM = Linux 内核模块 kvm.ko,一台虚拟机 = 一个 Linux 进程,2007.2 进入 Linux 2.6.20
  8. 1 型(裸金属:KVM/Xen/ESXi,性能强)vs 2 型(宿主型:Workstation,开发简单)
  9. KVM 管 CPU+内存,QEMU 管 I/O,通过 /dev/kvm 通信,合称 qemu-kvm
  10. KVM 三模式:客户模式、用户模式(QEMU)、内核模式(KVM)
  11. Libvirt 统一管理 KVM/Xen/Hyper-V;virsh 命令行、virt-manager 图形界面、virt-viewer 查看、virt-install 创建
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐