kmv/qemu vm 客户机和主机通过共享内存连接,以收集和缓存它们之间的数据

kmv/qemu vm 客户机和主机通过共享内存连接,以收集和缓存它们之间的数据

0

配置为:host:Ubuntu:20.04 OS,guest:Ubuntu20.04 OS,两个文件使用9p文件系统进行互通。

目前的进展是:使用C语言中的mmap函数通过9p文件系统映射同一个文件的内存,目前host可以对文件内存进行写入,但是guest无法实时读取到变化。

嘉宾:read.c

在此处输入图片描述

主机:write.c

在此处输入图片描述

答案1

在客户机和主机之间打洞不是一件容易的事情,因为它是攻击/逃脱的完美载体。但我知道,有时用例大于风险。但我不会尝试使用 9pfs,而是建议看看伊夫什梅姆

这虽然不是很好,而且也不是最常用的,但至少或多或少可以满足您的要求。

人们一直在尝试使用示例应用程序 ivshmem-server/client 进行生产(不应鼓励这样做),因此它们已在 Debian 和 Ubuntu 的 qemu 5.2 及更高版本中删除。但如果您想通过这种方式,您仍然可以自己构建和使用这些示例工具(或使用仍然拥有它们的 Ubuntu Focal 进行实验)。

如果你想直接针对接口进行编码,你可能想从这里开始ivshmem 教程示例

这甚至可以很好地工作,并且更具表现力libvirt XML。 这:

  <shmem name='my_shmem0' role='peer'>
    <model type='ivshmem-plain'/>
    <size unit='M'>4</size>
  </shmem>

自动给我

-object '{"qom-type":"memory-backend-file","id":"shmmem-shmem0","mem-path":"/dev/shm/my_shmem0","size":4194304,"share":true}' \
-device '{"driver":"ivshmem-plain","id":"shmem0","memdev":"shmmem-shmem0","master":"off","bus":"pci.9","addr":"0x1"}' \
$ lspci
...
08:01.0 RAM memory: Red Hat, Inc. Inter-VM shared memory (rev 01)

您需要获得权限。例如,主机中写入的程序/用户可以成为 kvm 组的一部分(再次强调,不建议轻易授予权限,因为它授予的权限并非每个人都应该拥有)。

但是然后您就可以按照教程所概述的那样(嗯,相应地修改大小和 pci id)从客户机和主机访问它。

相关内容