LINUX.ORG.RU

Intel GVT-g: Ubuntu 20.04.4 в гостях у AlmaLinux 8.5

 , , , ,


2

2

Собственно, в заголовке всё сказано. Для тех, кто не понял — Intel GVT-g это технология, что позволяет отдавать часть ресурсов встроенной видеокарты в виртуальную машину так, чтобы вся графика внутри ВМ считалась напрямую на GPU хоста. Аналог аппаратного ускорения виртуализации, что применяется для CPU уже давно. Да, это здорово улучшает производительность графики в виртуальных машинах, хотя лично я и не замерял разницу с QXL (стандартная виртуальная видеокарта в Qemu).

Эта технология появилась в Linux уже достаточно давно, но до сих пор требует кучу манипуляций руками, чтобы её завести. Я заводил через связку libvirtd+qemu-kvm, что является типичным решением для RHEL-based дистрибутивов, который у меня и стоит. Сразу скажу, что мой способ не единственный, и даже в рамках той же связки можно и иначе настроить. Но расскажу, как сделал я (если честно, это просто первый способ, что у меня сработал, я и другие пробовал):

  • Для начала, поставил все пакеты для виртуализации и включил libvirtd:
yum groupinstall "Virtualization Platform" "Virtualization Hypervisor" "Virtualization Client" "Virtualization Host"
systemctl enable --now libvirtd
  • Добавил своего пользователя в нужные группы: usermod -aG libvirt,kvm vsevolod

  • Этот шаг опционален, и сделал я его под конец, но имеет смысл включить Nested Virtualisation (позволяет запускать ВМ внутри ВМ с ускорением):

[vsevolod@localhost ~]$ grep -v '^#' /etc/modprobe.d/kvm.conf
options kvm_intel nested=1
  • Включил саму технологию Intel GVT-g, я делал это по этому мануалу: https://blog.tmm.cx/2020/05/15/passing-an-intel-gpu-to-a-linux-kvm-virtual-machine/ — сразу оговорюсь, что я делал далеко не всё, как там написано, и помимо этого ещё и на ArchWiki ориентировался. Но именно включил, как там и сказано:
[vsevolod@localhost ~]$ grep -v '^#' /etc/default/grub | grep GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="crashkernel=auto i915.enable_gvt=1 i915.enable_fbc=0"
[vsevolod@localhost ~]$ cat /etc/modules-load.d/kvm-gvt-g.conf
kvmgt
vfio-iommu-type1
vfio-mdev
  • После включения я настроил так, чтобы виртуальная видеокарта появлялась при загрузке автоматически:
[vsevolod@localhost ~]$ cat /etc/systemd/system/add-gvt-g-device.service 
[Unit]
Description=Add Intel GVT-g virtual GPU on boot

[Service]
ExecStart=/usr/local/bin/add-gvt-g.sh
Type=oneshot

[Install]
WantedBy=graphical.target
After=graphical.target
[vsevolod@localhost ~]$ cat /usr/local/bin/add-gvt-g.sh
#!/bin/bash
echo 'a3356d9c-35e6-4f1a-aac9-b075e5cb5d1c' > /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V4_4/create
exit
  • А вот самое интерсное — настройку виртуальной машины так, чтобы она использовала GVT-g, я уже проводил в основном по ArchWiki: https://wiki.archlinux.org/title/Intel_GVT-g , там много методов это сделать, я выбрал тот, что у меня сработал и был мне достаточен. Возможно, другие из неиспробованых тоже бы сработали, пока не проверял.

  • Честно говоря, я до сих пор делаю setenforce 0 перед запуском ВМ, так как я пока не разобрался с настройкой SELinux, и он при запуске ВМ с GVT-g страшно ругается.

  • И метод, что я выбрал, имеет особенность — экран у ВМ становится доступен только после старта самого Linux, GRUB2 в принципе не виден, как я понял. Поэтому приходится сначала просто делать ВМ, потом уже ставить в обычную ВМ Linux, а уже потом перенастраивать ВМ на GVT-g.

  • Ну установка довольно банальна, я делал всё через Virtual Machine Manager: скачал в /var/lib/libvirt/images/ .iso нужного Linux, потом создал ему там диск qemu-img create -f qcow2 ubuntu2004.qcow2 128G (в этой версии virt-manager вместо динамических статические диски делает, вроде баг такой), после чего поставил и настроил ОС — ничего особенного, чтобы было что рассказывать.

  • Уже после установки выключил ВМ и переделал её на использование GVT-g, сначала забекапил конфиг virsh dumpxml Ubuntu > Ubuntu-backup.xml, после чего открыл на редактирование через virsh edit Ubuntu, и там вот что сделал:

  • Заменил первую строку конфига <domain type='kvm'> на <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

  • Удалил все устройства <graphics> и <video>, после чего добавил нужные мне:

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
      <source>
        <address uuid='a3356d9c-35e6-4f1a-aac9-b075e5cb5d1c'/>
      </source>
    </hostdev>
    <graphics type='spice'>
      <listen type='none'/>
      <gl enable='yes' rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/>
    </graphics>
    <video>
      <model type='none'/>
    </video>
  • После сохранения конфига и старта ВМ всё работает, более ничего настраивать не нужно.

P. S.: X11 на хосте потому, что ещё я VirtualBox использую, а он с Wayland не дружит; а ядро у гостя lowlatency потому, что так звук на проброшенной USB звуковой карте не глючит.

>>> Просмотр (1920x1080, 417 Kb)

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 4)
Ответ на: комментарий от LINUX-ORG-RU

Нет, пока не тестировал. Они могут и от CPU зависеть, так что не показатель… есть ли бенчи, что грузят чисто GPU?

Vsevolod-linuxoid ★★★★★
() автор топика
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Пока прогнал glxgears — на Ubuntu результат даже чуть лучше. Сравнивал в X11 сеансах.

Vsevolod-linuxoid ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Например на моём хосте, вот так.

dron@gnu:~$ glmark2 
...
=======================================================
                                  glmark2 Score: 4488 
=======================================================
dron@gnu:~$ 

Оно комплесно тестирует, тестуры, шейдеры, растеризацию, геометрию.

Прогони на хосте и в виртуалке и выложи. Будет полезно думаю многим прикинуть и посмотреть на разницу

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

Чтобы прогнать это на AlmaLinux, его сначала собрать нужно. Наверное с флешки в Live режиме на той же Ubuntu прогоню.

Vsevolod-linuxoid ★★★★★
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Наверное с флешки в Live режиме на той же Ubuntu прогоню.

Это даже лучше будет. Хотя заморачиваться, ну будет время и желание если только. Я было хотел сначала аналог бублика виндового накидать по быстрому и скинуть. Но чёт лень, да и не так информативно как glmark2. Правда оно GLES тестирует, но не суть, вернее в корне суть одинакова.

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

Вот вывод с виртуалки:

user@ubuntu:~$ glmark2
=======================================================
    glmark2 2021.02
=======================================================
    OpenGL Information
    GL_VENDOR:     Intel
    GL_RENDERER:   Mesa Intel(R) HD Graphics 5500 (BDW GT2)
    GL_VERSION:    4.6 (Compatibility Profile) Mesa 21.2.6
=======================================================
[build] use-vbo=false: FPS: 355 FrameTime: 2.817 ms
[build] use-vbo=true: FPS: 407 FrameTime: 2.457 ms
[texture] texture-filter=nearest: FPS: 386 FrameTime: 2.591 ms
[texture] texture-filter=linear: FPS: 388 FrameTime: 2.577 ms
[texture] texture-filter=mipmap: FPS: 394 FrameTime: 2.538 ms
[shading] shading=gouraud: FPS: 385 FrameTime: 2.597 ms
[shading] shading=blinn-phong-inf: FPS: 384 FrameTime: 2.604 ms
[shading] shading=phong: FPS: 373 FrameTime: 2.681 ms
[shading] shading=cel: FPS: 368 FrameTime: 2.717 ms
[bump] bump-render=high-poly: FPS: 334 FrameTime: 2.994 ms
[bump] bump-render=normals: FPS: 407 FrameTime: 2.457 ms
[bump] bump-render=height: FPS: 396 FrameTime: 2.525 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 308 FrameTime: 3.247 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 197 FrameTime: 5.076 ms
[pulsar] light=false:quads=5:texture=false: FPS: 355 FrameTime: 2.817 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 184 FrameTime: 5.435 ms
[desktop] effect=shadow:windows=4: FPS: 270 FrameTime: 3.704 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 179 FrameTime: 5.587 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 204 FrameTime: 4.902 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 196 FrameTime: 5.102 ms
[ideas] speed=duration: FPS: 305 FrameTime: 3.279 ms
[jellyfish] <default>: FPS: 278 FrameTime: 3.597 ms
[terrain] <default>: FPS: 113 FrameTime: 8.850 ms
[shadow] <default>: FPS: 234 FrameTime: 4.274 ms
[refract] <default>: FPS: 154 FrameTime: 6.494 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 367 FrameTime: 2.725 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 373 FrameTime: 2.681 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 363 FrameTime: 2.755 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 369 FrameTime: 2.710 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 368 FrameTime: 2.717 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 370 FrameTime: 2.703 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 367 FrameTime: 2.725 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 371 FrameTime: 2.695 ms
=======================================================
                                  glmark2 Score: 318 
=======================================================

Запускал в X11 сеансе.

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

Вангую что на голом железе раза в 2 больше будет результат. Но в целом FPSы высокие, игры даже некоторые вполне себе пойдут. А оболочки современные вполне себе с комфортом должны летать, так что вполне себе полезная штука.

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

На реальном железе выше в 3 раза, но у виртуалки ещё и CPU урезан вдвое, 2 ядра из 4. И это всё же совместное использование GPU.

Ну короче, вот вывод с LiveFlash Ubuntu Desktop 20.04.3, на которой я ничего не обновлял, только поставил сам бенч:

ubuntu@ubuntu:~$ glmark2
=======================================================
    glmark2 2021.02
=======================================================
    OpenGL Information
    GL_VENDOR:     Intel
    GL_RENDERER:   Mesa Intel(R) HD Graphics 5500 (BDW GT2)
    GL_VERSION:    4.6 (Compatibility Profile) Mesa 21.0.3
=======================================================
[build] use-vbo=false: FPS: 1576 FrameTime: 0.635 ms
[build] use-vbo=true: FPS: 1732 FrameTime: 0.577 ms
[texture] texture-filter=nearest: FPS: 1506 FrameTime: 0.664 ms
[texture] texture-filter=linear: FPS: 1500 FrameTime: 0.667 ms
[texture] texture-filter=mipmap: FPS: 1529 FrameTime: 0.654 ms
[shading] shading=gouraud: FPS: 1457 FrameTime: 0.686 ms
[shading] shading=blinn-phong-inf: FPS: 1461 FrameTime: 0.684 ms
[shading] shading=phong: FPS: 1420 FrameTime: 0.704 ms
[shading] shading=cel: FPS: 1443 FrameTime: 0.693 ms
[bump] bump-render=high-poly: FPS: 1098 FrameTime: 0.911 ms
[bump] bump-render=normals: FPS: 1338 FrameTime: 0.747 ms
[bump] bump-render=height: FPS: 1308 FrameTime: 0.765 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1000 FrameTime: 1.000 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 607 FrameTime: 1.647 ms
[pulsar] light=false:quads=5:texture=false: FPS: 1165 FrameTime: 0.858 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 637 FrameTime: 1.570 ms
[desktop] effect=shadow:windows=4: FPS: 907 FrameTime: 1.103 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 463 FrameTime: 2.160 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 426 FrameTime: 2.347 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 535 FrameTime: 1.869 ms
[ideas] speed=duration: FPS: 1477 FrameTime: 0.677 ms
[jellyfish] <default>: FPS: 1093 FrameTime: 0.915 ms
[terrain] <default>: FPS: 160 FrameTime: 6.250 ms
[shadow] <default>: FPS: 595 FrameTime: 1.681 ms
[refract] <default>: FPS: 242 FrameTime: 4.132 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1368 FrameTime: 0.731 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1191 FrameTime: 0.840 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1212 FrameTime: 0.825 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 1211 FrameTime: 0.826 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1231 FrameTime: 0.812 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1198 FrameTime: 0.835 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1234 FrameTime: 0.810 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1199 FrameTime: 0.834 ms
=======================================================
                                  glmark2 Score: 1106 
=======================================================
Vsevolod-linuxoid ★★★★★
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Его использовать только в целом поддержку ускорения проверять. Это не бенч это тест по сути, есть ускорение или нет. Ну или проверить есть vsync или нет ну или типа того. Тоже полезно.

LINUX-ORG-RU ★★★★★
()

Норм тема, пробовал на Intel UHD 630, надо на Iris XE потестить

Раньше было только 30fps в виртуалке, как сейчас?

MaZy ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Перезапустил тест, выделив все 4 ядра CPU. Отличий нет. Ну ладно, тоже неплохой результат.

Vsevolod-linuxoid ★★★★★
() автор топика
Ответ на: комментарий от MaZy

надо на Iris XE потестить

Там gvt-g дропнули.

i586 ★★★★★
()

Это конечно великолепная и интересная тема, но не заводить же ради этого интел! Тем более, там приличной графики нету.

kirill_rrr ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Я не знаю, как делать теги.

Он уже есть, вообще-то. Добавил в тему.

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

Это, конечно, великолепная и интересная тема

+1, похвально, конечно. а на nvidia это не работает? а, вижу, только на quadro. особого интереса прокидывать графику еще в один линукс нету. обычно винду запускают в таких случаях.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 2)
Ответ на: комментарий от Vsevolod-linuxoid

не знаю, как делать теги

Вроде просто пишешь и все, у меня получалось.

Жаль, что у тебя 4 поколение Intel — там нет этой технологии.

Я бы так заморачиваться и не стал :-)

В том смысле, что если бы rhel не решал мои задачи, то я поставил бы Федору.

papin-aziat ★★★★★
()
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Клёвая тулза, взял на вооружение.

(Неплохо встройка амуде тащит)

=======================================================
                                  glmark2 Score: 6610 
=======================================================

proveryam
()
Ответ на: комментарий от Vsevolod-linuxoid

есть ли бенчи, что грузят чисто GPU?

Майнинг :)

ololoid ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.