[QEMU]虛擬機間共享內(nèi)存設(shè)備

在 Linux 主機上,共享內(nèi)存設(shè)備可用?;菊Z法為:
qemu-system-x86_64 -device ivshmem-plain,memdev=hostmem
其中 hostmem 命名主機內(nèi)存后端。對于 POSIX 共享內(nèi)存后端,請使用類似
-object memory-backend-file,size=1M,share,mem-path=/dev/shm/ivshmem,id=hostmem
如果需要,可以在訪問同一共享內(nèi)存區(qū)域的客戶機 VM 之間發(fā)送中斷。中斷支持需要使用共享內(nèi)存服務(wù)器并使用 chardev 套接字連接到它。共享內(nèi)存服務(wù)器的代碼是 qemu.git/contrib/ivshmem-server。使用共享內(nèi)存服務(wù)器時的示例語法是:
# 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
使用服務(wù)器時,將為來賓分配一個 VM ID (>=0),允許使用同一服務(wù)器的來賓通過中斷進行通信。來賓可以從設(shè)備寄存器讀取其 VM ID(請參閱 ivshmem-spec.txt)。
使用 ivshmem 遷移
使用設(shè)備屬性 ,來賓將在遷移到目標(biāo)主機時復(fù)制共享內(nèi)存。使用 ,來賓將無法在連接設(shè)備的情況下進行遷移。在后一種情況下,應(yīng)使用 PCI 熱插拔支持在遷移后分離設(shè)備,然后重新連接設(shè)備。master=on
master=off
共享相同內(nèi)存的設(shè)備最多可以有一個設(shè)備是主設(shè)備。主設(shè)備必須先完成遷移,然后才能重新插入其他設(shè)備。
ivshmem 和 bigpages
您可以使用 POSIX shm 指定<shm 大小>,而是指定具有 bigpage 支持的內(nèi)存后端:
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 還支持帶有內(nèi)存路徑參數(shù)的 hugepages 掛載點。-m