Передача файлового дескриптора через libvirt в qemu (C api) - PullRequest
1 голос
/ 14 марта 2019

Как видно из названия, я ищу способ передать дескриптор файла в стиле C (int, мое приложение использует socketpair, и мне нужно передать один из дескрипторов файлов) через API libvirt в запущенный процесс QEMU .

На данный момент я нашел следующее:

  • virDomainOpenGraphics
  • virDomainOpenGraphicsFD

к сожалению, они мне не помогают, поскольку они предназначены только для графики,

  • virDomainCreateWithFiles
  • virDomainCreateXMLWithFiles

к сожалению, они также не помогают, потому что согласно документации они работают только с технологией виртуализации на основе контейнеров.

Любой способ передать файловый дескриптор в qemu для своих собственных целей с помощью API libvirt был бы хорош. За исключением способа сделать это, мне, возможно, придется написать полностью настраиваемый бэкэнд для QEMU, однако мое приложение уже вложено в использование libvirt, и изменение будет значительным.

РЕДАКТИРОВАТЬ: дескриптор файла будет сокетом, он не используется непосредственно QEMU, у меня есть библиотека LD_PRELOAD-ed, которая использует этот сокет вместо того, чтобы делать некоторые хаки на месте, когда qemu пытается читать / писать в конкретный диск. «Хаки» различаются для каждого компьютера и для каждого запуска, запись этой информации на диск для каждой виртуальной машины перегружает систему хранения и вызывает очень значительное замедление, которое я не могу себе позволить.

1 Ответ

1 голос
/ 14 марта 2019

За исключением специального случая virDomainOpenGraphics, libvirt, как правило, не ожидает, что приложение должно передавать предварительно открытые файловые дескрипторы. Вместо этого приложения сообщают libvirt, к каким ресурсам требуется доступ к QEMU, и, если необходимо, libvirt откроет ресурс и передаст свой файловый дескриптор в QEMU, при этом приложению не нужно заботиться об этих деталях низкого уровня.

Вопрос не говорит, зачем вам сдавать FD - что это за FD и для чего он будет использоваться QEMU. Поэтому трудно дать какие-либо указания относительно следующего шага.

...