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

问题描述 投票:1回答:1

正如标题所说,我正在寻找一种方法来传递一个C风格的文件描述符(int,我的应用程序使用socketpair,我需要传递一个文件描述符)通过libvirt API到启动的QEMU进程。

到目前为止我找到了以下内容:

  • virDomainOpenGraphics
  • virDomainOpenGraphicsFD

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

  • virDomainCreateWithFiles
  • virDomainCreateXMLWithFiles

遗憾的是,这些也无济于事,因为根据文档,他们只使用基于容器的虚拟化技术。

我可以使用libvirt API以任何方式将文件描述符传递给qemu用于我自己的目的。除非有一种方法可以做到这一点,我可能要为QEMU编写一个完全自定义的后端,但是我的应用程序已经投入使用libvirt并且更改将是重要的。

编辑:文件描述符将是一个套接字,它不是由QEMU直接使用,我有一个LD_PRELOAD-ed库,当qemu尝试读/写特定磁盘时,它将使用此套接字来执行一些就地黑客攻击。 “黑客”在每台机器和每次运行的基础上有所不同,将这些信息写入每个虚拟机的磁盘会使存储系统负担过重,导致我无法负担的非常大的减速。

c virtualization qemu libvirt
1个回答
1
投票

除了virDomainOpenGraphics的特殊情况之外,libvirt通常不希望应用程序需要传递预先打开的文件描述符。相反,应用程序会告诉libvirt QEMU需要访问哪些资源,如果合适,libvirt将打开资源并将其文件描述符传递给QEMU,而无需关注此低级别详细信息。

问题并没有说明为什么你需要通过FD - 什么样的FD以及它将由QEMU使用什么。所以很难就下一步采取任何指导。

© www.soinside.com 2019 - 2024. All rights reserved.