qemu 中文文档 下载 App

QEMU 全局架构与模块速览

一张图看懂 QEMU

QEMU 的架构可以理解为四层:

┌─────────────────────────────────────────┐
│        QEMU Command Line Interface      │  ← 用户通过参数控制
├─────────────────────────────────────────┤
│   Device Emulation (virtio, PCI, ...)   │  ← 模拟硬件设备
├─────────────────────────────────────────┤
│  CPU Execution Core (TCG / KVM / HVF)   │  ← 指令执行引擎
├─────────────────────────────────────────┤
│     Host OS Integration (Linux/Win/Mac) │  ← 与宿主机内核交互
└─────────────────────────────────────────┘

这个分层设计让 QEMU 同时具备灵活性和高性能——设备模拟始终由 QEMU 负责,而指令执行可以选择不同引擎。

指令执行核心:三种引擎

这是 QEMU 架构中最关键的切换点。

TCG(Tiny Code Generator)

纯软件 JIT 翻译器。它把 Guest CPU 指令翻译成宿主 CPU 指令,分两步:

  1. 前端翻译:Guest 指令 → TCG IR(中间表示)
  2. 后端代码生成:TCG IR → 宿主机器码(x86/ARM/RISC-V)

TCG 是 QEMU 实现跨架构模拟的核心机制——不管 Guest 是什么架构,最终都翻译成宿主架构的机器码执行。性能上,TCG 模拟通常是原生性能的 10%~30%。

KVM / HVF / WHPX

硬件加速引擎。当 Guest 和 Host 架构相同时(比如 x86_64 主机跑 x86_64 虚拟机),可以跳过 TCG 翻译,直接把 Guest 指令交给 CPU 的硬件虚拟化扩展(VT-x、AMD-V、HVF)执行。

QEMU 在这种模式下的角色变成:设备模拟 + CPU 状态管理。CPU 指令实际由物理核心执行,性能可达原生的 85%~95%。

切换逻辑

QEMU 会根据 -accel 参数决定用哪个引擎:

# 跨架构模拟,只能用 TCG
qemu-system-aarch64 -accel tcg ...

# 同架构加速,优先 KVM
qemu-system-x86_64 -accel kvm ...

# 自动选择:先 KVM 再 HVF 再 WHPX 最后 TCG
qemu-system-x86_64 -accel auto ...

设备模拟:统一模型

无论用哪种指令引擎,设备模拟部分都是 QEMU 自己负责。QEMU 内置了几百种硬件设备的模拟:

virtio 系列设备是 QEMU 的核心创新——这是一套半虚拟化设备协议,Guest 知道自己跑在 QEMU 里,直接通过共享内存和宿主通信,跳过大量模拟开销。性能接近物理硬件。

QEMU vs 其他模拟器

项目架构灵活性性能设备模拟开源
QEMU20+ 架构高(加速后)/ 中(TCG)完整GPL
Bochsx86 仅低完整LGPL
Box86/Box64x86→ARM/RISC-V中等仅用户态MIT
Rosetta 2x86→ARM64很高无(用户态)闭源

Bochs 是纯 x86 模拟器,性能远低于 QEMU TCG;Box86/Box64 只做用户态指令翻译,不模拟完整机器。QEMU 是唯一能覆盖"全架构 + 全系统 + 用户态 + 硬件加速"四大场景的开源方案。

版本与开发节奏

从 3.0 起 QEMU 采用时间版号:每年第一个发布主版本号(3.0、4.0、5.0…),之后按月迭代小版本(4.1、4.2…)。贡献者超过 2000 人,核心维护者约 50 人,社区活跃度极高。

下一步

架构理解了,接下来看 两种模拟模式 或直接进 安装指南 动手实践。