Debian'da Linux-KVM ile PCI Geçişi Uygulaması


10

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_ONve 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:

Fedora-- https://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html

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, setseboolRedHat'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_ONsistemimde yer / boot / config-`uname -r`. Daha fazla araştırma düşündürmektedir CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONve CONFIG_PCI_STUBilgili 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=onAna 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,


Ne olur, video kartının kendisini bir ana bilgisayara takmasına izin vermemeniz (örneğin, bu video kartını ana makinenize takmadan önyükleme yapın. Ya bir sürücü sağlayarak / devre dışı bırakmadan ya da önyükleme sırasında atlanacak bir çekirdek önyükleme parametresi kullanarak) ?
Hennes

Yanıtlar:


1

PCI geçidi için belirtilen makale, Çekirdek yapılandırması gerekiyor

make menuconfig
set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"

optional setting: 
set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"

Ancak, bu seçenekleri "Veri yolu seçenekleri" altında ve bunun yerine "Aygıt Sürücüleri -> IOMMU Donanım Desteği" altında bulamadım.

Bahsedilen makaleyi takip ettikten sonra, konuk makineyi açıp "Aygıt 'pci-ata' başlatılamadı" hataları alıyorum. Ben yürüterek önyükleme başardı:

 echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

Hâlâ sorun yaşıyorsanız aşağıdaki makaleye bakın: http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.