强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

QEMU 虚拟化完全指南 / 01 - QEMU 概述

01 - QEMU 概述

理解 QEMU 的核心概念、虚拟化技术分类,以及它与 VirtualBox、VMware 等方案的本质区别。


1.1 什么是 QEMU

QEMU(Quick Emulator)是一款开源的硬件虚拟化与仿真软件,由 Fabrice Bellard 于 2003 年创建。它能够:

  • 全系统仿真(Full System Emulation):在任意宿主平台上模拟完整的计算机硬件环境,运行不同架构的操作系统
  • 用户模式仿真(User Mode Emulation):在宿主系统上直接运行其他架构的 Linux 用户态程序
  • 硬件加速(KVM Acceleration):结合 KVM(Linux 内核虚拟机模块)实现接近原生性能的虚拟化
┌──────────────────────────────────────────────────────────┐
│                       QEMU 功能全景                       │
├────────────────────┬─────────────────────────────────────┤
│  全系统仿真         │  模拟完整硬件 → 运行任意 OS          │
│  (qemu-system-*)   │  支持 x86_64, ARM, RISC-V, MIPS...  │
├────────────────────┼─────────────────────────────────────┤
│  用户模式仿真       │  翻译用户态程序 → 跨架构运行          │
│  (qemu-user)       │  无需启动完整 OS,直接执行二进制       │
├────────────────────┼─────────────────────────────────────┤
│  KVM 加速           │  利用硬件虚拟化扩展 → 接近原生性能     │
│  (/dev/kvm)        │  仅限 x86_64/ARM (同架构虚拟化)       │
├────────────────────┼─────────────────────────────────────┤
│  工具集             │  qemu-img, qemu-nbd, qemu-io...     │
│  (Utilities)       │  磁盘镜像管理、网络块设备、I/O 测试    │
└────────────────────┴─────────────────────────────────────┘

核心特性

特性 说明
多架构支持 x86_64, ARM (aarch64), RISC-V (riscv64), MIPS, PowerPC, SPARC, S390x 等
开源免费 GPLv2 许可,社区活跃
硬件仿真 完整的设备模型:网卡、磁盘控制器、GPU、USB 等
快照与迁移 支持实时快照、在线迁移(Live Migration)
设备直通 通过 VFIO 将物理设备直接分配给虚拟机
热插拔 支持运行时添加/移除 CPU、内存、磁盘、网卡

1.2 虚拟化技术分类

全虚拟化(Full Virtualization)

全虚拟化通过 Hypervisor 完全模拟底层硬件,客户机操作系统无需任何修改即可运行。

全虚拟化架构:
  ┌──────────┐  ┌──────────┐  ┌──────────┐
  │  Guest   │  │  Guest   │  │  Guest   │
  │  OS (Win)│  │  OS (Lin)│  │  OS (BSD)│
  ├──────────┤  ├──────────┤  ├──────────┤
  │  QEMU    │  │  QEMU    │  │  QEMU    │
  │ (设备模型)│  │ (设备模型)│  │ (设备模型)│
  └──────────┘  └──────────┘  └──────────┘
  ───────────── KVM (内核模块) ─────────────
  ───────────── 宿主机 Linux 内核 ──────────
  ───────────── 硬件 (VT-x / AMD-V) ───────
特点 说明
优点 客户机无需修改、支持任意操作系统
缺点 纯软件模拟时性能开销较大
加速 结合 KVM 可获得接近原生的性能
代表 QEMU+KVM, VMware ESXi, Hyper-V

半虚拟化(Paravirtualization)

半虚拟化要求客户机操作系统进行修改,通过 Hypercall 接口直接与 Hypervisor 通信,避免硬件模拟开销。

半虚拟化架构:
  ┌──────────────────┐  ┌──────────────────┐
  │   Guest (PV)     │  │   Guest (PV)     │
  │  修改过的内核     │  │  修改过的内核     │
  │  (virtio 驱动)   │  │  (virtio 驱动)   │
  └──────────────────┘  └──────────────────┘
  ───────────── Xen Hypervisor (或 KVM) ────
  ───────────── 硬件 ────────────────────────
特点 说明
优点 性能接近原生,I/O 开销小
缺点 需要修改客户机内核
驱动 virtio 是事实上的半虚拟化驱动标准
代表 Xen PV, KVM + virtio

硬件辅助虚拟化(Hardware-Assisted Virtualization)

现代 CPU 提供的虚拟化扩展(Intel VT-x / AMD-V)让 Hypervisor 可以直接将客户机指令在硬件上执行。

技术 厂商 说明
VT-x Intel 提供 VMX root/non-root 模式
AMD-V (SVM) AMD 提供安全虚拟机模式
VT-d Intel I/O 虚拟化,支持设备直通
AMD-Vi (IOMMU) AMD I/O 虚拟化,支持设备直通
ARM VHE ARM 虚拟化主机扩展
# 检查 CPU 是否支持硬件虚拟化
# Intel CPU
grep -c vmx /proc/cpuinfo

# AMD CPU
grep -c svm /proc/cpuinfo

# 通用检查
LC_ALL=C lscpu | grep -i virtuali

三种虚拟化对比

对比维度 全虚拟化 (软件) 半虚拟化 硬件辅助虚拟化
客户机修改 不需要 需要 不需要
性能 较低 (30-70%) 较高 (85-95%) 接近原生 (95-99%)
兼容性 最好 (任意 OS) 有限 (需 PV 驱动) 好 (需硬件支持)
代表技术 QEMU (TCG) Xen PV QEMU+KVM, VMware

实际生产中最常见的组合是:QEMU(设备模型)+ KVM(硬件加速)+ virtio(半虚拟化驱动),兼顾兼容性与性能。


1.3 QEMU 与 VirtualBox / VMware 对比

概述对比

对比维度 QEMU+KVM VirtualBox VMware (ESXi/Workstation)
授权 GPLv2 (免费开源) GPLv2 + 商业扩展 商业 (ESXi 有免费版)
Hypervisor 类型 Type 1 (KVM) Type 2 Type 1 (ESXi) / Type 2 (WS)
性能 ★★★★★ ★★★☆☆ ★★★★★
架构支持 x86, ARM, RISC-V, MIPS, PPC… x86_64 为主 x86_64 为主
设备直通 VFIO (完整支持) 有限 (USB) 完整 (需 vSphere)
管理界面 CLI 为主 (可选 libvirt) GUI GUI
API/自动化 QMP, libvirt, virsh VBoxManage CLI vSphere API, PowerCLI
在线迁移 支持 不支持 支持 (vMotion)
嵌套虚拟化 支持 支持 支持
企业级功能 通过 libvirt/OpenStack 完整
最大 vCPU 无理论上限 (取决于宿主) 32 768 (ESXi)
最大内存 无理论上限 64GB 24TB (ESXi)

适用场景对比

选择 QEMU+KVM:
  ✅ Linux 服务器虚拟化
  ✅ 需要多架构仿真 (ARM, RISC-V)
  ✅ 设备直通 (GPU, 网卡)
  ✅ OpenStack/Proxmox 等云平台
  ✅ 嵌入式开发与测试
  ✅ 安全研究与沙箱

选择 VirtualBox:
  ✅ 桌面用户快速体验
  ✅ 开发/测试简单虚拟机
  ✅ 不需要 root 权限运行
  ✅ 跨平台 (Windows/macOS/Linux)

选择 VMware:
  ✅ 企业级生产环境 (ESXi)
  ✅ 需要成熟管理工具 (vCenter)
  ✅ 大规模虚拟化集群
  ✅ 已有 VMware 投资的企业

性能基准参考

以下为典型场景下的相对性能(以原生为 100%):

场景 QEMU+KVM VirtualBox VMware WS
CPU 密集型 97-99% 85-92% 95-98%
磁盘 I/O (virtio) 90-95% 60-75% 85-90%
网络吞吐 (virtio) 85-95% 50-70% 80-90%
内存带宽 98-99% 90-95% 97-99%
启动时间 中等 中等

注意: 性能数据会因配置、版本、宿主硬件而异,以上仅供参考。


1.4 QEMU 的历史与发展

重要里程碑

年份 事件
2003 Fabrice Bellard 创建 QEMU
2006 KVM 合入 Linux 内核主线 (2.6.20)
2007 QEMU 获得 KVM 加速支持
2010 QEMU 0.12 引入 qcow2 v3 格式
2011 QEMU 1.0 发布
2014 QEMU 2.0 - 大量新设备模型
2016 QEMU 2.7 - ARM v8.1 支持
2019 QEMU 4.0 - 加速器框架重构
2021 QEMU 6.0 - 多进程 QEMU (实验)
2023 QEMU 8.0 - RISC-V 增强、机密计算支持
2024 QEMU 9.0 - 加速器扩展、TDX 支持

贡献者与社区

QEMU 由 Linux Foundation 托管,是 Linux 虚拟化生态的核心组件:

QEMU 生态关系:
  ┌─────────────┐   ┌──────────────┐   ┌───────────────┐
  │  QEMU       │   │   KVM        │   │   libvirt     │
  │  (设备模型   │◄──│   (内核模块   │◄──│   (管理层     │
  │   + 用户态)  │   │    + 加速)   │   │    + API)     │
  └─────────────┘   └──────────────┘   └───────────────┘
        ▲                                       ▲
        │                                       │
  ┌─────┴─────────┐                   ┌─────────┴───────┐
  │   virtio      │                   │   OpenStack     │
  │   (半虚拟化   │                   │   Proxmox VE    │
  │    驱动)      │                   │   oVirt         │
  └───────────────┘                   └─────────────────┘

1.5 QEMU 适用场景

场景 1:服务器虚拟化

使用 QEMU+KVM 构建私有云或虚拟化集群:

典型架构:
  ┌──────────────────────────────────────────┐
  │           管理层 (OpenStack / Proxmox)    │
  ├──────────────────────────────────────────┤
  │           libvirt + virsh                │
  ├──────────────────────────────────────────┤
  │    QEMU+KVM    │    QEMU+KVM    │        │
  │    ┌──────┐    │    ┌──────┐    │  ...   │
  │    │ VM 1 │    │    │ VM 2 │    │        │
  │    └──────┘    │    └──────┘    │        │
  ├──────────────────────────────────────────┤
  │         Linux Host + KVM                 │
  └──────────────────────────────────────────┘

场景 2:跨架构开发

在 x86_64 主机上开发和测试 ARM/RISC-V 程序:

# 在 x86_64 主机上运行 ARM64 虚拟机
qemu-system-aarch64 \
  -M virt \
  -cpu cortex-a72 \
  -m 2G \
  -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
  -drive file=arm64-disk.qcow2,format=qcow2 \
  -nographic

场景 3:安全研究与沙箱

在隔离的虚拟机中分析恶意软件或测试漏洞利用:

# 创建隔离的快照环境,所有修改不会影响原始镜像
qemu-system-x86_64 \
  -m 1G \
  -drive file=analysis-base.qcow2,format=qcow2,snapshot=on \
  -net none \
  -monitor stdio

场景 4:持续集成测试

在 CI/CD 流水线中使用 QEMU 测试多架构构建:

# GitHub Actions 示例
- name: Run tests under QEMU
  run: |
    sudo apt-get install qemu-user-static
    docker run --rm --platform linux/arm64 \
      arm64v8/ubuntu:22.04 uname -m

场景 5:设备直通高性能虚拟化

将物理 GPU/NVMe 直通给虚拟机,获得接近原生的性能:

GPU 直通架构:
  ┌─────────────────────────────────┐
  │        VM (Windows/Linux)       │
  │     使用物理 GPU 驱动           │
  ├─────────────────────────────────┤
  │     QEMU + VFIO                 │
  ├─────────────────────────────────┤
  │     IOMMU (VT-d / AMD-Vi)      │
  ├─────────────────────────────────┤
  │     物理 GPU (NVIDIA/AMD)       │
  └─────────────────────────────────┘

1.6 QEMU 主要二进制文件

安装 QEMU 后,会获得以下可执行文件:

二进制文件 用途
qemu-system-x86_64 x86_64 全系统仿真
qemu-system-aarch64 ARM64 全系统仿真
qemu-system-riscv64 RISC-V 64 位全系统仿真
qemu-system-mipsel MIPS 小端序全系统仿真
qemu-img 磁盘镜像管理工具
qemu-io 磁盘 I/O 测试工具
qemu-nbd 网络块设备(Network Block Device)服务
qemu-ga 客户机代理(Guest Agent)
qemu-edid EDID 数据生成工具
qemu-storage-daemon 存储守护进程
# 查看所有已安装的 QEMU 系统仿真器
ls /usr/bin/qemu-system-* 2>/dev/null || which qemu-system-*

# 查看 QEMU 版本
qemu-system-x86_64 --version

要点回顾

要点 核心内容
QEMU 本质 开源硬件仿真器与虚拟化软件
虚拟化类型 全虚拟化、半虚拟化、硬件辅助虚拟化
QEMU+KVM 最强组合:QEMU 提供设备模型,KVM 提供硬件加速
对比优势 免费开源、多架构支持、设备直通、高度可定制
适用场景 服务器虚拟化、跨架构开发、安全研究、CI/CD

注意事项

KVM 必不可少: 在 Linux 生产环境中,QEMU 必须配合 KVM 使用才能获得可接受的性能。纯 TCG 模式的性能仅为原生的 10-30%,仅适用于仿真不同架构。

Type 1 vs Type 2: 严格来说,QEMU 单独运行是 Type 2(宿主上运行),但 QEMU+KVM 组合因为 KVM 直接操作硬件,通常被视为 Type 1 Hypervisor。

多架构仿真开销: 跨架构仿真(如 x86_64 上运行 ARM)的性能损耗非常大(通常只有原生的 5-20%),仅用于开发测试,不适合生产负载。


扩展阅读


下一步

02 - 安装与配置:学习如何在各平台安装 QEMU,配置 KVM、用户权限和桥接网络。