Ömer Kurt

Özgür yazılım tutkunu, Emacsever

GPU Passthrough
QEMU/KVM
Kurulumu

Çrş 17-01-2024


GPU passthrough bir GPU direkt olarak sanal makineye sunmasına yarayan bir tekniktir. Peki avantajı ne?

  • Yüksek Performans: GPU passthrough ile bir sanal makine, doğrudan fiziksel bir GPU'yu kullanabilir. Bu, yüksek performanslı grafik işlemleri, oyunlar veya diğer GPU yoğun uygulamalar için daha iyi bir performans sağlar.
  • Oyun Performansı: Oyuncular için GPU passthrough, sanal bir makinede oyun oynamak isteyenler için ideal bir çözüm olabilir. Bu, oyunları yüksek performansla çalıştırmanın yanı sıra, sanal makineler arasında GPU kaynaklarını etkili bir şekilde bölmenizi sağlar.
  • Çeşitli Kullanım Senaryoları: GPU passthrough, grafik tasarım uygulamaları, video düzenleme ve diğer GPU yoğun görevler için idealdir. Bu, bu tür uygulamaların sanal makineler üzerinde daha etkili bir şekilde çalışmasını sağlar.

Bazı oyun geliştiricileri direkt olarak Linux desteklemediği için birçok Linux kullanıcıları bilgisayarını dualboot olarak kullanıyordu. Dualboot devri bitti diyebilirim eğer iyi bir ekran kartınız varsa. Sadece oyun olarak değil grafik tasarım uygulamaların çoğu Linux desteklemediği için GPU passthrough iyi bir seçim olacaktır.

BIOS Ayarı

Bilgisayarınız AMD işlemcili ise IOMMU, NX mode, SVM mode aktif etmelisiniz. Eğer Intel işlemcili bilgisayarınız varsa VT-D ve VT-X ayarlarını aktif etmelisiniz.

AMD CPU INTEL CPU
IOMMU VT-X
NX mode VT-D
SVM mode  

Intel İşlemcili bilgisayarlarınız için sadece bir seçenek gözüküyorsa birini aktif etmeniz yeterli olacaktır.

Ek olarak Distronuz UEFI modunda yüklenmiş olmalıdır.

GRUB ayarı

AMD CPU INTEL CPU
amd_iommu=on intel_iommu=on

/etc/default/grub belgesini işlemcinize göre düzenlemek gerekiyor. Ben Intel kullandığım için ona göre düzenledim.

GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt"

Grub'ı update etmemiz gerekiyor güncelledikten sonra bilgisayarımızı yeniden başlatalım.

grub-mkconfig -o /boot/grub/grub.cfg

IOMMU Gruplama

GPU grubu hakkında bilgi almamız gerekecek.

#!/bin/bash
shopt -s nullglob
for g in /sys/kernel/iommu_groups/*; do
    echo "IOMMU Group ${g##*/}:"
    for d in $g/devices/*; do
        echo -e "\t$(lspci -nns ${d##*/})"
    done;
done;

Scripti kaydedip çalıştıralım. GPU grubunu bulalım.

QEMU ve Libvirt kurulumu

Arch için:

sudo pacman -S virt-manager qemu vde2 ebtables iptables-nft nftables dnsmasq bridge-utils ovmf

libvirt.conf

/etc/libvirt/libvirtd.conf belgesine girip başındaki # işaretini kaldıralım

unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"

Loglama

En alt satıra loglarımızı kayıt altına almak için aşağıdaki satırları ekleyelim

log_filters="3:qemu 1:libvirt"
log_outputs="2:file:/var/log/libvirt/libvirtd.log"

Libvirt grubunu düzenleme

Kullanıcı adımızı libvirt grubuna ekleyelim

sudo usermod -a -G kvm,libvirt $(whoami)

Her bilgisayar açıldığı zaman otomatik olarak başlamasını istiyorsanız:

sudo systemctl enable libvirtd
sudo systemctl start libvirtd

qemu.conf

/etc/libvirt/qemu.conf belgesinin içine girip sudo yazan ifadeyi kaldırıp kendi kullanıcı adımızı yazalım:

user = "kullanıcı adı"
group = "kullanıcı adı"

Kaydedip libvirtd yeniden başlatalım: sudo systemctl restart libvirtd

Network

sudo virsh net-autostart default
sudo virsh net-start default

Virtual Manager

Gerekli olan:

Video yüklenecek

ROM Hazırlama

Rom hazırlamak için birkaç yöntem var. Ben Dumping yöntemine göre devam edeceğim.

Dumping

Nvidia için: NVFlash AMD için: AMDVBFlash / ATI ATIFlash

Ekran kartınıza göre indirdikten sonra TTY ekranına girmemiz gerekiyor. Display managerı durdurmamız gerekiyor. systemctl stop sddm (lightdm/gdm) Sonra ekran kartınıza göre aşağıdaki komutlarını yazalım.

Nvidia AMD
sudo rmmod nvidia_uvm sudo rmmod drm_kms_helper
sudo rmmod nvidia_drm sudo rmmod amdgpu
sudo rmmod nvidia_modeset sudo rmmod radeon
sudo rmmod nvidia  

İndirdiğimiz uygulamayu(NVFlash/AMDVBFlash) dizine gidip çalıştırma yetkisi verelim:

sudo chmod +x NVFlash #Nvdia için
sudo chmod +x AMDVBFlash #AMD için

Nvidia için:

sudo ./nvflash --save vbios.rom

AMD için:

sudo ./amdvbflash -s 0 vbios.rom
  • Artık vbios.rom elimizde mevcut isterseniz bilgisayarınızı tekrar başlatabilirsiniz.
  • Tekrar başlattıktan sonra vbios.rom okteta uygulaması ile açalım. Yüklü değilse kolayca paket yöneticinizden edinebilirsiniz.
  • vbios.rom patchelemiz gerekiyor ctrl+f ile arama ekranını açık char olarak seçip VIDEO aratalım.
  • İlk U harfini gördükten sonra sol tarafında kalan imlecin hepsini silelim. Farklı kaydet diyerek yeni oluşan romu patched.rom olarak adlandıralım.
  • İzinleri ayarlayalım.
sudo mkdir /usr/share/vgabios
cp ./patched.rom /usr/share/vgabios/
cd /usr/share/vgabios
sudo chmod -R 644 patched.rom
sudo chown yourusername:yourusername patched.rom

Rom eklemek: <rom file'/usr/share/vgabios/patched.rom'/>=

Script

git clone https://gitlab.com/risingprismtv/single-gpu-passthrough.git
sudo chmod +x install_hooks.sh
sudo ./install_hooks.sh

Kaynak