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

Passing a file descriptor through libvirt to qemu (C api)

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

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

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

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

我可以使用 libvirt API 出于我自己的目的将文件描述符传递给 qemu 的任何方式都很棒。除非有办法做到这一点,否则我可能必须为 QEMU 编写一个完全自定义的后端,但是我的应用程序已经投入使用 libvirt 并且变化将是显着的。

编辑:文件描述符是一个套接字,QEMU 不直接使用它,我有一个 LD_PRELOAD-ed 库,当 qemu 时,它会使用这个套接字来做一些 in-place 黑客攻击尝试 read/write 到特定磁盘。 "hacks" 在 per-machine 和 per-run 的基础上有所不同,将此信息写入每个 VM 的磁盘会使存储系统负担过重并导致非常严重的减速,这是我无法承受的.

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

问题没有说明为什么需要通过 FD - FD 是什么类型以及 QEMU 将使用它做什么。因此很难就下一步要采取的措施提供任何指导。