QEMU与虚拟机技术的关系是工具与生态的关系:虚拟机技术是解决资源隔离与复用问题的整体框架,而QEMU是这个框架中最灵活的“翻译官”,负责把一套硬件指令翻译成另一套硬件能听懂的指令,让虚拟机在异构环境下也能跑起来。
QEMU是虚拟机技术里的“翻译官”,不是“房东”
虚拟化技术解决的核心问题,是把一台物理机的CPU、内存、磁盘、网卡拆成多份,分给多个“租户”使用,传统虚拟化方案里,宿主机是房东,虚拟机是租客,而QEMU的角色更特殊它不是房东,而是帮着两边沟通的翻译。
虚拟化技术体系里,QEMU的位置在哪
行业共识认为,虚拟化技术分为两大阵营:一类是模拟器,一类是虚拟机监视器(Hypervisor),QEMU同时踩在这两条船上。
- 纯模拟模式:QEMU自己扮演整台电脑,CPU、内存、磁盘、网卡全部用软件模拟,客户机以为自己运行在真实硬件上,实际上所有指令都经过QEMU翻译。
- 加速模式:QEMU配合Linux内核的KVM模块,把CPU和内存的访问直接交给硬件虚拟化扩展处理,QEMU只负责模拟外设和管理接口。
行业内经常把QEMU和KVM放在一起说,但严格来讲,QEMU是用户态工具,KVM是内核态模块,两者分工明确:KVM提供CPU虚拟化和内存虚拟化的底层能力,QEMU提供设备模型、BIOS固件、磁盘镜像格式、网络后端等上层的“人机交互”部分。
三种虚拟化路线,QEMU占了两种类
虚拟化技术演进到今天,主流路线大致有三条:
- 全虚拟化:客户机无需修改,以为自己独占硬件,QEMU的TCG模式和KVM加速模式都属于这一类。
- 半虚拟化:客户机知道自己跑在虚拟环境里,通过特殊驱动与宿主机协作,典型代表是virtio、Xen的PV模式,QEMU支持virtio设备模型,能让虚拟机网络和磁盘性能大幅提升。
- 操作系统级虚拟化:也就是容器,共享宿主机内核,不做硬件模拟,QEMU在这条路线上不参与。
可以说,QEMU是虚拟机技术里覆盖最广的开源实现,既能在x86上模拟ARM,也能在ARM上模拟x86,还能模拟RISC-V、MIPS、SPARC等架构,这套跨架构能力在其他商业化虚拟化产品里几乎看不到。
QEMU和KVM有什么区别?一个出脑子,一个出力气
很多人把QEMU和KVM混为一谈,实际观察两者运行状态就能发现:QEMU是一个进程,KVM是内核里的一组功能开关,QEMU负责“演”,KVM负责“跑”。
QEMU负责把硬件外设“演”给客户机看
当你启动一台QEMU虚拟机时,QEMU会做这几件事:
- 分配一块内存作为客户机的物理地址空间
- 创建一个QEMU进程,里面运行着客户机的vCPU线程
- 模拟出主板、BIOS、网卡、显卡、磁盘控制器等设备
- 把客户机的每一个PIO(端口I/O)和MMIO(内存映射I/O)操作截获,翻译成宿主机上的真实设备操作
这一整套流程是纯软件的,QEMU不直接让客户机的指令跑到物理CPU上,而是通过动态二进制翻译(TCG,Tiny Code Generator)把客户机指令切碎、翻译、再执行,翻译出来的指令已经变了模样,但执行结果和客户机预期一模一样。
KVM负责把CPU和内存真实地借给虚拟机用
KVM的介入改变了这个格局,KVM利用Intel VT-x或AMD-V硬件虚拟化扩展,让客户机的绝大部分指令直接在物理CPU上执行,不需要翻译。
具体流程变成:
- QEMU创建vCPU线程,通过
/dev/kvm接口把vCPU注册进内核 - KVM执行
KVM_RUN指令,让vCPU切入客户模式 - 客户机的普通指令直接跑在物理核上,只有遇到特权指令或外部事件才“陷入”到KVM
- 陷入后,KVM把控制权交还给QEMU处理设备模拟
最终表现就是不敏感指令零翻译、零损耗,只有设备I/O路径会慢一些。
没有KVM的QEMU,就像没通电的发动机
QEMU单独使用也能跑虚拟机,但性能损失明显,反过来,KVM单独存在没有意义它只能提供CPU和内存的虚拟化能力,没有设备模型、没有磁盘格式、没有命令行管理界面,用户操作的入口始终是QEMU。
在Linux发行版里,通常安装qemu-system-x86和qemu-utils就能获得完整能力,KVM作为内核模块一般已默认编译,运行前可以用kvm-ok检查硬件虚拟化是否开启。
QEMU虚拟机性能怎么样?先问自己开没开加速
业内专家指出,问到QEMU虚拟机性能的问题,必须先明确一个前提:你用的是TCG纯模拟还是KVM加速,两者差距巨大,不先搞清楚这一点,任何性能讨论都没有意义。
纯软件模拟模式:能跑,但别指望干活
TCG模式下的QEMU性能表现,多数情况下只有物理机的二到三成功力,为什么?因为每一次客户机指令执行都伴随着翻译、缓存、再翻译的开销,虽然TCG有翻译缓存(TB Cache),能把重复执行的代码块缓存下来,但缓存命中率在复杂工作负载下并不理想。
实测体验是:在TCG模式下启动一个Windows XP系统,开机需要一两分钟,打开Office文档有明显卡顿,跑编译任务的时间是物理机的三到五倍,这个模式的价值在于验证系统启动流程、测试跨架构软件、做嵌入式开发调试,而不是当作日常生产力环境。
KVM加速模式:多数场景接近原生性能
开启KVM加速后,QEMU虚拟机的CPU性能接近物理机,内存延迟也几乎没有增加,影响性能的主要瓶颈转移到了磁盘和网络设备模拟上。
常见的优化操作是给客户机安装virtio驱动:
- 磁盘:使用virtio-blk或virtio-scsi设备取代默认的IDE模拟
- 网络:使用virtio-net设备取代默认的e1000模拟
- 显示:使用virtio-gpu提升图形响应速度
在不支持KVM的平台上,QEMU也支持Windows的WHPX加速接口和macOS的Hypervisor.framework加速接口,也就是说在Windows宿主机或Mac宿主机上,QEMU同样能获得接近原生的CPU性能,对于持有Intel Mac或M系列芯片Mac的用户,用QEMU跑虚拟机是不错的选择,它在Apple Silicon上的性能口碑较好。
用QEMU搭实验室环境比VMware更轻
QEMU的命令行启动方式看起来门槛高,但一旦习惯,效率优势明显,写一个启动脚本,几分钟就能拉起整套测试环境,比打开VMware Workstation建虚拟机再加载系统镜像快一倍以上,配合快照功能,做系统实验、内核调试、恶意软件分析都很顺手。
QEMU和VMware哪个好?关键看你被不被“全家桶”绑架
在“QEMU和VMware哪个好”这个问题上,答案取决于你的实际使用场景,两边没有绝对优劣,只有匹配度。
| 对比维度 | QEMU + KVM | VMware Workstation |
|---|---|---|
| 价格 | 免费开源 | 商业付费,个人版有授权限制 |
| 跨架构模拟 | 支持ARM、RISC-V、MIPS等 | 只支持与宿主机同架构的客户机 |
| 安装方式 | 命令行为主,也可配virt-manager图形界面 | 安装即用,图形界面成熟 |
| CPU性能 | KVM加速下接近原生 | 接近原生 |
| 磁盘格式 | qcow2、raw、vmdk等 | vmdk为主 |
| 快照功能 | 支持,命令行操作 | 支持,界面操作直观 |
| 自动化能力 | 脚本友好,适合CI/CD | GUI友好,命令行工具较弱 |
如果是个人开发者在Windows桌面上做日常虚拟机使用,VMware或VirtualBox的图形界面更省心,如果你是运维工程师、云原生开发者或者做嵌入式交叉编译的人,QEMU的命令行能力和镜像格式兼容性会明显更有优势,毕竟OpenStack、KubeVirt这些云平台底层都跑着QEMU,学一次能用在多个场景。
VirtualBox和QEMU怎么选的问题
顺带回答一个很多新手会问的选择题:VirtualBox和QEMU怎么选,VirtualBox的上手成本极低,双击安装、图形界面、共享文件夹一键开启,适合桌面用户,QEMU的优势在于跨平台支持面更广、脚本化部署更灵活、也能复用系统镜像做自动化测试,没有绝对好坏,选哪个取决于你是否愿意花半小时熟悉命令行。
如何在Windows上安装QEMU?三步上手
Windows用户拿着QEMU最常用的场景是:想跑一个Linux发行版,又不想装WSL或不想买VMware授权,QEMU在Windows上完全可以胜任这类需求,整体流程也不复杂。
第一步:下载解压
从QEMU官网的Windows下载页获取最新稳定版安装包,安装过程会要求选择安装目录和是否添加PATH环境变量,记得勾选“添加PATH”选项,否则后续命令行找不到程序。
也可以使用Windows包管理器直接安装:
winget install QEMU.QEMU
安装完成后,在命令提示符里输入qemu-system-x86_64 --version验证是否成功。
第二步:创建一块虚拟硬盘
进入一个工作目录,执行以下命令创建一块20GB的qcow2格式磁盘:
qemu-img create -f qcow2 ubuntu-test.qcow2 20G
这里用qcow2格式而不是raw格式,原因在于qcow2支持按需分配,刚创建时实际占用空间很小,用多大占多大,还支持快照和压缩。
第三步:启动一台虚拟机
拿一个Ubuntu ISO镜像,用下面的命令启动安装:
qemu-system-x86_64 -m 2048 -smp 2 -hda ubuntu-test.qcow2 -cdrom ubuntu.iso -boot d -accel whpx
参数含义:
-m 2048:分配2GB内存-smp 2:分配2个CPU核心,具体数字按自己的电脑配置来-hda:指定第一块IDE磁盘-cdrom:挂载ISO镜像-boot d:优先从光驱启动-accel whpx:使用Windows Hypervisor Platform加速,性能表现接近KVM模式
需要注意的是,WHPX加速需要先在Windows功能里启用“Windows Hypervisor Platform”,如果没启用,QEMU会用TCG纯软件模拟兜底,性能会下降明显。
关于QEMU与虚拟机技术的四个高频疑问
QEMU、KVM、VirtualBox三者是什么关系?
QEMU是虚拟化技术里的设备模拟层和用户接口,KVM是Linux内核提供的CPU和内存加速器,VirtualBox是独立的虚拟化软件,QEMU与KVM配合使用,形成完整的开源虚拟化方案;VirtualBox是跨平台的商业开源混合产品,两条路线共享部分底层虚拟化原理,但生态和工具链完全不同。
QEMU适合用来做什么?
最典型的用途是叫开发环境验证和系统级调试,嵌入式开发人员用QEMU模拟target开发板,不依赖实体板子验证固件;云平台开发人员把QEMU作为底层运行引擎;安全研究者用QEMU快速搭建恶意代码分析环境;普通用户也可以拿它跑不支持的旧系统或异构操作系统。
QEMU支持嵌套虚拟化吗?
支持,在KVM加速模式下,给QEMU虚拟机添加-cpu host,+vmx参数,就能让虚拟机内部再跑一层KVM,这种嵌套虚拟化常用于CI测试环境或实验室模拟OpenStack这类需要虚拟化能力的平台,不过整体性能会有一定损耗,生产环境一般不推荐使用。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/929015.html


评论列表(5条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是使用部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对使用的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是使用部分,给了我很多新的思路。感谢分享这么好的内容!
@happy956man:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是使用部分,给了我很多新的思路。感谢分享这么好的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于使用的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!