[Nasıl] Kvm/qemu kullanarak pci-e passthrough yapmak

Başlatan Ozmo, 21 Ekim 2017 - 20:06:54

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Ozmo

Merhaba sevgili forum üyeleri çok uzun zamandır forum'a uğramıyordum. Neyse bugün sizlere gnu/linux üzerinde kvm/qemu kullanarak pci-e passthrough nasıl yapıldığını anlatacağım.


Hypervisor nedir ?

Hypervisor fiziksel sunucu veya masaüstü bilgisayarda birden fazla işletim sistemi çalıştırmasına izin veren bir bilgisayar yazılımıdır. Tip-1(Type-2) ve tip-2(Type-2) olmak üzere ikiye ayrılır.
Tip-1 hypervisor yazılımı direk donanım üzerinde çalışır.
Tip-2 hypervisor yazılımı bir işletim sistemi üzerinde çalışır.



Alıntı Yapgörsel gömülü sistemler konferansı 2014 sunumundan alınmıştır https://www.slideshare.net/ManishJaggi/embedded-systems-conference-2014-presentation

Pci-e passthrough nedir ?

Pci-e passthrough sizin pci-e girişine taktığınız ekran kartı, usb kartı, tv kartı, ses kartı vs vs gibi donanımları sanal işletim sistemi içinde kullanma yöntemine pci-e passthrough deniyor.

Kvm nedir ?

Kvm(kernel-based virtual machine)Çekirdek tabanlı sanal makina gnu/linux için sanallaştırma alt yapısı tek başına önyükleme gerçekleştirmez.

Qemu nedir ?

Bir açık kaynak hypervisor yazılımıdır.

Ben ekran kartımı sistemden izole edip sanal windows 10 için ayıracağım ubuntu için ekran kartı olarak işlemci içinden gelen ekran kartını kullanacağım bunun için bios'da ufak bir tadilat yapacağız .

anakart üreticisi + initiate graphic adapter şeklinde google'de ararsanız ilgili ayarın nerede olduğunu bulabilirsiniz



ayarı altında initiate graphic adapter kısmını [IGD] olarak seçiyoruz



ve şimdi işlemciden sanallaştırmayı açmamız gerek https://www.youtube.com/watch?v=UVqbdrDB7aU burada güzelce anlatılmış

Kurulum için bazı paketlere ihtiyacımız var

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils ovmf

görsel olarak sanal makinamızı yönetmek için virt-manager yada gnome-boxes kullanabiliriz ben virt-manager kullanmayı daha çok sevdiğim için virt-manager kurdum.

sudo apt-get install virt-manager

sudo apt-get install gnome-boxes

konsol ortamında ubuntu-vm-builder ile sanal makinalar oluşturabilirsiniz ve virsh ile sanal makinalarınız yönetebilirsiniz ben görsel ortamdan virt-manager ile devam edeceğim

paketleri kurduktan sonra bazı ufak tadilatlar yapmamız gerekiyor

sudo gedit /etc/default/grub

dosyası içinde GRUB_CMDLINE_LINUX_DEFAULT="quiet" satırını bulup
intel işlemci için GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" amd işlemci için GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on" olarak değiştiriyoruz kayıt edip çıkıyoruz.
sudo update-grub2 ile yaptığımız tadilatın geçerli olmasını sağlıyoruz

Daha sonra sudo gedit /etc/modprobe.d/qemu-system-x86.conf dosyası içine sanal makinamızın daha performanslı çalışması için ve sanal makina içinde sanal makina açmak (ama pek performanslı değil) için bazı ufak satırlar gireceğiz bende intel işlemci olduğu için amd işlemci tarafını bilmiyorum ama google'de kvm amd nested olarak arayın bir çözüm bulursunuz. options kvm_intel nested=1
options kvm_intel emulate_invalid_guest_state=0
options kvm ignore_msrs=1
satırlarını giriyoruz ve kayıt ediyoruz.

şimdi passthrough yapmak için pci-e aygıtlarını sistemden izole etmek için gerekli modülleri yüklüyoruz sudo gedit /etc/modules-load.d/kvm.conf dosyası içine vfio
vfio_mdev
vfio-pci
vfio_virqfd
vfio_iommu_type1
vfio_pci
pci_stub
virtio
virtio_balloon
virtio_crypto
virtio_mmio
virtio_scsi
virtio_blk
virtio-gpu
virtio_pci     
virtio_console
virtio_input
virtio-rng
virtio_net
9p
9pnet
9pnet_virtio
satırlarını giriyoruz ve kayıt ediyoruz.

sudo update-initramfs -u ile işlemlerin geçerli olmasını sağlıyoruz şimdi bilgisayarı yeniden başlatabilirsiniz.

artık ekran kartımızı sistemden izole etmenin zamanı geldi

lspci -nn ile ekran kartı üretici ve model numarasını öğreniyoruz

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104 [GeForce GTX 770] [10de:1184] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)

sudo gedit /etc/modprobe.d/vfio.conf içine

options vfio-pci ids=10de:1184,10de:0e0a

[10de:1184] ve [10de:0e0a] bunlar sizde farklı olabilir ama önemli olan bu değerler.

sistemi yeniden başlatıyoruz ve kontrol ediyoruz

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104 [GeForce GTX 770] [10de:1184] (rev a1)
   Subsystem: Gigabyte Technology Co., Ltd GK104 [GeForce GTX 770] [1458:360c]
   Kernel driver in use: vfio-pci
   Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)
   Subsystem: Gigabyte Technology Co., Ltd GK104 HDMI Audio Controller [1458:360c]
   Kernel driver in use: vfio-pci
   Kernel modules: snd_hda_intel

evet değişiklikler uygulanmış artık virt-manager ile sanal makina oluşturabiliriz ben sistemi ingilizce kullanıyorum o yüzden bende menüler ingilizce.

virtual machine manager programını açıyoruz

file > add connection



hypervisor QEMU/KVM kısmını seçiyoruz sonra connect diyoruz



file > new virtual machine



local install media kısmını seçiyoruz



ilerliyoruz



browse tuşuna basıyoruz



browse local tuşuna basıp kurulum iso'su neredeyse seçiyoruz



ilerliyoruz ve kaç çekirdekli ve kaç gb ram olmasını istiyorsak seçiyoruz



ilerliyoruz ve disk'imisin kaç gb olacağını seçiyoruz



ilerliyoruz ve sanal makinamıza isim veriyoruz ve customize configuration before install'i tikliyoruz ve finish tuşuna basıyoruz



overview kısmında firmware kısmını UEFI olarak seçiyoruz



boot options kısmında eğer sanal makinamız sistem açılırken başlamasını istiyorsak Start virtual machine on host boot up'u tikliyoruz



şimdi işin can alcı noktası disk'imiz ilk başta ide olarak geliyor biz bunu sata veya virtio seçiyoruz virtio seçersek kurulum sırasında sürücü yüklememiz gerekiyor ne farkı var derseniz virtio okuma yazmada daha çok performans veriyor ben uğraşmamak için sata seçtim. sürücüyü indirmek için https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso bu iso daha sonra windows kurulumu bittikten sonra işimize yarayacak
şimdiden indirin



cache mode writeback yapıyoruz biraz daha okuma yazmada performans almak için (isteğe bağlı)

aynı şekilde cdrom sürücüsü ide olarak geliyor sata yapıyoruz



tablet, display spice, sound ich6, console, channel spice, video qxl, usb redirector 1 ve 2 ile işimiz yok onları siliyoruz

add hardware > PCI host device kısmından izole ekran kartımı ve ekran kartı üzerindeki ses aygıtını seçiyorum






add hardware > USB host device sistemimde bulunan ikinci klavye ve fareyi sanal makinaya tanımlıyorum





ve begin installation ile kuruluma başlayabiliriz

şöyle  UEFI shell ekranı gelecek bir defaya mahsus ve o kodlar her bir satırda sıra ile gireceğiz iki nokta üst üste yapmak için shift+ş ile yapıyoruz



gerisi normal windows kurulumu nvidia ekran kartları kurulumdan sonra sürücüsünü kursanız bile kod 43 hatası veriyor onuda başka bir konuda anlatacağım

sadece maksimum %5-3 arası performans kaybı ile bütün windows oyunları çalışıyor ben bu passthrough yöntemini yaklaşık bir senedir kullanıyorum hiç bir sıkıntı yaşamadım sizinde güçlü bir bilgisayarınız varsa benim gibi işletim sistemi değiştirmekten bıktıysanız güzel bir yöntem 




lnxdev


Ozmo