Sanal bir makineye eski bir ekran kartı (Radeon 4770) takmak için PCI-Passthrough kullanmaya çalışıyorum. Sanal makinelerimi Debian Linux (Wheezy, 3.2.0-4-amd64) ana bilgisayarında çalıştırmak için Linux-KVM kullanıyorum.
Soru
Açıklığa kavuşturmak için, PCI-Passthrough'u Linux KVM ile uygulamak için doğru 'yol'un ne olduğundan emin değilim. Bu aşamada ben doğru hareket etmektir şüpheli eklemek CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
ve CONFIG_PCI_STUB
"Otobüs seçenekleri (PCI vs.)" çekirdek kaynağı ve recompile bölümüne.
Ancak , yeniden derlemeden önce gerekli eklemelerin kapsamlı bir listesi olup olmadığından emin değilim . Ya da çekirdeği yeniden derlemek gerekirse - belki de daha kolay bir yöntem var mı?
Referans verdiğim rehberlerden sadece linux-kvm.org derleme derken gereklidir. Linux-KVM zaten yüklü ve hipervizör olarak çalışıyor.
Araştırma
Bu noktada sorunumun çekirdeğim ile ilgili olduğunu düşünüyorum. Birincil kaynağım linux-kvm.org adresindeki rehber oldu ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ). Ancak, (görünüşte) dağılıma özgü olan biraz farklı yöntemleri gösteren diğer kaynaklar buldum:
SUSE - "openSUSE: KVM ile sanallaştırma" (Düşük alaka düzeyi ve 2 bağlantı sınırı nedeniyle bağlantı atlandı)
Fedora kılavuzu, setsebool
RedHat'a özgü gibi görünen referanslara kadar çalışır . SUSE kılavuzu, grafik kartı atamasının SUSE tarafından desteklenmediğini, ancak CONFIG_DMAR_DEFAULT_ON
/ boot / config-'uname -r` içinde bir dize bulmam gerektiğini belirttiğim için buna da başvuruyorum. Linux-kvm.org sitesi de referanslar CONFIG_DMAR_DEFAULT_ON
, bu görünür bir ortak ve gerekli bileşen olmak çok.
Not: Fedora veya Debian kılavuzlarında grafik kartları için herhangi bir kısıtlama bulamadım. Başvurulan SUSE belgesi 2006-2013 tarihlidir.
Bulamıyorum CONFIG_DMAR_DEFAULT_ON
sistemimde yer / boot / config-`uname -r`. Daha fazla araştırma düşündürmektedir CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
ve CONFIG_PCI_STUB
ilgili talimatlar alakalı Linux çekirdeği yapılandırma öğelerdir linux-kvm.org . Bu nedenle, ana bilgisayarımın çekirdeğini bu 3 (en azından) çekirdek yapılandırma öğesiyle yeniden derlemem gerektiğine inanıyorum. intel_iommu=on
Ana bilgisayar işletim sistemime bir çekirdek parametresi olarak önyükleme yapmak yetersiz görünüyor.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
VT-d / IOMMU / KVM Destek Onayı
Araştırmam PCI-Passthrough'un VT-d için hem CPU hem de Anakart desteği gerektirdiğini gösteriyor.
VT-d
K olmayan bir INTEL i7-3770 (ark.intel.com/products/65719 uyarınca) işlemcimin VT-d'yi desteklediğini doğruladım:
Yönlendirilmiş G / Ç için Intel® Sanallaştırma Teknolojisi (VT-d) ‡ Evet
My Asrock Z77 Extreme4 anakart da VT-d'yi destekler (Kullanım Kılavuzunun 62. sayfasında):
VT-d Intel ® VT-d teknolojisini (Yönlendirilmiş G / Ç için Intel ® Sanallaştırma Teknolojisi) etkinleştirmek veya devre dışı bırakmak için bunu kullanın. Bu özelliğin varsayılan değeri [Devre dışı] şeklindedir.
IOMMU
Sistemimin IOMMU desteğine sahip olduğunu doğruladım:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM, PCI-Passthrough desteğinin yanı sıra yüklü ve işlevseldir:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
VT-d'nin anakartımın BIOS'undan etkinleştirilmesini sağladım. Bu nedenle, VT-d kullanımını engelleyecek donanım / BIOS sorunlarından şüphelenmiyorum. Ne olursa olsun, ekran kartımı ana bilgisayarımdan başarıyla ayıramıyorum ve sanal bir makineye yeniden atayamıyorum .
Düşünceleri Kapatma
Sonunda ben de denedim denemek istiyorum:
echo "8086 10b9" \> /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" \> /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" \> /sys/bus/pci/drivers/pci-stub/bind
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0
ve hedef VM'yi oluşturmaya çalıştıktan sonra aşağıdaki hatayı aldı:
Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized
Ana bilgisayar hala ekran kartı kontrolünden vazgeçmeyecek ve büyük olasılıkla çekirdek uygun yapılandırma öğeleri ile derlenmemiş olması nedeniyle tahmin ediyorum.
Bu benim için yeni bir bölge, bu yüzden lütfen deneyimimi affet. Ben ediyorum ölçüde bu onay doğru yolda olduğumu basitçe bile, herhangi bir geri bildirim için teşekkür ederiz. Göze batan bir gözetim yaptıysam veya fazla düşünürsem lütfen bana bildirin. Soruma yapıcı eleştiriler de hoş karşılanıyor. "Bana yardım etmen için" yeterli bilgi sağlamadıysam (ya da çok fazla dahil ettiysem!). Sorumun daha net veya daha kolay yanıtlanmasına yardımcı olmaktan memnuniyet duyarım.
Şimdiden teşekkür ederim,