Эмулирует ли QEMU достаточно функций, чтобы vfio работал в гостевой системе?

Я рассматриваю возможность использования vfio вместо uio для доступа к устройству PCI из кода пространства пользователя в гостевой системе QEMU.

Может ли Linux, работающий как гость QEMU x86_64, использовать vfio, чтобы сделать эмулированное PCI-устройство доступным для программы пользовательского пространства, работающей в гостевой системе?

Мне это неясно, потому что vfio, по-видимому, интенсивно использует функции аппаратной виртуализации (такие как IOMMU), и я не уверен, эмулирует ли QEMU их в той степени, в которой это необходимо для работы.

Обратите внимание, что я не пытаюсь пройти через реальные устройства PCI к гостю QEMU, для чего традиционно используется vfio (самим QEMU). Вместо этого я изучаю, является ли vfio подходящей альтернативой uio в контексте гостя.


person davidA    schedule 15.03.2018    source источник


Ответы (1)


В вопросе не упоминаются какие-либо уточнения относительно поддержки vfio в гостевой системе, с которыми вы, возможно, уже сталкивались сами. Тем не менее, было бы полезно рассмотреть это в ответе.

QEMU обеспечивает эмуляцию VT-d (гость vIOMMU). Однако для включения этого требуется, чтобы был выбран тип платформы Q35. Например, можно включить устройство vIOMMU в QEMU со следующими параметрами, которые необходимо передать приложению x86_64-softmmu/qemu-system-x86_64 при запуске:

-machine q35,accel=kvm,kernel-irqchip=split -device intel-iommu,intremap=on

Это даст возможность привязать устройство в гостевой системе к vfio-pci. Дополнительную информацию можно найти на вики QEMU: Features/VT-d.

Если вы попытались следовать этому подходу и столкнулись с неисправностью, было бы неплохо, если бы вы пролили свет на ваши точные наблюдения.

person stackinside    schedule 03.09.2018
comment
Спасибо за Ваш ответ. В итоге я пока остановился на uio, но я могу вернуться к vfio в будущем, и если да, то я вернусь к этому. - person davidA; 04.09.2018