QEMU 快速入门:它是什么,能做什么
QEMU 的双重身份
很多人第一次接触 QEMU 时会困惑:它到底是模拟器还是虚拟机管理程序?答案是两者都是,取决于你怎么用它。
身份一:机器模拟器(Emulator)
QEMU 可以完整模拟一台物理机器——CPU、内存、主板、显卡、网卡、磁盘控制器都由软件实现。在这个模式下,它不依赖硬件虚拟化支持,完全靠翻译和模拟工作。
最著名的例子:你在 x86_64 的笔记本上,用 QEMU 模拟一台 ARM64 的 Raspberry Pi,直接在里面跑完整的 Linux 发行版。这种跨架构能力是商业虚拟化软件完全做不到的。
身份二:虚拟化加速器(Hypervisor Accelerator)
当宿主机和虚拟机架构相同时(比如 x86 主机跑 x86 虚拟机),QEMU 可以切换到加速模式——把 CPU 指令直接丢给硬件执行,自己只负责设备模拟。这时候 QEMU 的性能几乎等于物理机上裸跑,而它的角色更接近一个轻量级的虚拟机管理程序。
QEMU 的三种运行形态
| 形态 | 命令前缀 | 作用 | 典型场景 |
|---|---|---|---|
| 全系统模拟 | qemu-system-x86_64 | 模拟完整硬件,可引导操作系统 | 跑另一个 OS、嵌入式开发 |
| 用户态模拟 | qemu-x86_64 / qemu-aarch64 | 只翻译指令,共享宿主机内核 | 跨架构编译、逆向分析 |
| 硬件加速模式 | qemu-system-xxx -accel kvm/hvf | 架构相同,利用硬件虚拟化 | 日常虚拟化开发环境 |
三种加速器
QEMU 的性能瓶颈几乎总是在 CPU 模拟上。为了解决这个问题,它支持三种加速器:
- TCG(Tiny Code Generator):内置的 JIT 翻译引擎,纯软件实现,跨平台可用。性能最低,但最通用
- KVM(Kernel-based Virtual Machine):Linux 内核提供的硬件虚拟化接口。要求宿主机 BIOS 开启 VT-x/AMD-V,加速器指定
-accel kvm - HVF(Hypervisor Framework):Apple macOS 提供的硬件虚拟化框架,Intel Mac 和 Apple Silicon 都支持,指定
-accel hvf - WHPX(Windows Hypervisor Platform):Windows 上的硬件虚拟化加速,需要启用 Windows 虚拟机平台功能
Windows 上还有 HAXM(Intel Hardware Accelerated Execution Manager),但 Intel 已停止维护,建议直接用 WHPX。
一个直观的例子
在 Linux x86_64 主机上模拟 ARM64 系统(跨架构,只能用 TCG):
# 下载 Ubuntu ARM64 镜像后,启动模拟
qemu-system-aarch64 \
-M virt \
-m 8G \
-cpu max \
-cdrom ubuntu-24.04-live-server-arm64.iso \
-drive file=arm64-disk.qcow2,format=qcow2 \
-accel tcg,thread=multi \
-nographic
在同一台主机上加速运行 x86_64 虚拟机(架构相同,用 KVM):
qemu-system-x86_64 \
-accel kvm \
-m 8G -smp 4 \
-cdrom ubuntu-24.04-live-server-amd64.iso \
-drive file=x86-disk.qcow2,format=qcow2
两条命令看起来类似,但第一条用 TCG 逐条翻译 ARM64 指令,性能慢;第二条直接让物理 CPU 执行 x86 指令,性能接近原生。这就是"模拟器"和"加速器"的本质区别。