Am petrecut ceva timp incercand varii combinatii dar am reusit! Am un vm WIN care are acces nativ la GPU. De ce e important? Ptr. a folosi programe care utilizeaza GPU-ul nativ, gen Photoshop, Autodesk, etc. Sau ptr. a juca jocuri.
Vmware nu suporta asta in Workstation. Ai doar 3d acceleration care e foarte prost ca si performanta.
Lucrurile astea le-am invatat si le impartasesc cu voi, sa va usurez smulgerea parului din cap
Configuratia mea:
- Radeon HD 7790 (guest GPU)
- GTX 1050ti (Host GPU)
- Ryzen 2600x
- B450m mobo
- in ghiduri se folosesc de obicei placi Nvidia dar uite ca merge si cu Amd gpu ca si guest GPU.
Necesitati
- 2 GPU (pe placa de baza)
- 2 monitoare (de preferinta, posibil sa merga si cu unul)
- CPU/MOBO care sa suporte IOMMU (cica toate astea dupa 2014 incoace suporta)
Cum o sa mearga
- Se baga 2 gpu-uri pe mobo. Unul va fi folosit de host (linux). Celalalt va fi folosit de VM. Sharing-ul de pe un singur GPU nu merge deocamdata.
- Se conecteaza 1 monitor intr-un GPU (hostul, Linux), un monitor in celalalt GPU (vm, Win)
- Se poate face share la mouse/keyboard cu ajutorul ‘evdev’. Default trebuie mouse si si keyboard separat.
Linkuri:
- sunt cateva ghiduri oficiale cu informatii complete. (asta-i un mini ghid doar ) cap coada
Virtual gaming machine with PCI passthrough on Ubuntu 20.04 (asta-i miezul)
GPU passthrough guide for Ubuntu 20.04 - YouTube (asta-i aditional + ghid video ptr. setare qemu) - Dupa aceea exista ghidul ptr. a seta share la key si mouse:
https://passthroughpo.st/using-evdev-passthrough-seamless-vm-input/ - Ghid setare audio (pulseaudio recomandat, merge in acelasi timp cu host-ul)
Virtual machine audio setup - or how to get pulse audio working - MathiasHueber.com - Folder share cu samba
How to share files with Samba (SMB) from Ubuntu and mount on Windows | Just Some Techie Notes!
Troubleshoot
- Aici e miezul ghidului astuia. Sunt cateva chestii care nu-s acoperite de ghidurile oficiale si fara de care e posibil sa nu mearga. A trebuit sa le vanez pe net si sa fac trial & error la greu ca sa-mi dau seama ce si cum.
- Trebuie sa aveti doar 2/3 entries in “IOMMU” group-ul ptr. VFIO. E am avut vreo 6 (GPU + Audio+Ethernet+altele) si n-a mers. Vedeti scriptul ala care listeaza grupurile IOMMU. Toate PCI bus din grupul respectiv trebuie pasate catre VFIO, altfel n-o sa mearga. Daca GPU-ul e in acelasi grup cu Ethernet-ul si altele, n-o sa mearga. Trebuie folosit grupul unde astea sunt separate (GPU+AUDIO+Eventual usb controler). Cica exista un patch ptr. asta dar are riscuri.
- Trebuie adaugat la VFIO folosind PCI bus id ( “Apply VFIO-pci driver by PCI bus id (via script)” in ghidul oficial). Mie nu mi-a mers cu cealalta optiune.
-
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt kvm_amd.npt=1 kvm_amd.avic=1 kvm.ignore_msrs=1 video=efifb:off "
asta-i linia in /etc/default/grub pe care o am acum. Optiunea esentiala estevideo:efifb:off
- fara ea am avut blackscreen si habar n-am avut de ce. - In loc de
/dev/input/by-id/KEYBOARDNAME
folositi ceva gen/dev/input/event6
(cica qemu versiunea noua nu stie sa urmeze symlinks). Aici e un mini tutorial (ptr. a seta mouse si keyboard shared device not found error) - Daca tot primiti “permission denied errors” desi ati urmat sectiunea relevant din linkul cu shared mouse/key, atunci e de vina apparmour. In ghid zice ca daca faci toti pasii aia SIGUR n-o sa primesti permission denied. Dar uite ca nu-i adevarat. Trebuie adaugat permisiune in apparmour. Mini ghid aici, comment pe la mijloc
- Daca n-ati nimerit event-ul potrivit
/dev/input/event
ptr. mouse incercati si restul. - Dupa ce schimbati
qemu.conf
si xml-ul masinii virtuale e posibil sa nu se mai aprinda monitorul de la VM. Dupa un restart merge. - Dupa fiecare schimbare in
qemu.conf
si xml-ul masinii dati restart lalibvirtd
(systemctl restart libvirtd) - Sunt mai multe optiune de jucat in
qemu.conf
dar mie imi merge asa (unde event-urile sunt unde fac point symlink-urile din/dev/input/by-id
)
cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc","/dev/hpet",
"/dev/input/event2",
"/dev/input/event5"
]
user = "me"
#group = "evdev"
clear_emulator_capabilities = 0
- Nu uitati sa updatati device-urile (aceleasi path-uri) atat in
qemu.conf
cat si in xml-ul masinii virtuale. Xml-ul merge editat direct din qemu sau cuvirsh edit VMNAME
- In timpul setup-ului e posibil sa fie o sectiune moarta (de vreo 30-60 de secunde) unde n-o sa vedeti input pe monitorul principal. Dupa perioada respectiva monitorul prinde brusc viata. Asta ptr. ca tocmai ce ati adaugat un GPU la VFIO si linux trebuie sa ruleze scriptul din
/etc/initramfs-tools/scripts/vfio.sh
ptr. a detecta monitorul corect. Daca aveti 2 monitoare in cele 2 GPU-uri de la inceput probabil n-o sa aveti problema asta.
Asta-i tot ce imi amintesc. Sper sa va ajute. (dar tot am senzatia ca o sa petreceti niste timp sapand dupa info extra ).
E un pic dificil dar la naiba, merita. De cand imi doream sa am putere GPU nativa in VM. Native Linux + Native Win in acelasi timp? F@@K YEAH!
E putina pierdere la CPU in VM dar ptr. mine si probabil ptr. multi altii nu-i o problema.
Dual boot-ul e prea clunky si switch-ul dureaza mult. Asa switch-ul dureaza doar o secunda (trebuie apasate ambele taste CTRL deodata si evdev
trimite mouse/keyboard catre VM sau inapoi).
O sa mai updatez ghidul daca apar chestii neprevazute.