Вопрос или проблема
У меня установлен virt-manager на компьютере с Fedora Workstation 26.
Я настроил виртуальную машину с Windows 11 Educational.
У меня есть сервер отображения Spice с типом подключения “None” и включенным OpenGL на моем графическом процессоре NVIDIA.
Я использую проприетарные драйверы NVIDIA.
Я также использую virtio video с включенной 3D-акселерацией.
Однако, когда я запускаю виртуальную машину, появляется следующая ошибка:
Error starting domain: internal error: process exited while connecting to monitor: 2022-07-08T13:45:11.588270Z qemu-system-x86_64: egl: eglInitialize failed
2022-07-08T13:45:11.588413Z qemu-system-x86_64: Failed to initialize EGL render node for SPICE GL
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 72, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 108, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/object/libvirtobject.py", line 57, in newfn
ret = fn(self, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/object/domain.py", line 1384, in startup
self._backend.create()
File "/usr/lib64/python3.10/site-packages/libvirt.py", line 1353, in create
raise libvirtError('virDomainCreate() failed')
libvirt.libvirtError: internal error: process exited while connecting to monitor: 2022-07-08T13:45:11.588270Z qemu-system-x86_64: egl: eglInitialize failed
2022-07-08T13:45:11.588413Z qemu-system-x86_64: Failed to initialize EGL render node for SPICE GL
Как я могу заставить мою виртуальную машину работать с 3D-акселерацией на графическом процессоре NVIDIA?
Как указано здесь и здесь, virtio-gpu в настоящее время работает только с Linux-гостями, но в будущем он планирует быть доступным и для Windows-гостей. Однако, если вы хотите, чтобы это работало из коробки, кажется, что драйвер nouveau лучше, чем драйвер NVIDIA (я не могу найти источники для этого, но я где-то читал об этом во время моего исследования в интернете, плюс я сейчас сталкиваюсь с трудностями достичь этого с драйвером NVIDIA, и я нашел этот пост об этом virtion-gpu и драйверы NVIDIA).
Если вы хотите 3D-акселерацию для Windows-гостей, у вас есть два варианта:
- Использовать PCI пасс-тру, но вам понадобятся две видеокарты
- Использовать vGPU от NVIDIA
Вам потребуется wiki arch linux для получения инструкций.
Два варианта PCI пасс-тру и vGPU сложны для обычных настольных компьютеров/ноутбуков с единственной потребительской видеокартой CPU. Оставшийся вариант — использование virtio-gpu, который требует секции драйвера egl-headless, как отмечено здесь, который работает только с qemu:///session после недавних обновлений libvirt.
После настройки это хорошо работает для Linux-гостей прямо из коробки, но производительность значительно медленнее по сравнению с хост-картой NVIDIA. Даже в этом случае это отлично подходит для десктопных эффектов и всего остального, хотя не подходит для игр или других требовательных 3D-приложений.
Проблема для Windows-гостей в том, что драйвер в этом PR https://github.com/virtio-win/kvm-guest-drivers-windows/pull/943 больше не работает. vGPU официально не поддерживается на потребительских картах, и неофициальные разблокирующие патчи в основном устарели и не работают для недавних ядер (также могут быть рискованными). Так что, думаю, практичный способ для Windows-гостей — это PCI пасс-тру, где вам потребуется как минимум две видеокарты (например, интегрированная и дискретная карты), но та, которая будет использоваться пасс-тру, больше не будет доступна на хосте.
.
Ответ или решение
Проблема, с которой вы столкнулись, связана с инициализацией рендер-узла EGL для SPICE GL при использовании проприетарных драйверов NVIDIA в virt-manager, установленном на Fedora Workstation 26. Давайте разберем причину и предложим пути решения проблемы.
Теория:
Прежде всего, важно понять, что при виртуализации трехмерного графического ускорения используются различные технологии и драйверы, которые должны корректно взаимодействовать друг с другом. В вашем случае используется virtio-video с включённой 3D-акселерацией через SPICE, а также проприетарные драйверы NVIDIA. Эти драйверы, хоть и обеспечивают замечательную производительность в хост-системе, могут иметь ограничения или несовместимости с некоторыми аспектами виртуализации.
Проблема, которую вы описали (ошибка eglInitialize), указывает на то, что компонент EGL не смог корректно инициализироваться. Это может происходить из-за несовместимости между драйверами NVIDIA и нуждами виртуализированных дисплейных сервисов, таких как SPICE GL.
Пример:
На практике известно, что virtio-gpu, который является компонентом графического стека в QEMU и используется для предоставления виртуализированных графических возможностей, на данный момент полностью поддерживается только для Linux-гостей. Хотя ведутся работы для расширения поддержки Windows-гостей, по умолчанию это не работает. Также распространенные рекомендации касаются использования драйвера nouveau вместо проприетарного NVIDIA, чтобы избежать проблем с виртуализацией, хотя это может повлиять на производительность.
Применение:
Теперь перейдем к решению вашей проблемы. Учитывая все изложенное, у вас есть несколько вариантов:
-
Использование PCI pass-through:
- Если у вас есть доступ к двум видеокартам (например, встроенная и дискретная), вы можете воспользоваться технологией PCI пасс-тру для передачи одной из карт напрямую в виртуальную машину. Это обеспечит гостевую операционную систему практически полными графическими возможностями данной карты. Однако видеокарта, переданная в гостевую систему, станет недоступной в хосте.
-
Использование технологии vGPU от NVIDIA:
- NVIDIA предлагает технологии виртуализации графики (vGPU), которые позволяют разделять аппаратные ресурсы графической карты между несколькими виртуальными машинами. Однако поддержка vGPU для потребительских видеокарт может быть ограниченной, и использование этой технологии может потребовать дополнительных лицензий.
-
Настройка на основе экспериментального драйвера:
- При использовании драйвера virtio-gpu становится возможным увеличение производительности 3D-графики в Linux-гостях. Однако для Windows это остается экспериментальным маршрутом. Возможно, стоит следить за обновлениями драйверов в проекте KVM-guest-drivers-windows.
-
Переход на использование Nouveau или других альтернатив:
- Попробуйте использовать open-source драйвер Nouveau. Хотя он может быть менее производителен для интенсивных графических приложений, он предлагает лучшую совместимость для задач виртуализации. Вы могли бы отключить NVIDIA-драйвер и попробовать запустить виртуальную машину при помощи Nouveau.
-
Ожидание или поиск исправлений:
- Подобные проблемы часто решаются с обновлениями драйверов или программного обеспечения виртуализации. Обратитесь к документации проекта virt-manager, QEMU, или NVIDIA для получения информации о возможных обновлениях.
Итак, чтобы вы смогли устранить данную проблему, вы можете попытаться выполнить один из предложенных шагов. Учитывая обстоятельства, перепроверка конфигурации, анализ последний обновлений, и исследование возможностей использования других драйверов могут существенно помочь в решении вашей задачи.