1 后端/加速器
- 系统模拟主要用于在host设备上运行guest OS
- QEMU支持多种hypervisors,同时也支持JIT模拟方案(TCG)
- 例如从上表我们可以看出,运行在x86硬件上的Linux系统支持KVM,Xen,TCG
2 特性简介
- 提供了多种设备模型device model用于模拟你想要加入到模拟及其上的各类设备
- 多种设备模拟方案:直接模拟(即由qemu主程序进行设备管理),独立模拟(基于VirtIO或Multi-process QEMU),设备直传(即将真实设备“穿透”到VM中,需要硬件支持)
- feature block layer:用于支持复杂存储拓扑的构建
- chardev:一种灵活的字符设备模拟方案,可以基于stdio、file、Sockets等实现对字符设备的模拟
- 多种管理接口Management Interface
- Human Monitor Protocal(HMP)
- QEME Monitor Protocal(QMP)
3 运行
- Qemu提供了非常丰富且复杂的接口
- 部分体系结构下支持基于disk image的“一键启动”,但这种方式隐藏了很多可控的细节
- 除了通过命令行的方式进行虚拟机管理外,基于QMP构建的libvirt框架现在也有非常的,可用的,更友好的虚拟机管理工具
- 系统模拟的command line一般形式
-
- Qemu并没有提供一个统一的命令行工具,而是依据模拟方案以及模拟目标进行划分,例如途中的qemu-system-x86_64表示针对x86的系统模拟(system)命令行工具
-
-
- Machine选项定义了模拟及其的类型,各种不同的设备可能包含默认device
-
- Device选项用于定义Machine选项中没有默认值的设备
-
- Backends选项定义了模拟机器的“工作模式”
- 案例:
$ qemu-system-aarch64 \
-machine type=virt,virtualization=on,pflash0=rom,pflash1=efivars \
-m 4096 \
-cpu max,pauth-impdef=on \
-smp 4 \
-accel tcg \
-device virtio-net-pci,netdev=unet \
-device virtio-scsi-pci \
-device scsi-hd,drive=hd \
-netdev user,id=unet,hostfwd=tcp::2222-:22 \
-blockdev driver=raw,node-name=hd,file.driver=host_device,file.filename=/dev/lvm-disk/debian-bullseye-arm64 \
-serial mon:stdio \
-display none \
-blockdev node-name=rom,driver=file,filename=(pwd)/pc-bios/edk2-aarch64-code.fd,read-only=true \
-blockdev node-name=efivars,driver=file,filename=$HOME/images/qemu-arm64-efivars