QEMU 作为 vhost
本页说明 QEMU vHost 如何被启动:机器类型与加速器、内存池映射、PCIe 拓扑、直接内核启动、QMP 和串口,以及磁盘如何挂载。命令由 YAML vHost 模板渲染,因此字段和默认值以第 5 章的 vHost 配置与第 6 章的 schema 为准。
启动配置
vHost 声明适配器 kind、runtime.binary和 runtime.env、memory、cpus、accel和 machine,可选字段包括 cpu、display、monitor、no_reboot、memory_align、memory_map、serial和 args。resources/vhosts/qemu.yaml声明的 qemu-vhostkind 负责把字段渲染为 QEMU 参数。
vHost 配置 |
机器与加速器 |
用途 |
|---|---|---|
|
|
x86_64 客户机,默认 8 GiB 内存、4 个 vCPU。 |
|
|
ARM64 客户机,内存放在 |
|
|
仅 vHost 或设备模型样例,暂停启动、64 MiB 内存。 |
|
|
ARM64 的设备模型样例。 |
内存与 PCIe 拓扑
客户机内存通过
memory-backend-file映射内存池:mem-path指向本机 pool 文件,offset是客户机 RAM 区域偏移,share=on允许 gem5 共享同一组字节。memory_map描述客户机物理地址区间。Q35 在内存较大时把 RAM 拆成 4 GiB 以下和 4 GiB 以上两段;AArch64 virt 从 1 GiB 开始。PCI 地址空洞不占内存池字节。每个设备获得一个独立的
pcie-root-port,位于插槽0x10到0x17,每个端口 8 个功能;vHost kind 的max_devices为 64。设备以
vfio-user-pci客户端挂到对应 root port,socket指向设备进程监听的 Unix socket;声明了pci.rom时通过romfile提供 option ROM。磁盘使用剩余的插槽,由 QEMU 自行分配。
启动、QMP 与串口
vHost 的
kernel启用直接内核启动:生成-kernel和可选的-initrd,-append由 vHost 的cmdline与设备guest_hints.cmdline拼接。默认 vHost 配置带
no_reboot,操作系统重启不会掩盖会话结束;display和monitor默认关闭。QMP socket 以
server=on,wait=off方式创建;launcher 在启动后完成 QMP 能力协商,作为 vHost 的就绪探测之一。串口通过
chardevsocket 提供,并写入serial.log文件;serial.wait_for可以让 launcher 额外等待客户机输出中的就绪标记,serial.timeout为该标记设置秒级时限。vHost 和设备程序必须在前台运行;
-daemonize会被 launcher 拒绝,因为它与进程组所有权冲突。
-machine q35,memory-backend=ram
-accel kvm -m <ram.size>B -smp <cpus> -cpu host
-object {"qom-type":"memory-backend-file","id":"ram","size":<ram.size>,
"mem-path":"<pool>","offset":<ram.offset>,"share":true}
-qmp unix:<run-dir>/m0/qmp.sock,server=on,wait=off
-chardev socket,id=serial0,path=<run-dir>/m0/serial.sock,server=on,wait=off,logfile=<serial.log>
-serial chardev:serial0
-device pcie-root-port,id=rp0,bus=pcie.0,...
-device vfio-user-pci,bus=rp0,socket={"type":"unix","path":"<device.sock>"}
磁盘
|
QEMU 设备 |
说明 |
|---|---|---|
|
|
默认总线,适合根文件系统。 |
|
|
序列号由机器与磁盘标识符组成。 |
|
|
需要时自动追加 SCSI 控制器。 |
|
|
兼容旧镜像。 |
每个磁盘先用 -blockdev打开文件节点,再按 format(raw或 qcow2)叠加格式节点,read-only属性来自磁盘声明;vHost 指定 boot: true的磁盘获得 bootindex=1。
源码与依据
vHost kind 与命令模板:
resources/vhosts/qemu.yaml。TCG profile:
resources/vhosts/vhost-x86-tcg.yaml、resources/vhosts/vhost-arm-tcg.yaml。vHost 参数渲染与探测:
crates/cosim-topology/src/adapter/mod.rs。启动 vHost:
resources/vhosts/qemu.yaml。
相关页面
QEMU 的两个职责:QEMU 的两个职责。
QEMU 作为 device model:QEMU 作为 device model。
vHost 配置:vHost 配置字段与策略。
内存与共享内存模型:内存池与共享内存模型。
首次会话:首次会话的完整命令。