Sziasztok!
Segítséget szeretnék kérni GPU passthrough megvalósításában.
Ez a videó alapján csináltam egy custom win10-zel: https://youtu.be/eTX10QlFJ6c?list=LL
Ő pedig ez alapján csinálta virto nélkül (én még ezt nem, de hasonlót próbáltam): https://gitlab.com/.../single-gpu-passthrough/-/wikis/home

Konfigom:

  • r5 1600 af
  • b450 tomahawk max
  • rx 470 4gb
  • 240 gb-os m.2-es ssd

A probléma ott ütötte fel a fejét amikor elindítottam a vm-et és fekete képernyő fogadott. Szerintem a videókártya hook-kal lesz a baj csak nem tudom hogy micsoda.
Vgabios: https://www.techpowerup.com/vgabios/?architecture=AMD&manufacturer=MSI&model=RX+470&version=&interface=&memType=&memSize=4096&since=
Nekem a Gaming X videókártyám van (tudtommal a hűtő alatt is... a hűtő fixen az X-es), a 2 közül a régebbivel próbáltam.
Esetleg tudtok ajánlani linuxra egy progit amivel ki tudom olvastatni milyen GPU BIOS-om van fent?
Próbáljam ki a másik BIOS-szal? Vagy teljesen rossz úton járok?
A lényeget sztem elmondtam, írj ha valamit kihagytam volna.
Bármilyen segítséget, felvetést elfogadok

  • [törölve]

  • Szerkesztve

Amit te akarsz ahhoz kell legyen support a CPU-ban is.
PCI eszköz beadásához nem csak a VT-x, hanem a VT-d is engedélyezve kell legyen az alaplapi BIOS-ban.

A virt-manager-ben ezt PCI eszközként az ID-vel tudod hozzá adni a VM-hez.

Ha pl nvidia akkor így tudod kiolvasni:

~ ❯❯❯ cat /proc/driver/nvidia/gpus/*/information
Model: 		 NVIDIA GeForce RTX 2080
IRQ:   		 164
GPU UUID: 	 GPU-56f07e2a-f55f-9cb8-cdf1-e15699744eec
Video BIOS: 	 90.04.0b.00.85
Bus Type: 	 PCIe
DMA Size: 	 47 bits
DMA Mask: 	 0x7fffffffffff
Bus Location: 	 0000:01:00.0
Device Minor: 	 0
GPU Excluded:	 No

Én előbb csak simán beadnám és indítanám.
Utána a VM-en belül fel kell telepíteni az nvidia drivert.

meskobalazs a következőre módosította a címet: GPU passthrough.

Igen, kell a cpu support, nekem amdm van nem intel ezért se VT-x, se a VT-d nem tudom bekapcsolni
Kicsit légy körültekintőbb! (leírtam a konfigom)

AMD:
IOMMU = enabled
NX mode = enabled
SVM mode = enabled

INTEL:
VT-D = Enabled VT-X = Enabled

Nekem egy rx470-em van ezért ez a módszer teljesen hasznavehetetlen(leírtam a konfigom)
Mielőtt át akartam volna adni a videókártyát a win-nek, feltetepítettem és minden jól működött...
Nem, nem szügséges a vm-en feltetepíteni a videókártya drivert addig amig el nem érted a célod, ez esetben a videókártya átadása mert addig ugy is működik és nem abba az állapotba fogod használni a win10-et. Addig működőképes és nem ez befolyásolja a hibát... Ha sikerült megoldani a hibát akkor érdemes feltenni, mindaddig időpocsékolás mert lehet nem sikerül.
Sajnálom de ezzel semmire nem mentem... Better next time!

  • [törölve]

  • Szerkesztve

Hey!

Igen AMD-nél más a neve.
Dmesg-ben csekkoltad, hogy ott is írja-e?
dmesg | grep IOMMU

Én is annó AMD GPU-t adtam be egy VM-nek. Bar az XEN virtualizáció alatt történt és a VM is linux volt, de nem kellett a videó bios-al foglalkozni, csak beadni és igen utána feltenni a drivert.

KVM-nél ugyanígy adtam be egyszer Ethernet portot (pci id alapján).
Meg most csinálok egy VM routert ami majd 4 fizikális ethernet portot fog kapni.

Mi nem megy nálad pontosan? Mert nem tiszta.
Biztos, hogy supported a VGA?
Itt van egy jó lista: https://en.m.wikipedia.org/wiki/List_of_IOMMU-supporting_hardware

Hibaüzenet, vagy valami log van?

Elvileg elég az is ha qemu paraméterben megadod -device vfio-pci,host=07:00.0
ahol a 07:00.0 a tényleges eszköz.

A Host rendszeren meg ne legyen feltelepítve a gpu driver!
Egyszerre csak 1 használhatja, vagy a host vagy a vm.

Szia!

Ennek az egésznek az a lényege hogy linux alapokon futtatok egy úgymond teljes értékű win-t
Vannak ennek előnyei, hártányai. Ha érdekel leírhatom 😃

Igen elvileg elég qemu-ba is ezeket megadni

Most már teljesen a virto driverest guide-ot csinálom: https://gitlab.com/.../single-gpu-passthrough/-/wikis/home

Mindent végigcsináltam, de nem indult és ezt a hibaüzenetet dobta fel:
Error starting domain: internal error: cannot load AppArmor profile 'libvirt-fd1637e2-a5de-47ff-b418-c4816cf386d0'
Sajna a "magyarázatot" nem fotóztam le, ahol leirja hol mi a baja pontosan. Mindent bezártam, restart

  1. indítást levideóztam, feltettem megára mert nem engedi csatolni
    Mega: https://mega.nz/folder/A84jRIjD#flD4uNk-BPzrMUpE9PLTDg

  2. Indításnál ugyan ez csak rengeteg sok crash report, csatoltam


Átnéztem még egyszer mindent, minden jó volt kivéve 1 dolog.

Ezt a sort nem engedte kicserélni se nano-ba, se szövegszerkesztővel, se a virt-manager-be
A nano a file mentése után azt írta hogy megváltoztatta, de nem
Ha meg is változtatja akkor instant vissza is áll...(erröl is van video)

Szerinted próbáljam meg úgy hogy átállítok az on-t off-ra?

Köszi szépen hogy ezt végig nyálaztad és szántál rá időt hogy megértsd!

    • [törölve]

    • Szerkesztve

    liSSnEDux

    Most csak így gyorsba válaszolok..
    Nálad a gnome chras-el el valamiért.
    Talán mert ugyan azt a GPU-t akarod beadni amit már a host is használ?
    A hoston ne legyen fent a vga drivere meg semmi és próbáld meg úgy.
    Ezt úgy szokták, hogy külön vga-n van a host és egy külön vga megy be a vm-nek (2x pcie).

    Az apparmor-t meg próbából kikapcsolhatod, hogy utána is hiányolja e a profilt.
    /etc/libvirt/qemu.conf
    security_driver = "none"
    ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/usr.sbin.libvirtd

    Ezután indítsd újra a libvirtd-t.

      [törölve]
      Igen, mert ezzel elvileg át lehet adni a gpu-t és ez lenne a lényege amiböl nem következik az hogy nem lehet fent gpu driver az anyarendszeren
      3 féle változatot póbáltam és egyikbe se volt olyan hogy ne legyen fent vga driver

      "Ezt úgy szokták, hogy külön vga-n van a host és egy külön vga megy be a vm-nek (2x pcie)." Na igen, tudom, de én nem ezt a módszert szeretném annak ellenére hogy van egy elfekvő vga-m.

      Ránézek erre az apparmor-os dologra még ma

      itt a "none" helyén a "selinux" van
      Pontosan az utáni parancsok mit csináltak amit leírtál? csak hogy tudjam mit csinálok

        • [törölve]

        • Szerkesztve

        liSSnEDux

        Hey

        Igen alap esetben selinux van ott és ki van kommentelve az egész sor.
        Tehát oda írd be, hogy "none" és töröld a kettőskeresztet a sor elejéről.
        Ekkor a libvirt elvileg már nem fog egyeltalán keresni security profilt.

        A másik az ln -s disabled-re teszi az apparmorban a libvirtet, így ezután elvileg nem használja.
        Így elméletben duplán is kikapcsoltuk, a libvirtben és az apparmorban is.

        Desktopon még nem csináltam, de Xenserver-ben ugye úgy adtam hozzá, hogy a hoston nem volt fent driver.
        Most már emléxem, hogy akkor 2 VGA-t is kipróbáltam, volt egy régebbi Nvidia valami kis gyenge de azt is sikerült beadni a VM-nek, meg egy szintén régi radeon HD-t.

        A Xenserver meg ugye desktop nélkül fut.
        Proxmoxban is be lehet így adni meg XCP-NG-ben is és XOA-ban is, meg a legtöbb virtualizációs megoldásban, de desktopon más a helyzet.
        Nézzél a hoston is egy dmesg-et, journalctl-t meg talán a /var/log/messages vagy syslog is érdekes lehet amikor ez a fekete kép váltás jön be és vissza kapcsol a gnome-ra.

        A howto-t valamiért nem tudtam megnézni. be kell jelentkezni, bejelentkeztem de akkor sem mutatta.
        Szóval nem tudom még mindíg milyen parancsok vannak a folyamatban.

        Én kipróbálnám a másik kártyát is beletenni ha van még szabad pcie slot és azt beadni.

        De nézzük meg mit mond majd apparmor nélkül.
        Az is lehet, hogy az blokkolta a hozzáférést.

        Viszont ha a host is használja és a vm is, az úgy szerintem nem lesz teljes értékű gpu passthrough.

        Nem működik...
        Hogy tudom visszakapcsolni az apparmorosat?

        Ránézek holnap amit irtál, mi is pontosan

        Bal oldalt tudod kiválasztani hogy melyik lépést szeretnéd(ez itt az egyes ha az égészet kimásolod):
        https://gitlab.com/risingprismtv/single-gpu-passthrough/-/wikis/1)-Preparations
        Nekem bejelentkezés nélkül is megjeleniti minden hiba nélkül.
        Ha kell lefotózgatom neked

          • [törölve]

          • Szerkesztve

          liSSnEDux

          Köszi már látom és átnézem. 👍

          • [törölve]

          • Szerkesztve

          liSSnEDux Hogy tudom visszakapcsolni az apparmorosat?

          Kommenteld vissza a sort a qemu.conf fájlban és egy rm /etc/apparmor.d/disable/usr.sbin.libvirtd
          majd systemctl restart libvirtd apparmor
          De szerintem ne kapcsold vissza.

          Ezeket a scripteket is lefuttattad?
          https://gitlab.com/risingprismtv/single-gpu-passthrough

          Ez volt az egyik olyan rész amiben nem voltam biztos hogy jól csináltam, átnézem holnap tüzetesebben. Jóéjt!

            • [törölve]

            • Szerkesztve

            liSSnEDux

            clone-ozd a repot, lépj bele és csapass egy chmod +x install_hooks.sh && ./install_hooks.sh
            és 10 miatyánk, hogy tényleg jó legyen.

            🚀

              [törölve]
              cloneozam a tárhelyet miért? az nem jó ha megpróbálom ujra lefuttatni?

              furcsa ez az egész mert ezekbe a scriptekbe nincs semmi...
              csak a hooks-ba

              ezt kicsit nekem zavaros...
              nem is tudom törölni amibe nincs semmi

                • [törölve]

                • Szerkesztve

                liSSnEDux

                Úgy látszik jogosultsági problémák miatt a git clone nem szedi le, így minden scriptet neked kell kézzel létrehoznod.

                Itt van a systemd unit script amit keresel:
                https://gitlab.com/risingprismtv/single-gpu-passthrough/-/blob/master/systemd-no-sleep/libvirt-nosleep%40.service

                Ha létrehozol mindent amit kell, akkor le fog futni azinstall_hooks.sh

                Közben most észre vettem, hogy csak SSH-n nem megy a git clone, viszont https-en igen.

                Próbáld meg így:
                git clone https://gitlab.com/risingprismtv/single-gpu-passthrough.git

                Cloning into 'single-gpu-passthrough'...
                remote: Enumerating objects: 197, done.
                remote: Counting objects: 100% (179/179), done.
                remote: Compressing objects: 100% (94/94), done.
                remote: Total 197 (delta 87), reused 164 (delta 81), pack-reused 18
                Receiving objects: 100% (197/197), 53.73 KiB | 26.86 MiB/s, done.
                Resolving deltas: 100% (94/94), done.

                cd single-gpu-passthrough/
                ./install_hooks.sh

                Nézd most itt van és nem üres:

                root@ASUS-PC:~/single-gpu-passthrough# cat systemd-no-sleep/libvirt-nosleep@.service 
                [Unit]
                Description=Preventing sleep while libvirt domain "%i" is running
                
                [Service]
                Type=simple
                ExecStart=/usr/bin/systemd-inhibit --what=sleep --why="Libvirt domain \"%i\" is running" --who=%U --mode=block sleep infinity
                root@ASUS-PC:~/single-gpu-passthrough# 

                Szerintem te csak a fő scriptet "install_hooks.sh" futtattad le és az összes többi hiányzik.