Bölüm 1
Device Passthrought (Donanım Geçişi) Nedir ?
Herkesin elbet bir sanal makinası vardır. Gerek bir oyunda bot kullanırken ana makineyi meşgul etmemesi için gerek
sızma testlerini vs yapmak için gerek, linux kullanırken windows uygulamalarını çalıştırabilmek için.
Şimdi bu sanal makinelerde sorun nedir ? Donanımlara bir uygulama vasıtasıyla eriştiğinden işlemlerde gecikmenin (latency) fazla olması. Bu durumda makineyi sanki Anydesk'den bir cihaza uzaklan bağlanmışız gibi bir his ile kullanırız. Sebebi ise VirtualMachine(Sanal makine) ile donanım arasında bir ara yazılımın iletişimi sağlaması. Burada gecikmeleri en aza indirmek için belirli donanımları belirli sanal makinelere Geçişini(Passthrought) yaparız.Türkçe'si donanım geçişi olan bu yöntemle sanal makinamız direk donanım ile iletişime geçer ve bare-metal gibi %5~%10 gecikmelerle kullanılabilir. Tabi CPU direk passthrought yapılabilirken ekran kartı ne yazık ki buna sahip değil.
Bunu yapabilmemiz için host(ana sistem)'umuzu iGPU(işlemci üzerindeki tümleşik gpu)'ya yada ikinci bir ekran kartına geçirip boşa çıkan kartımızı sanala tabiri caizse hibe etmemiz gerekir. Eğer işlemcimiz de tümleşik görüntü birimi (iGPU) yoksa ikinci bir ekran kartına ihtiyaç duyarız ki benim senaryom tam olarak bu.
B760 Gaming X anakartımda RTX3050'yi uzun bir süre host'ta kullandım ama rx560 alıp hostu rx560'a geçirdim ve boşa çıkardığım 3050'yi windows 10 makinama geçişini sağladım. Bunu yapmadan önce anakarta x16 slotuna rx560'ı taktım x4 slotunada 3050'yi taktıktan sonra biosta gerekli ayarları yaptım.
Biostan 4G Decodingi aktif ediyoruz.
İşlemcimiz intel ise biostan Intel VT-d teknolojisini aktif ediyoruz.
İşlemcimiz amd ise biostan AMD:SVM ve IOMMU'yu aktif ediyoruz.
Bios ayarlarınızda varsa Primary Display'da hosta vereceğimiz ekran kartını seçiyoruz (Benim senaryomda X16 Slotu direk sisteme bağlanan)
Başlamadan önce dikkat edilmesi gerekenler !
Ben ikinci ekran kartı AMD tercih ettim. Linux'te güncelleme yapmadan direk donanımsal desteği mevcut ama eski bir sürüm alırsanız destek vermeyebilir. Bu nedenle nacizane tavsiyem 550 ve üst modelleri tercih etmeniz. 3050 ise windows tarafında iyi performansa sahip olduğu ve daha az sorunlu olduğu kanaatindeyim. İşlemcim i5-12400F bu iş için yeterli ama iki ekran kartı bu anakart işlemci dahil 650 Watt ve üstü gold yada silver standardı bir PSU'ya sahip olmanızı tavsiye ederim. Ben aktif olarak 750 Watt Gold kullanıyorum.
Arch ve çatal sistemler kullananlar stable kernel sürümlerine geçtikten sonra yapmaları daha iyi sebebi ise GPU Pass biraz ince bir ip ve kernel güncelemelerinden sonra WM'in siyah ekranda kalma olasılığı var. Bu nedenle stable sürüm olmak biraz daha az güncelleme derdi getirir.
Sizler senaryonuza bağlı şekilde hemen hemen aynı adımları farklı uygulamalısınız.
Bu işlem size Bare-Metal'e yakın Performans verecek ama yinede lol,valorant gibi oyunlar oynayamayacaksınız sebebi ise WM'de olduklarını tespit ediyorlar.
Önceden nvidia driveri olduğundan login ekranını göremedim CTRL+ALT+F2 tuş kombinasyonu ile TTY moduna geçiyorum ve root şifremi girerek devam ediyorum.
Bu kod vasıtasıyla ekran kartı driverlerimi görüntüledim.
Video-Linux
Video-Nvidia
İki tane ekran driver(sürücü)'i olduğunu görüyorum ekran kartının sürücüsünü kaldırıyorum.
sonra açık akynak drivere geçiyoruz.
Bölüm 2
Snapshot nedir ve nasıl alınır ?
Manjaro’da snapshot, sisteminin o anki hâlinin anlık bir kopyası demektir. Yedek gibi değildir daha çok ondan sonraki değişiklikleri kaldıran bir özellik gibi çalışır.
Rebootun arından terminalimle devam ediyorum.
Önce bir diskimizin tipine bakalım
Arından launcher ile açıyoruz
Disk tipi : EXT4 Snapshot'u arayüzden oluştur diyoruz ve
Snapshot Type: RSYNC
Include /home: Opsiyonel ama tavsiye etmem uzun sürebilir
Location: Dış disk varsa seçin yoksa iç disk seçin.
Disk tipi : BTRFS Snapshot'u arayüzden oluştur diyoruz ve
Snapshot Type: BTRFS
Location: Dış disk varsa seçin yoksa iç disk seçin.
Schedule: İsterseniz yapın şu an için önemi yok.
Include /home: Opsiyonel ama tavsiye etmem uzun sürebilir
EXT4 ve BTRFS Farkları.
EXT4 BTRFS'ye nazaran daha tecrübeli ve köklü bu nedenle stabil ve öngörülebilir.
BTRFS ise yeni kan, hızlı ve anlık görüntü alınıp dönülebilir.
Snapshot aldıysak terminalden kontrol ediniz !
Bölüm 3
Grub ayarlarıyla IOMMU'yu aktif etmek.
Grub nedir diye seslerin yükseldiğini duyar gibiyim. Grub genelde Linux sistemlerin kullandığı, Biosun disktei sistem(leri) ayaklandırma talimatlarına sahip olan ilk kısım. Genelde windows kullananlar hiç Grub görmez ama linuxçüler iyi tanır
Şimdiki hedefimiz ise sistem tam ayaklanmadan işlemcimizin IOMMU özelliğini aktif etmek.
Iommu'da nedir? dediğinizi duyar gibiyim.
IOMMU ise Input Output Memory Management Unit meali : Girdi Çıktı Hafızası Yönetim Birimi.
Donanımların ihtiyaç olan hafızayı birbirinden ayırarak izole şekilde kalmalarını sağlayan bir yapıdır.
Bilgisayarı kapatmadıysanız hemen döndük terminale
Şimdi bu belgede şu satıra bakınız
GRUB_CMDLINE_LINUX_DEFAULT="quiet ..."
Burası grub başlarken talimatları her kodun detayına girmeyeceğim ama burada genel olarak
Diskiniz şifreliyse açma işlemi. IOMMU aktif etme. Açılırken çıktıları bastırmak gibi durumlar gerçekleşiyor.
Şimdi buradaki eski argümanları BOZMADAN ! şunları ekliyoruz
Intel İşlemciler : intel_iommu=on iommu=pt
AMD İşlemciler: amd_iommu=on iommu=pt
Güncel haliyle : GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt ..." (... diğer parametre ve argümanları temsil etmektedir.)
CTRL+X -> E -> ENTER (Kaydedin ve çıkınız)
Terminalimize döndük ve grubu günceliyoruz.
Yeniden başladıktan sonra terminalden kontrol ediniz.
Eğer çıktıda göremezseniz ve tüm talimatları doğru gerçekleştirdiyseniz ;
Dosyaya tekrar giderek düzenlediğimiz satırın alt satırınada 2 parametreyi giriniz [Üsteki resimde mevcuttur].
Bu sebeple çıktımda 2 kere parametre gözükmektedir bazı bilgisayarlarda ilk argümanın kabul edilmediğini gözlemledim.
Bölüm 4
Donanım(lar)ı hostan koparmak.
Donanımlarımızı hostan koparmak gibi bilimsel bir başlıktan sonra pekte açıklamaya gerek duymasam da açıklayayım;
Şu anda kernel'in tanıdığı ve bildiği donanımları görmektesiniz. Sistemim her an ihtiyaç duyarsa bu donanımları kullanmak üzere alabilir.
Örneğin AMD ekran kartını çıkarttım yada arıza verdi. İşte hemen gidip host 3050'yi kendi emri altına alabilir. Buda VM'de öngörülemez siyah ekranlara çökmelere neden olur. Bu nedenle biz burada geçişini sağlayacağımız donanımı başka bir yere ayıracağız.
Neyse öncelikle PCI cihazlarımızı görüntülemekle başlayalım;
Şimdi çıktıyı doğru yorumlamalıyız ilk olarak buradaki her bir satırın yapısı şu şekildedir.
İlk xx kısmı Bus'yu temsil etmektedir burası kernel'in cihazları hangi slota(ymış) gibi işlem yaptığını varsayabiliriz (Bizim değiştireceğimiz ve dikkat edeceğimiz kısım burasıdır).
Birde en son köşeli parantezlerin içerisin ise bize BDF adresini göstermektedir (Burasıda bizim için şokomelli ayıracağımız donanımı not alıyoruz.)
Şimdi benim çıktımda cihazın zaten farklı bir bus'ta olduğu gözükmektedir ama görseli yaptıktan sonra almak aklıma geldiği için böyle yoksa normalde 00'daydı.
10de:2587 ve 10de:2291 not ettik bdf'lerini.
içerisinde bir satıra
options vfio-pci ids=xxx:xxxx,xxx:xxxx şeklinde bir kısım ekleyin ='den sonra siz donanımlarınızın kendi bdf'leriniz yazın , ile ayırıp tekrar giriniz
Bu satırda vfio-pci'a 2 tane donanımı ayırmış olduk.
Bunu yaparak bdf'lerini gördiğiniz donanımları host'unuzdan ayırmış oluyorsunuz. Ana sisteminiz artık bu donanımların özelliklerine sahip değiller.
Dikkat edin kafanıza göre ayırmayın ayırdığınız donanımın 2'si bilgisayarınıza bağlı değilse çok problem olur ve sistem çöker.
Burada ben NVIDIA'nın görüntü birimiyle Ses birimi ayırdım (Aynı donanım bana bu iki özelliği kazandırıyor mecburen yan yana olmak zorundalar)
Kaydedin ve çıkın.
Bölüm 5
Driverleri yasaklayıp işimizi sağlama alalım.
Bu satırda kernel'e bu sürücüleri alma talimatını veriyoruz.
Buradaki * donanım markası olacak Bende nvidia [yani şart değil ama saçma isimler koyup sonra bu ne diye takılmayın.]
İçerisine donanımın kullanabileceği sürücü isimlerini aşında blacklist ibaresiyle veriyorum.
Neyi yasaklayacağız bilmiyorsak
Çıktısında kernel module kısmına bakınız. Eğer emin olamazsanız yasaklamadan önce iyice araştırınız. Bazen genel bir driverde yüklenebilir.
Buradada görüldüğü gibi nvidia 3050 sürücüsü doğruyken yine ona ait ses donanımının sürücüsü genel bir intel sürücüsü gözükmektedir.
Blacklist sonrası initramfs'yi güncellemeliyiz.
Ardından restart !
Tekrar bir kontrol ediniz farklı bir slot olarak gözüküyor mu?
Evetse; Artık WM makinalarımıza GPU pass yapmaya hazırız.
Burada bir snapshot alınız !
Hayırsa; Adımları gözden geçirin ve yanlış yaptığınız adımları düzeltiniz.
Device Passthrought (Donanım Geçişi) Nedir ?
Herkesin elbet bir sanal makinası vardır. Gerek bir oyunda bot kullanırken ana makineyi meşgul etmemesi için gerek
sızma testlerini vs yapmak için gerek, linux kullanırken windows uygulamalarını çalıştırabilmek için.
Şimdi bu sanal makinelerde sorun nedir ? Donanımlara bir uygulama vasıtasıyla eriştiğinden işlemlerde gecikmenin (latency) fazla olması. Bu durumda makineyi sanki Anydesk'den bir cihaza uzaklan bağlanmışız gibi bir his ile kullanırız. Sebebi ise VirtualMachine(Sanal makine) ile donanım arasında bir ara yazılımın iletişimi sağlaması. Burada gecikmeleri en aza indirmek için belirli donanımları belirli sanal makinelere Geçişini(Passthrought) yaparız.Türkçe'si donanım geçişi olan bu yöntemle sanal makinamız direk donanım ile iletişime geçer ve bare-metal gibi %5~%10 gecikmelerle kullanılabilir. Tabi CPU direk passthrought yapılabilirken ekran kartı ne yazık ki buna sahip değil.
Bunu yapabilmemiz için host(ana sistem)'umuzu iGPU(işlemci üzerindeki tümleşik gpu)'ya yada ikinci bir ekran kartına geçirip boşa çıkan kartımızı sanala tabiri caizse hibe etmemiz gerekir. Eğer işlemcimiz de tümleşik görüntü birimi (iGPU) yoksa ikinci bir ekran kartına ihtiyaç duyarız ki benim senaryom tam olarak bu.
B760 Gaming X anakartımda RTX3050'yi uzun bir süre host'ta kullandım ama rx560 alıp hostu rx560'a geçirdim ve boşa çıkardığım 3050'yi windows 10 makinama geçişini sağladım. Bunu yapmadan önce anakarta x16 slotuna rx560'ı taktım x4 slotunada 3050'yi taktıktan sonra biosta gerekli ayarları yaptım.
Biostan 4G Decodingi aktif ediyoruz.
İşlemcimiz intel ise biostan Intel VT-d teknolojisini aktif ediyoruz.
İşlemcimiz amd ise biostan AMD:SVM ve IOMMU'yu aktif ediyoruz.
Bios ayarlarınızda varsa Primary Display'da hosta vereceğimiz ekran kartını seçiyoruz (Benim senaryomda X16 Slotu direk sisteme bağlanan)
Başlamadan önce dikkat edilmesi gerekenler !
Ben ikinci ekran kartı AMD tercih ettim. Linux'te güncelleme yapmadan direk donanımsal desteği mevcut ama eski bir sürüm alırsanız destek vermeyebilir. Bu nedenle nacizane tavsiyem 550 ve üst modelleri tercih etmeniz. 3050 ise windows tarafında iyi performansa sahip olduğu ve daha az sorunlu olduğu kanaatindeyim. İşlemcim i5-12400F bu iş için yeterli ama iki ekran kartı bu anakart işlemci dahil 650 Watt ve üstü gold yada silver standardı bir PSU'ya sahip olmanızı tavsiye ederim. Ben aktif olarak 750 Watt Gold kullanıyorum.
Arch ve çatal sistemler kullananlar stable kernel sürümlerine geçtikten sonra yapmaları daha iyi sebebi ise GPU Pass biraz ince bir ip ve kernel güncelemelerinden sonra WM'in siyah ekranda kalma olasılığı var. Bu nedenle stable sürüm olmak biraz daha az güncelleme derdi getirir.
Sizler senaryonuza bağlı şekilde hemen hemen aynı adımları farklı uygulamalısınız.
Bu işlem size Bare-Metal'e yakın Performans verecek ama yinede lol,valorant gibi oyunlar oynayamayacaksınız sebebi ise WM'de olduklarını tespit ediyorlar.
Önceden nvidia driveri olduğundan login ekranını göremedim CTRL+ALT+F2 tuş kombinasyonu ile TTY moduna geçiyorum ve root şifremi girerek devam ediyorum.
Kod:
Yusefuyn@ mhwd -li
Video-Linux
Video-Nvidia
İki tane ekran driver(sürücü)'i olduğunu görüyorum ekran kartının sürücüsünü kaldırıyorum.
Kod:
Yusefuyn@sudo mhwd -r pci video-nvidia
sonra açık akynak drivere geçiyoruz.
Kod:
Yusefuyn@sudo mhwd -i pci video-linux
Kod:
Yusefuyn@sudo reboot
Bölüm 2
Snapshot nedir ve nasıl alınır ?
Manjaro’da snapshot, sisteminin o anki hâlinin anlık bir kopyası demektir. Yedek gibi değildir daha çok ondan sonraki değişiklikleri kaldıran bir özellik gibi çalışır.
Rebootun arından terminalimle devam ediyorum.
Önce bir diskimizin tipine bakalım
Kod:
Yusefuyn@lsblk -f
Çıktı bu şekilde sistemin yüklü olduğu benim diskin tipi BTRFS bunu unutmayalım.
Aşağıdaki komutu çalıştırarak timeshift'i kuruyoruz.
Kod:
Yusefuyn@sudo pacman -S timeshift
Kod:
Yusefuyn@sudo timeshift-launcher
Disk tipi : EXT4 Snapshot'u arayüzden oluştur diyoruz ve
Snapshot Type: RSYNC
Include /home: Opsiyonel ama tavsiye etmem uzun sürebilir
Location: Dış disk varsa seçin yoksa iç disk seçin.
Disk tipi : BTRFS Snapshot'u arayüzden oluştur diyoruz ve
Snapshot Type: BTRFS
Location: Dış disk varsa seçin yoksa iç disk seçin.
Schedule: İsterseniz yapın şu an için önemi yok.
Include /home: Opsiyonel ama tavsiye etmem uzun sürebilir
EXT4 ve BTRFS Farkları.
EXT4 BTRFS'ye nazaran daha tecrübeli ve köklü bu nedenle stabil ve öngörülebilir.
BTRFS ise yeni kan, hızlı ve anlık görüntü alınıp dönülebilir.
Snapshot aldıysak terminalden kontrol ediniz !
Kod:
Yusefuyn@sudo timeshift --list
Bölüm 3
Grub ayarlarıyla IOMMU'yu aktif etmek.
Grub nedir diye seslerin yükseldiğini duyar gibiyim. Grub genelde Linux sistemlerin kullandığı, Biosun disktei sistem(leri) ayaklandırma talimatlarına sahip olan ilk kısım. Genelde windows kullananlar hiç Grub görmez ama linuxçüler iyi tanır
Iommu'da nedir? dediğinizi duyar gibiyim.
IOMMU ise Input Output Memory Management Unit meali : Girdi Çıktı Hafızası Yönetim Birimi.
Donanımların ihtiyaç olan hafızayı birbirinden ayırarak izole şekilde kalmalarını sağlayan bir yapıdır.
Bilgisayarı kapatmadıysanız hemen döndük terminale
Kod:
Yusefuyn@sudo nano /etc/default/grub
Şimdi bu belgede şu satıra bakınız
GRUB_CMDLINE_LINUX_DEFAULT="quiet ..."
Burası grub başlarken talimatları her kodun detayına girmeyeceğim ama burada genel olarak
Diskiniz şifreliyse açma işlemi. IOMMU aktif etme. Açılırken çıktıları bastırmak gibi durumlar gerçekleşiyor.
Şimdi buradaki eski argümanları BOZMADAN ! şunları ekliyoruz
Intel İşlemciler : intel_iommu=on iommu=pt
AMD İşlemciler: amd_iommu=on iommu=pt
Güncel haliyle : GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt ..." (... diğer parametre ve argümanları temsil etmektedir.)
CTRL+X -> E -> ENTER (Kaydedin ve çıkınız)
Terminalimize döndük ve grubu günceliyoruz.
Kod:
Yusefuyn@sudo update-grub
Kod:
Yusefuyn@reboot
Yeniden başladıktan sonra terminalden kontrol ediniz.
Kod:
Yusefuyn@cat /proc/cmdline
Eğer çıktıda göremezseniz ve tüm talimatları doğru gerçekleştirdiyseniz ;
Kod:
Yusefuyn@sudo nano /etc/default/grub
Dosyaya tekrar giderek düzenlediğimiz satırın alt satırınada 2 parametreyi giriniz [Üsteki resimde mevcuttur].
Bu sebeple çıktımda 2 kere parametre gözükmektedir bazı bilgisayarlarda ilk argümanın kabul edilmediğini gözlemledim.
Bölüm 4
Donanım(lar)ı hostan koparmak.
Donanımlarımızı hostan koparmak gibi bilimsel bir başlıktan sonra pekte açıklamaya gerek duymasam da açıklayayım;
Şu anda kernel'in tanıdığı ve bildiği donanımları görmektesiniz. Sistemim her an ihtiyaç duyarsa bu donanımları kullanmak üzere alabilir.
Örneğin AMD ekran kartını çıkarttım yada arıza verdi. İşte hemen gidip host 3050'yi kendi emri altına alabilir. Buda VM'de öngörülemez siyah ekranlara çökmelere neden olur. Bu nedenle biz burada geçişini sağlayacağımız donanımı başka bir yere ayıracağız.
Neyse öncelikle PCI cihazlarımızı görüntülemekle başlayalım;
Kod:
Yusefuyn@lspci -nn
Şimdi çıktıyı doğru yorumlamalıyız ilk olarak buradaki her bir satırın yapısı şu şekildedir.
İlk xx kısmı Bus'yu temsil etmektedir burası kernel'in cihazları hangi slota(ymış) gibi işlem yaptığını varsayabiliriz (Bizim değiştireceğimiz ve dikkat edeceğimiz kısım burasıdır).
Birde en son köşeli parantezlerin içerisin ise bize BDF adresini göstermektedir (Burasıda bizim için şokomelli ayıracağımız donanımı not alıyoruz.)
Şimdi benim çıktımda cihazın zaten farklı bir bus'ta olduğu gözükmektedir ama görseli yaptıktan sonra almak aklıma geldiği için böyle yoksa normalde 00'daydı.
10de:2587 ve 10de:2291 not ettik bdf'lerini.
Kod:
Yusefuyn@sudo nano /etc/modprobe.d/vfio.conf
options vfio-pci ids=xxx:xxxx,xxx:xxxx şeklinde bir kısım ekleyin ='den sonra siz donanımlarınızın kendi bdf'leriniz yazın , ile ayırıp tekrar giriniz
Bu satırda vfio-pci'a 2 tane donanımı ayırmış olduk.
Bunu yaparak bdf'lerini gördiğiniz donanımları host'unuzdan ayırmış oluyorsunuz. Ana sisteminiz artık bu donanımların özelliklerine sahip değiller.
Dikkat edin kafanıza göre ayırmayın ayırdığınız donanımın 2'si bilgisayarınıza bağlı değilse çok problem olur ve sistem çöker.
Burada ben NVIDIA'nın görüntü birimiyle Ses birimi ayırdım (Aynı donanım bana bu iki özelliği kazandırıyor mecburen yan yana olmak zorundalar)
Kaydedin ve çıkın.
Bölüm 5
Driverleri yasaklayıp işimizi sağlama alalım.
Bu satırda kernel'e bu sürücüleri alma talimatını veriyoruz.
Kod:
Yusefuyn@sudo nano /etc/modprobe.d/blacklist-*.conf
İçerisine donanımın kullanabileceği sürücü isimlerini aşında blacklist ibaresiyle veriyorum.
Neyi yasaklayacağız bilmiyorsak
Kod:
Yusefuyn@lspci -k
Buradada görüldüğü gibi nvidia 3050 sürücüsü doğruyken yine ona ait ses donanımının sürücüsü genel bir intel sürücüsü gözükmektedir.
Blacklist sonrası initramfs'yi güncellemeliyiz.
Kod:
Yusefuyn@sudo mkinitcpio -P
Ardından restart !
Kod:
Yusefuyn@sudo reboot
Kod:
Yusefuyn@lspci -k
Evetse; Artık WM makinalarımıza GPU pass yapmaya hazırız.
Burada bir snapshot alınız !
Hayırsa; Adımları gözden geçirin ve yanlış yaptığınız adımları düzeltiniz.
Son düzenleme:
