Libvirt qemu vfio устройство не поддерживает никакой (известный) метод отображения для проброса iGPU.

Вопрос или проблема

Могу ли я получить параметр отображения hostdevice libvirt (передача iGPU) для использования в качестве экрана для виртуальной машины?

Я использую систему Ubuntu 24.10 с libvirt 10.6.0 и qemu-system версии 9.0.2.

У меня настроена система, в которой я разделил интегрированную iGPU Intel i5-13500 на 3 виртуальные видеокарты с использованием пользовательского модуля ядра i915 (репозиторий strongtz на GitHub) и SR-IOV. Виртуальная машина работает ожидаемо, и передача одной из виртуальных видеокарт iGPU в виртуальную машину также работает без сбоев.

У меня есть специфический случай, почему я хотел бы, чтобы iGPU имел устройство вывода, так как виртуальные мониторы не подходят, но у меня нет доступа к аппаратному обеспечению, и я не могу подключить муляж HDMI к материнской плате.

До недавнего времени было только 2 способа получить доступ к графическому интерфейсу виртуальной машины: VNC-консоль (которая работает только с эмулированными GPU) и не может работать с переданной GPU, ИЛИ программное обеспечение для удаленного рабочего стола. Однако, начиная с libvirt 10.3.0, появился новый параметр, который можно добавить в раздел “hostdevice” в XML-конфигурации виртуальной машины, называемый “display”. Значение может быть либо “on”, либо “off”, и по умолчанию оно выключено.

Согласно документации, предполагается, что этот параметр должен обеспечивать функциональность перенаправления VNC для iGPU, позволяя мне использовать VNC (virt-viewer) для доступа к графическому интерфейсу виртуальной машины. Однако мне не удается заставить это работать, и ошибка, которую я получаю от qemu при запуске виртуальной машины, следующая:

vfio 0000:00:02.1: vfio: device doesn't support any (known) display method

Я также не могу найти никаких рабочих примеров такой конфигурации в сети и никаких вопросов по поводу ошибок vfio, которые я получаю.

Интересно, возможно ли это вообще, и если да, то каковы требования.

Я пытался добавлять вариации разделов “graphics” и “video” в XML-конфигурацию виртуальной машины, а также пытался передавать параметры “display” qemu напрямую в командной строке qemu, но ни одна итерация допустимой и работающей конфигурации не продвинула меня далее. При запуске виртуальной машины требуется около 5 секунд ожидания, прежде чем возникает ошибка о невозможности запуска виртуальной машины.

Я также исследовал документацию libvirtd и тестовые конфигурационные файлы GitHub для виртуальных машин. Также исследовал документацию qemu и пробовал различные параметры “display”.

Пример актуальной конфигурации для раздела hostdevice, который у меня работает (без параметра display), был следующим:

<hostdev mode="subsystem" type="pci" managed='yes'>
  <driver name="vfio"/>
  <source>
    <address domain='0x0000' bus="0x00" slot="0x02" function='0x1'/>
  </source>
  <address type="pci" domain='0x0000' bus="0x01" slot="0x00" function='0x0' multifunction='on'/>
</hostdev>

В XML-конфигурации виртуальной машины не было разделов “graphics” и “video”.

Конфигурация, которую я пытаюсь настроить, такова:

<graphics type="vnc" port="-1" autoport="yes">
  <listen type="address"/>
</graphics>
<video>
  <model type="none"/>
</video>
<hostdev mode="subsystem" type="pci" managed='yes' display='on'>
  <driver name="vfio"/>
  <source>
    <address domain='0x0000' bus="0x00" slot="0x02" function='0x1'/>
  </source>
  <address type="pci" domain='0x0000' bus="0x01" slot="0x00" function='0x0' multifunction='on'/>
</hostdev>

Кто-нибудь добился работы VNC viewer с переданной GPU в libvirt и/или qemu? И будет ли такое решение отображаться как монитор, подключенный к GPU, из виртуальной машины?

Ответ или решение

Теория

Вопрос, который вы подняли, связан с использованием iGPU в режиме passthrough в виртуальных машинах, управляемых с помощью Libvirt и QEMU. Основная задача — сделать так, чтобы iGPU, использованный в вашей VM, мог предоставлять дисплейный вывод, который был бы доступен через VNC или другой удаленный доступ. Вы упомянули использование функциональности SR-IOV для разбиения iGPU на виртуальные графические карты, что уже само по себе весьма прогрессивное решение. Ваша проблема заключается в ошибке, указывающей, что устройство не поддерживает известные методы отображения. Это может быть связано с ограничениями поддержки в QEMU или неверной конфигурацией параметров отображения.

Пример

Вы описали, что работаете на Ubuntu 24.10 с libvirt 10.6.0 и qemu-system 9.0.2. Ваша конфигурация для hostdevice включает секцию <hostdev>, но вы попытались добавить возможность отображения с помощью параметров <graphics> и <video>. Здесь корень вашей проблемы: сейчас нет прямой поддержки для использования iGPU в режиме passthrough с VNC через простое добавление этих параметров. Это связано с тем, что, когда iGPU используется в режиме passthrough, он напрямую управляется гостевым ОС, и QEMU не может эмулировать его вывод для VNC.

Применение

  1. Обновление ПО: Убедитесь, что все компоненты вашего стека (QEMU, Libvirt) обновлены до последних версий, где, возможно, могли бы быть исправлены такие ограничения.

  2. Проверка документации и форумов: Пройдите через документацию и обсуждения на форумах для поиска примеров конфигурации, если функция display действительно должна поддерживать вам необходимые функции — это может быть недокументированное ограничение.

  3. Исследование альтернативных решений: В текущем состоянии, возможно, лучшим решением будет настройка удаленного рабочего стола. Например, использование RDP или SPICE, если ваша гостевая операционная система это поддерживает. Это может стать эффективным обходным путем для ваших требований.

  4. Техническая поддержка или сообщество: Контактируйте сообществом или поддержкой разработчиков соответствующих модулей. Maven или mailing lists могут быть полезными для получения информации о возможных обходных решениях или будущих обновлениях.

Таким образом, текущие ограничения в QEMU и Libvirt по отношению к поддержке passthrough iGPU могут требовать внесения изменений в настройку или использования альтернативных решений для достижения необходимой функциональности.

Оцените материал
Добавить комментарий

Капча загружается...