Vícenásobný passthrough hardwaru (GPU)

Vícenásobný passthrough hardwaru (GPU)
« kdy: 28. 01. 2025, 22:38:17 »
Na fyzickém HW který má jednu grafickou kartu(konkrétně iGPU) . Je možné při virtualizaci  dosáhnout toho, aby více běžících systému mělo přístup k GPU (a tedy vyššímu výkonu)? současně. Například proxmox. pokud ano, kolik je limit, nebo co určuje limit ( plnost grafické VRAM)
 
-Když to zobecním, i k jinému HW, třeba USB, nebo NPU? (Jak je to řešeno, musí být na to v host os nějaký dríver nebo přímo podpora v HW)
-liší se to model od modelu? (jak tento parametr je nazvaný)?



Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #1 kdy: 28. 01. 2025, 23:40:34 »
Ne obecně to není možné, protože fyz. zařízení je zpravidla navržené tak, že bude komunikovat s jedním systémem, ovladačem. Jedno, jestli se bavíme o GPU, NPU nebo třeba USB root hubu. Takže jak název napovídá, jakmile se přes pass-thru režim zařízení připojí k VM, tak se na něj nikdo jiný nedostane (včetně hostitele i ostatních VM).

Výjimky existují, ale jsou to specifická řešení (hardware+software) k tomu souběžnému přístupu a sdílení uzpůsobená.
Např. pro grafické karty existuje NVIDIA vGPU, což není levné (licencují se počty přístupů ke GPU), oficiálně to chodí na specifických konfiguracích a nejvyšších kartách.
https://docs.nvidia.com/vgpu/gpus-supported-by-vgpu.html
Já se s tím setkal pouze v kombinaci s VMWare na virtuální desktopy.

Podobně mělo AMD MxGPU pro VMWare, ale o tom jsem tak čtyři, pět let neslyšel. Výkonově to prý bylo horší než vGPU, víc to při sdílení spoléhalo na sw část.

Intel má podobně GVT-g se sdílením (pozor není to GVT-d, což je pass-thru)
https://wiki.archlinux.org/title/Intel_GVT-g
Je tam poměrně dost "ale" a různých omezení (např. UEFI hosty bez patche neběží), záleží také na virt-vieweru. Zkoušel jsem to rozběhat na nějaký základní akcelerovaný desktop, úplně jsem nepochodil a neměl jsem moc času a energie si s tím hrát dál. Plus na výkonějších serverech byly EPYCy.

Finálně je možnost jít cestou nějaké obecné emulační (resp. paravirtualizační) vrstvy, která vytvoří virtuální GPU do VM a bude překládat volání na fyzickou kartu přes DRI a sdílet její prostředky. Což přidá overhead a latenci a je to tedy spíš mířeno na nějakou základní akceleraci.
To je například VirGL, https://docs.mesa3d.org/drivers/virgl.html
Podpora je součástí QEMU i libvirt a bude záležet na konkrétní distribuci, sestavení hypervizoru, MESY i VM guestu, jestli se to povede rozchodit. Tohle se typicky nastavuje v GUI ovládáních (jako virt-manager), když se zapne zaškrtávátko pro 3D akceleraci v konkrétní VM s typem karty virtio-gpu.
YMMV.

RDa

  • *****
  • 2 833
    • Zobrazit profil
    • E-mail
Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #2 kdy: 29. 01. 2025, 00:04:46 »
Michale, trocha off topic dotaz - kdyz jsi tak zbehlej ve vm/gpu - mam ve virtualkach qxl + spice (vm bezi na jinem stroji nez obcasny klient). Ale posledni dobou se to s*re:

Kód: [Vybrat]
[5641341.504622] [TTM] Buffer eviction failed
[5641341.504637] qxl 0000:00:02.0: object_init failed for (126976, 0x00000001)
[5641341.504639] [drm:qxl_alloc_bo_reserved] *ERROR* failed to allocate VRAM BO
[5641356.864619] [TTM] Buffer eviction failed
[5641356.864634] qxl 0000:00:02.0: object_init failed for (126976, 0x00000001)
[5641356.864637] [drm:qxl_alloc_bo_reserved] *ERROR* failed to allocate VRAM BO

Nepomaha tomu ani doporucene nastaveni velikosti VRAM - chyba nenastava hned, ale treba po tydnu to zacne a co 30s to error.

A celkove jsem nabyl dojmu ze qxl/spice je deprecated...

Jaka je tedy moderni volba pro VM (bezi tam linux guest, bez GUI.. jen fbcon) co se tyce grafiky a pristupu vzdalene?
(ma treba VNC podobny vykon/responsivitu jako SPICE?, ackoliv tohle zrovna neni ten problem.. muj problem je zrejme model virtualni grafiky)

Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #3 kdy: 29. 01. 2025, 02:03:21 »
Ahoj,

nevím, jestli jsem tak zběhlej, protože jsem se osobně s tímhle problémem nesetkal :). Byť si matně vzpomínám, že jsem na to někde na fórech narazil. Spíš to byly reporty, když to někdo používal na GUI ve VM. Také byly pár let zpátky nějaké commity do jádra, kdy se řešilo DMA a alokace v QXL DRM modulu. Protože jde o to, že tím, že QXL umí DRM, tak fbdev nad tím běží typicky emulovaný - jinými slovy není to napřímo jako v případě některých jednodušších/starších karet a může se to týkat i textového režimu.
Takže mimo samotného QEMU v tom může hrát roli i verze a konfigurační volby jádra ve VM a muselo by se to asi zkusit víc debuggovat (což při té týdenní periodě výskytu může být docela opruz).

Ale, jak píšeš, to QXL je víceméně i u mě spíš deprecated záležitost. RHEL9 a klony už jsou pár let zpátky sestavené bez QXL i SPICE, takže tam byla nutnost se tomu vyhnout. Myslím, že to tu někde v diskuzi zmiňoval i J. Eischmann, že SPICE v mělo historicky konkurovat např. RDP, ale pak tu myšlenku v RH opustili. QXL je spíš v udržovacím režimu, primárně se vyvíjí virtio.
Takže na serverech mám převážně virtio a vnc, byť třeba na OpenSuse nebo starých hypervizorech by to pořád běželo, oboje tam pořád je.
V text. režimu tu konzoli používám na VM bez GUI jen při manuální instalaci nebo troubleshootingu, na práci se připojuju primárně sshčkem a pro nějaký vzdálený základní přístup z hypervizorů mám většinou pozapínané přesměrování konzole na sériový port.

Jestli si vybavuju správně, tak jsi používal qemu napřímo (bez libvirt a podobných vrstev). Takže bych určitě zkusil přehodit typ zařízení na virtio-vga.
Tenhle typ chodí víceméně bez problémů a nevylučuje se SPICE. Pokud nemáš vyloženě umělé omezení jako u těch balíčku v RHEL, tak nemusíš používat VNC, SPICE by s tím měl pořád chodit, můžeš to případně porovnat mezi sebou.

Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #4 kdy: 29. 01. 2025, 09:50:34 »
IMO jediné co umožňuje současný přístup víc virtuálů k jednomu GPU je aktuálně Hyper-V pomocí GPU partitioningu.
Ale jak už bylo zmíněno, má to hromadu ale.
Jestli to (https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/gpu-partitioning) čtu správně,
- musí to GPU umět
- musí se na ní dělení předem nastavit
- je to statické, tzn:
- virtuálům je dostupný jen předem přidělený díl prostředků, tzn i když běží zrovna jen jeden z mnoha virtuálů, na víc než na přidělený 1/n výkon si nesáhne
- dosažitelný výkon je kvůli režii samozřejmě o něco menší než přidělený

Nemám to na čem vyzkoušet, ale hádám že v praxi to bude použitelné jen pro akceleraci vykreslování prostředí, základní bitmapové operace jako šoupání mapovými výřezy, přehrávání videa apod, tzn něco jako bylo RemoteFX.
« Poslední změna: 29. 01. 2025, 09:55:08 od Marek Staněk »


ja.

  • ****
  • 356
    • Zobrazit profil
    • E-mail
Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #5 kdy: 29. 01. 2025, 10:34:34 »
Na fyzickém HW který má jednu grafickou kartu(konkrétně iGPU) . Je možné při virtualizaci  dosáhnout toho, aby více běžících systému mělo přístup k GPU (a tedy vyššímu výkonu)? současně. Například proxmox. pokud ano, kolik je limit, nebo co určuje limit ( plnost grafické VRAM)

Záleží od toho, o akú iGPU ide. Intel 12-14th gen zvláda (nepíšem podporuje, kvôli stavu, v akom to je) SR-IOV, kde je možné vytvoriť virtuálnu funkciu a túto sprístupniť vovnútri VM. Je to pomerne tŕnistá cesta, treba vlastný modul na hostovi aj guestoch, Intel to len pomaly upstreamuje, zjavne to nie je priorita: https://github.com/strongtz/i915-sriov-dkms

Karty s diskrétnymi GPU v consumer segment (vrátane Intel Arc) toto nevedia, úmyselne. Je to vyhradené pre drahšie modely.

-Když to zobecním, i k jinému HW, třeba USB, nebo NPU? (Jak je to řešeno, musí být na to v host os nějaký dríver nebo přímo podpora v HW)
-liší se to model od modelu? (jak tento parametr je nazvaný)?

Podpora SR-IOV je častá pri lepších sieťových adaptéroch. V podstate to môže implementovať každé PCIe zariadenie, akurát väčšina to nerobí.

RDa

  • *****
  • 2 833
    • Zobrazit profil
    • E-mail
Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #6 kdy: 29. 01. 2025, 10:52:13 »
-Když to zobecním, i k jinému HW, třeba USB, nebo NPU? (Jak je to řešeno, musí být na to v host os nějaký dríver nebo přímo podpora v HW)
-liší se to model od modelu? (jak tento parametr je nazvaný)?

Podpora SR-IOV je častá pri lepších sieťových adaptéroch. V podstate to môže implementovať každé PCIe zariadenie, akurát väčšina to nerobí.

A sitovka skrze SR-IOV bude mit ruznou mac v ruznych VM?
Takze je to vlastne neco jako "hw switch" zdarma (ve srovnani s klasicky resenim hw nic - sw bridge - virt nic ) ?

Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #7 kdy: 29. 01. 2025, 10:54:29 »
Ono bylo asi tezke se u proxmoxu podivat do dokumentace...

https://pve.proxmox.com/wiki/PCI_Passthrough#GPU_passthrough

RDa

  • *****
  • 2 833
    • Zobrazit profil
    • E-mail
Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #8 kdy: 29. 01. 2025, 11:05:13 »
Jestli si vybavuju správně, tak jsi používal qemu napřímo (bez libvirt a podobných vrstev). Takže bych určitě zkusil přehodit typ zařízení na virtio-vga.
Tenhle typ chodí víceméně bez problémů a nevylučuje se SPICE. Pokud nemáš vyloženě umělé omezení jako u těch balíčku v RHEL, tak nemusíš používat VNC, SPICE by s tím měl pořád chodit, můžeš to případně porovnat mezi sebou.

Diky!

Prave ze jedu Gentoo na vsech trech koncich (host,guest,client) takze mam k dispozici co si zamanu.

Provedena zmena ve wrapper skriptu:
Kód: [Vybrat]
-- -device qxl-vga,vgamem_mb=128,ram_size_mb=128 \
++ -vga virtio \

Z vnejsiho pohledu to funguje stejne (spice klient, od grubu v 1080p jak i bylo mineno), tak uvidime dlouhodobe.

Kdyz jsem shazoval predeslou konfiguraci, tak se obraz ve spice nacetl z posledniho stavu FB, ale kurzor neblikal - a pri vypinani se nevypisovali typicke hlasky z rc/sysinit, nejspis v QXL bude nejaky memory leak tedy, ktery se vyzere po delsi dobe blikani kurzoru.

Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #9 kdy: 29. 01. 2025, 11:17:32 »
Podpora SR-IOV je častá pri lepších sieťových adaptéroch. V podstate to môže implementovať každé PCIe zariadenie, akurát väčšina to nerobí.

Ano, vidíte, to jsem zapomněl zmínit, samozřejmě virtualizované server NIC tam patří taky.

A sitovka skrze SR-IOV bude mit ruznou mac v ruznych VM?
Takze je to vlastne neco jako "hw switch" zdarma (ve srovnani s klasicky resenim hw nic - sw bridge - virt nic ) ?

Jj, je to tak. MAC je nastavitelná pro každý virt. interface (VF), i když detaily budou trochu záležet na kartě a driveru. Typicky v Linux prostředí bez dalšího nastavení to generuje náhodnou MAC po startu. Persistentní MAC se dá nastavit buď systémově přes iproute (resp nějakou vrstvu jako NeworkManager), případně třeba v libvirt (tam se to chová v podstatě tak, že při založení nové VM se generuje náhodná MAC, co se uloží a následně už drží.).

Ty základní výhody je v tom, že každá VF má pak své samostatné fronty, offload, případně i třeba některé pokročilejší funkce (BPF). Také při vyšších rychlostech a množství paketů, kdy už třeba ta řežie okolo přerušení není zanedbatelná, se může líp spravovat přiřazování prostředků jednotlivým VM.

ja.

  • ****
  • 356
    • Zobrazit profil
    • E-mail
Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #10 kdy: 29. 01. 2025, 11:19:13 »
A sitovka skrze SR-IOV bude mit ruznou mac v ruznych VM?
Takze je to vlastne neco jako "hw switch" zdarma (ve srovnani s klasicky resenim hw nic - sw bridge - virt nic ) ?

Áno. A nielen mac, ale jednotliví guesti môžu byť aj v rozličných VLAN. Na fyzický port môže ísť trunk a jednotlivé VM dostanú access pre im patriace VLAN.

M Z

Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #11 kdy: 29. 01. 2025, 11:24:08 »
Vite nekdo jak je to s pristupem k GPU(pres CUDA) z LXC kontejneru?
Diky.

Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #12 kdy: 29. 01. 2025, 11:32:05 »
V pripade amd gpu by mohlo v budoucnu zajimave toto: https://www.phoronix.com/news/AMDGPU-VirtIO-Native-Mesa-25.0

ja.

  • ****
  • 356
    • Zobrazit profil
    • E-mail
Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #13 kdy: 29. 01. 2025, 11:33:52 »
Vite nekdo jak je to s pristupem k GPU(pres CUDA) z LXC kontejneru?
Diky.

CUDA z LXC je jednoduchá, pretože je to len kontajner. Takže na hostovi treba mať kernel driver, bind mountnúť všetky `/dev/nv*` do kontajnera.

Re:Vícenásobný passthrough hardwaru (GPU)
« Odpověď #14 kdy: 29. 01. 2025, 11:45:15 »
Z vnejsiho pohledu to funguje stejne (spice klient, od grubu v 1080p jak i bylo mineno), tak uvidime dlouhodobe.

Kdyz jsem shazoval predeslou konfiguraci, tak se obraz ve spice nacetl z posledniho stavu FB, ale kurzor neblikal - a pri vypinani se nevypisovali typicke hlasky z rc/sysinit, nejspis v QXL bude nejaky memory leak tedy, ktery se vyzere po delsi dobe blikani kurzoru.

Tak držím palce, snad to zabere. Blikání kurzoru by mohla být vlastně docela vtipný spouštěč problému :) Ale jestli je to jinak statický screen a opravdu to vyžere přidělenou VRAM, tak to asi nic jiného nemůže způsobit.
Jako teoreticky tam mohla nastat i nějaká regrese, pokud jsi s tím předtím neměl potíže. Nějaké commity tam jsou.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/drivers/gpu/drm/qxl
Ale, jak jsem zmiňoval, pokud nenastanou nějaké jiné problémy, zůstal bych už u virtio.