Saya mencoba menggunakan PCI-Passthrough untuk melampirkan kartu video lama (Radeon 4770) ke mesin virtual. Saya menggunakan Linux-KVM untuk menjalankan mesin virtual saya pada host Debian Linux (Wheezy, 3.2.0-4-amd64).
Pertanyaan
Untuk memperjelas, saya tidak yakin apa 'jalur' yang benar untuk mengimplementasikan PCI-Passthrough dengan Linux KVM. Pada tahap ini saya menduga tindakan yang benar adalah dengan menambahkan CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
, dan CONFIG_PCI_STUB
dengan "pilihan Bus (PCI dll)" bagian dari kernel dan mengkompilasi ulang.
Tetapi saya tidak yakin apakah ini merupakan daftar tambahan yang diperlukan sebelum melakukan kompilasi ulang. Atau jika kompilasi ulang kernel diperlukan - mungkin ada metode yang lebih mudah?
Dari panduan yang saya referensikan, hanya linux-kvm.org yang secara eksplisit menyebutkan kompilasi diperlukan. Linux-KVM sudah diinstal dan berfungsi sebagai hypervisor.
Penelitian
Pada titik ini saya pikir masalah saya terkait dengan kernel saya. Sumber utama saya telah menjadi panduan di linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ). Namun, saya telah menemukan sumber daya lain yang menunjukkan metode yang sedikit berbeda yang (tampaknya) spesifik distribusi:
SUSE - "openSUSE: Virtualisasi dengan KVM" (Tautan dihilangkan karena relevansi rendah dan batas 2-tautan)
Panduan Fedora berfungsi sampai referensi setsebool
yang tampaknya khusus RedHat. Panduan SUSE menunjukkan penugasan kartu-grafis tidak didukung oleh SUSE, namun saya juga CONFIG_DMAR_DEFAULT_ON
merujuknya karena ini mengindikasikan bahwa saya harus menemukan string di / boot / config-`uname -r`. Situs linux-kvm.org juga referensi CONFIG_DMAR_DEFAULT_ON
, jadi ini tampaknya komponen yang umum dan perlu.
Catatan: Saya belum menemukan batasan untuk kartu grafis dalam panduan untuk Fedora atau Debian. Dokumen SUSE yang direferensikan bertanggal 2006-2013.
Saya tidak dapat menemukan CONFIG_DMAR_DEFAULT_ON
di / boot / config-`uname -r` di sistem saya. Penelitian lebih lanjut menunjukkan bahwa CONFIG_DMAR
,, CONFIG_DMAR_DEFAULT_ON
dan CONFIG_PCI_STUB
merupakan item konfigurasi kernel Linux yang relevan dengan instruksi di linux-kvm.org . Karena itu saya percaya bahwa saya perlu mengkompilasi ulang kernel host saya dengan 3 (setidaknya) item konfigurasi kernel ini. Boot dengan intel_iommu=on
sebagai parameter kernel ke host-OS saya tampaknya tidak cukup.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Konfirmasi Dukungan VT-d / IOMMU / KVM
Penelitian saya menunjukkan bahwa PCI-Passthrough membutuhkan dukungan CPU dan Motherboard untuk VT-d.
VT-d
Saya telah mengkonfirmasi bahwa prosesor saya, non-k INTEL i7-3770 (per ark.intel.com/products/65719), mendukung VT-d:
Teknologi Virtualisasi Intel® untuk I / O Sutradara (VT-d) ‡ Ya
Motherboard My Asrock Z77 Extreme4 saya juga mendukung VT-d (per halaman 62 dari Panduan Pengguna):
VT-d Gunakan ini untuk mengaktifkan atau menonaktifkan teknologi Intel ® VT-d (Intel® Virtualization Technology untuk Directed I / O). Nilai default dari fitur ini adalah [Dinonaktifkan].
IOMMU
Saya memverifikasi bahwa sistem saya memiliki dukungan IOMMU:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM diinstal dan fungsional, selain dari dukungan PCI-Passthrough:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
Saya telah memastikan bahwa VT-d diaktifkan melalui BIOS motherboard saya. Karena itu, saya tidak mencurigai masalah perangkat keras / BIOS yang akan mencegah penggunaan VT-d. Bagaimanapun juga, saya tidak berhasil melepaskan kartu video saya dari host saya dan menugaskannya kembali ke mesin virtual .
Pikiran Penutup
Akhirnya saya ingin menyebutkan bahwa saya juga mencoba pengujian:
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
dan mendapat kesalahan berikut setelah mencoba membuat target VM:
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
Saya menduga ini karena tuan rumah masih tidak akan melepaskan kendali kartu video dan kemungkinan karena kernel tidak dikompilasi dengan item konfigurasi yang sesuai.
Ini adalah wilayah baru bagi saya jadi tolong maafkan pengalaman saya. Saya akan sangat menghargai umpan balik apa pun, bahkan jika itu hanya konfirmasi bahwa saya berada di jalur yang benar. Tolong beri tahu saya jika saya telah melakukan pengawasan mencolok atau terlalu banyak berpikir. Kritik konstruktif atas pertanyaan saya juga diterima. Beri tahu saya jika saya belum memberikan informasi yang cukup untuk "membantu Anda membantu saya" (atau jika saya sudah memasukkan terlalu banyak!). Saya akan sangat senang membantu membuat pertanyaan saya lebih jelas atau lebih mudah dijawab.
Terima kasih sebelumnya,
sumber
Jawaban:
Artikel yang disebutkan untuk PCI-passthrough, diperlukan konfigurasi Kernel
Namun, saya tidak dapat menemukan opsi ini di bawah "Opsi bus" dan sebagai gantinya di bawah "Driver Perangkat -> Dukungan Perangkat Keras IOMMU".
Setelah mengikuti artikel yang disebutkan, saya masih punya masalah boot mesin tamu dan mendapatkan kesalahan bahwa "Perangkat 'pci-assign' tidak dapat diinisialisasi". Saya berhasil mem-boot-nya dengan menjalankan:
Rujuk ke artikel berikut jika Anda masih memiliki masalah: http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html
sumber