LINUX.ORG.RU

Запускаем kvm + virgl

 , , , ,


0

3

Коллеги, кто успешно использует kvm с virgl на любой системе, отзовитесь.

Если не считать проброс PCI-устройства, то сегодня virgl - это единственный способ получить 3D-ускорение в гостевой системе, достаточное для просмотра видео высокого разрешения и, простите, для открытия современных свистящих сайтов в браузере. :)

Речь идет про конфигурацию, которая в virt-manager получается следующим образом:

  1. В секции «Video» устанавливается Model = virtio и галка на «3D Acceleration»
  2. В секции «Display» выбирается Listen type = none и ставится галка на «OpenGL»

Соответствующий XML:

<graphics type="spice">
  <listen type="none"/>
  <image compression="off"/>
  <gl enable="yes" rendernode="/dev/dri/by-path/pci-0000:XX:00.0-render"/>
</graphics>

<video>
  <model type="virtio" heads="1" primary="yes">
    <acceleration accel3d="yes"/>
  </model>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
</video>

После чего имеем… лагающее слайдшоу. Возможно из-за vblank_mode=3 по умолчанию.

Если же использовать vblank_mode=0 (указав через переменные окружения при запуске virt-manager), то FPS полный, видео успешно проигрываются. Но раз в пару часов падают хостовые иксы, либо система встает колом - ребутнуться можно только через sysrq.

Получилось найти быстрый и гарантированный способ воспроизведения падения:

  1. Стартуем ВМ:
qemu-system-x86_64 \
  -smp 4 -m 8192 -enable-kvm -cpu host \
  -vga none -device virtio-vga-gl \
  -display sdl,gl=on,grab-mod=rctrl \
  video_test.qcow2 
  1. В гостевой системе запускаем glxgears или любое другое требовательное к графике приложение.

  2. Дальше достаточно поальттабаться между окнами в гостевой системе или между ВМ и хостом. Обычно достаточно секунд 20, чтобы словить.

Причем, как видно из примера выше, неважно, работать ли с virt-manager и Spice или вручную запускать qemu-system-x86_64 со, скажем, SDL - падения происходят везде.

Более того, проблема воспроизводится как на встроенной графике Intel (10 gen), так и на интегрированном видео AMD, на разных компьютерах. В последний раз тестировалось на Debian 12 и QEMU 7.2.13. Но актуально и для Debian 11, и для Ubuntu 22.04: на всех компьютерах с virt-manager, которые попадались в руки, virtio стабильно лагает (дефолтный vblank_mode=3) или падает (vblank_mode=0).

До сих пор не верится, что никто с этим не сталкивался.



Последнее исправление: yet_another_cat (всего исправлений: 4)

достаточное для просмотра видео высокого разрешения

А там ещё больше пердолиться надо, ускорение видео вообще не в апстриме, вроде бы, у меня так и не получилось завести
аппаратное декодирование видео в виртуальной машине

на встроенной графике Intel (10 gen)

Можно ещё попробовать GVT-g

TheAnonymous ★★★★★
()
Ответ на: комментарий от TheAnonymous

Методом, описанным выше, оно заводится (с vblank_mode=0). Но раз в пару часов всё упадет. :)

Должно быть в апстриме, все компоненты устанавливались из репозиториев Debian Stable.

Обсуждение темы в issues virt-manager.

yet_another_cat
() автор топика

До сих пор не верится, что никто с этим не сталкивался.

Посмотри в репе, когда последний раз была активная работа над virgl. Хрустальный шар мне говорит, что его забросили лет 5-7-10, а то и все 12 назад.

LamerOk ★★★★★
()
Ответ на: комментарий от yet_another_cat

Есть 3d ускорение (опенгл грубо говоря), а есть аппаратное декодирование видео (libva). Чтобы смотреть видео высокого разрешения с аппаратным ускорением, нужно второе.

TheAnonymous ★★★★★
()
Ответ на: комментарий от LamerOk

Посмотри в репе,

Сам глянул, жизнь там есть, но скорее теплиться, чем кипит. Попробуй перед запуском qemu-system-x86_64 выставить LIBGL_ALWAYS_SOFTWARE=1 - в теории обработка графики должна уйти на хостовый llvmpipe (который надо не забыть поставить, если его нет).

Но вообще проще будет впенюдирить сам llvmpipe на гостя.

LamerOk ★★★★★
()
Ответ на: комментарий от TheAnonymous

со всем необходимым API?

Для неё как раз есть, и под линуксы, и под шинду,

Да хера с два - попробуй любое GL / Direct X / Vulkan приложение запустить.

Под венду там прожиточный минимум, чтоб окошки нарисовать.

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Ну производительности в каких-то реальных 3d задачах там всё равно не будет, с софтовым рендером то, однако dxdiag (на десяточке) показывает «Ускорение Direct3D: Вкл». И окошки рисуются с тенями.
На семёрочке вроде драйвер работал без aero, а на десятке, возможно, встроенный (софтовый) directx, и вообще там композитинг всегда работает, даже без драйверов.

В любом случае, с драйверами для virgl под винду на данный момент всё ещё хуже (какие-то вроде есть, но только под opengl), и если с аппаратным ускорением ещё имело бы смысл заморочиться, то без него зачем это непонятно

TheAnonymous ★★★★★
()
Ответ на: комментарий от TheAnonymous

На семёрочке вроде драйвер работал без aero,

Да, ниже 10-ки всё уныло.

с драйверами для virgl под винду на данный момент всё ещё хуже

А они вообще есть? Я был уверен, это чисто проброс меса драйвера в месадрайвер.

dxdiag (на десяточке) показывает «Ускорение Direct3D: Вкл»

Значит, шапка всё же заморочилась.

LamerOk ★★★★★
()

Если не считать проброс PCI-устройства, то сегодня virgl - это единственный способ получить 3D-ускорение в гостевой системе, достаточное для просмотра видео высокого разрешения и, простите, для открытия современных свистящих сайтов в браузере. :)

Ну врёти же, врубаем виртуализацию и guestadditions в virtualbox и всё - браузер работает быстро. Видео не пробовал, но вангую даже высокое разрешение на CPU нормально.

Bfgeshka ★★★★★
()
Ответ на: комментарий от cdtemp

Он все перепутал. И не с 11го, а с 12го. И оно ещё не допилено, т.е. в мэйнстримном ядре использовать не получится, надо патчить. Называется sr-iov. Вроде обещают завезти в драйвере xe, который идёт на замену i915. Оно позволяет одной физической видяхе представляться в системе несколькими виртуальными, которые можно пробрасывать в гостей. Раньше было gvt-g, но его просыпали по дороге в светлое будущее.

Ещё говорят что профессиональные серии от зелёных и красных такое умеют, но я в живую не встречал.

torm7
()