[QEMU]虚拟机间共享内存设备

在 Linux 主机上,共享内存设备可用。基本语法为:
qemu-system-x86_64 -device ivshmem-plain,memdev=hostmem
其中 hostmem 命名主机内存后端。对于 POSIX 共享内存后端,请使用类似
-object memory-backend-file,size=1M,share,mem-path=/dev/shm/ivshmem,id=hostmem
如果需要,可以在访问同一共享内存区域的客户机 VM 之间发送中断。中断支持需要使用共享内存服务器并使用 chardev 套接字连接到它。共享内存服务器的代码是 qemu.git/contrib/ivshmem-server。使用共享内存服务器时的示例语法是:
# First start the ivshmem server once and for all ivshmem-server -p pidfile -S path -m shm-name -l shm-size -n vectors # Then start your qemu instances with matching arguments qemu-system-x86_64 -device ivshmem-doorbell,vectors=vectors,chardev=id -chardev socket,path=path,id=id
使用服务器时,将为来宾分配一个 VM ID (>=0),允许使用同一服务器的来宾通过中断进行通信。来宾可以从设备寄存器读取其 VM ID(请参阅 ivshmem-spec.txt)。
使用 ivshmem 迁移
使用设备属性 ,来宾将在迁移到目标主机时复制共享内存。使用 ,来宾将无法在连接设备的情况下进行迁移。在后一种情况下,应使用 PCI 热插拔支持在迁移后分离设备,然后重新连接设备。master=on
master=off
共享相同内存的设备最多可以有一个设备是主设备。主设备必须先完成迁移,然后才能重新插入其他设备。
ivshmem 和 bigpages
您可以使用 POSIX shm 指定<shm 大小>,而是指定具有 bigpage 支持的内存后端:
qemu-system-x86_64 -object memory-backend-file,size=1G,mem-path=/dev/hugepages/my-shmem-file,share,id=mb1 -device ivshmem-plain,memdev=mb1
ivshmem-server 还支持带有内存路径参数的 hugepages 挂载点。-m