通过libvirt将文件描述符传递给qemu(C api)

时间:2019-03-14 15:24:24

标签: c virtualization qemu libvirt

正如标题所述,我正在寻找一种通过libvirt API传递C样式文件描述符的方法(int,我的应用程序使用套接字对,并且我需要传递一个文件描述符)到启动的QEMU进程中

到目前为止,我发现了以下内容:

  • virDomainOpenGraphics
  • virDomainOpenGraphicsFD

不幸的是,这些似乎对我没有帮助,因为它们仅用于图形,

  • virDomainCreateWithFiles
  • virDomainCreateXMLWithFiles

遗憾的是,这些方法也无济于事,因为根据文档,它们仅适用于基于容器的虚拟化技术。

无论哪种方式,我都可以使用libvirt API将文件描述符传递给qemu以达到自己的目的。禁止这样做,我可能不得不为QEMU编写一个完全自定义的后端,但是我的应用程序已经投入使用libvirt的投资,并且更改将是重大的。

编辑:文件描述符将是一个套接字,QEMU不直接使用它,我有一个LD_PRELOAD版本的库,当qemu尝试读/写到该库时,它将使用此套接字来做一些就地破解特定的磁盘。 “黑客”在每台机器上以及每次运行时都不同,将这些信息写入每个VM的磁盘会给存储系统带来负担,并导致我无法承受的非常严重的速度下降。

1 个答案:

答案 0 :(得分:1)

除了在virDomainOpenGraphics的特殊情况下,libvirt通常不会期望应用程序需要传递预打开的文件描述符。相反,应用程序会告诉libvirt QEMU需要访问哪些资源,如果合适,libvirt会打开资源并将其文件描述符传递给QEMU,而应用程序无需关心此底层细节。

问题并没有说明为什么需要通过FD-QEMU将使用哪种FD?因此,很难为下一步的工作提供任何指导。