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、用户权限和桥接网络。