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

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-xIntel提供 VMX root/non-root 模式
AMD-V (SVM)AMD提供安全虚拟机模式
VT-dIntelI/O 虚拟化,支持设备直通
AMD-Vi (IOMMU)AMDI/O 虚拟化,支持设备直通
ARM VHEARM虚拟化主机扩展
# 检查 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 PVQEMU+KVM, VMware

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


1.3 QEMU 与 VirtualBox / VMware 对比

概述对比

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

适用场景对比

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

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

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

性能基准参考

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

场景QEMU+KVMVirtualBoxVMware 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 的历史与发展

重要里程碑

年份事件
2003Fabrice Bellard 创建 QEMU
2006KVM 合入 Linux 内核主线 (2.6.20)
2007QEMU 获得 KVM 加速支持
2010QEMU 0.12 引入 qcow2 v3 格式
2011QEMU 1.0 发布
2014QEMU 2.0 - 大量新设备模型
2016QEMU 2.7 - ARM v8.1 支持
2019QEMU 4.0 - 加速器框架重构
2021QEMU 6.0 - 多进程 QEMU (实验)
2023QEMU 8.0 - RISC-V 增强、机密计算支持
2024QEMU 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_64x86_64 全系统仿真
qemu-system-aarch64ARM64 全系统仿真
qemu-system-riscv64RISC-V 64 位全系统仿真
qemu-system-mipselMIPS 小端序全系统仿真
qemu-img磁盘镜像管理工具
qemu-io磁盘 I/O 测试工具
qemu-nbd网络块设备(Network Block Device)服务
qemu-ga客户机代理(Guest Agent)
qemu-edidEDID 数据生成工具
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、用户权限和桥接网络。