GNU/Linux >> Belajar Linux >  >> Linux

Linux – Mengaktifkan Iommu Di Kernel Untuk Pass-through Kartu Grafis?

Pertanyaan singkat:

Bagaimana cara mengaktifkan intel_iommu pengaturan di kernel Linux? Saya menjalankan Host Debian, menggunakan bootloader grub2. Dokumentasi yang saya lihat mengatakan untuk mengedit /boot/grub/menu.lst , yang tampaknya hanya relevan untuk grub 1.x, karena saya tidak memiliki file itu.

Ini adalah pemahaman saya (dan opsi terakhir yang dapat saya pikirkan) bahwa mengubah opsi boot ini mungkin menghilangkan pesan kesalahan berikut di /var/log/kern.log

vboxpci: No IOMMU domain (attach)

Pertanyaan panjang:

Memberi OS tamu akses langsung ke kartu grafis

Baru-baru ini saya menyadari bahwa mungkin untuk melewati perangkat PCI-express ke OS tamu yang berjalan di Virtualbox. Keren, pikirku! Saya memiliki dua kartu grafis NVIDIA Quadro FX (dengan koneksi jembatan SLI, yang saya harap tidak menyebabkan kesedihan) dan ingin mendedikasikan kartu grafis ke-2 untuk OS tamu, sehingga saya dapat menggunakan fitur OpenGL di dalamnya Photoshop dkk.

NVIDIA memasarkan konfigurasi "SLI Multi-OS" ini, yang pada dasarnya adalah apa yang telah lama ingin saya atur, tetapi saya tidak ingin menghabiskan banyak uang untuk perangkat lunak Virtualisasi (Parallels workstation extreme), ketika saya telah menggunakan VirtualBox dengan cukup bahagia selama bertahun-tahun sekarang.

Sistem Inang

Saya menjalankan linux-3.5.0-19 dari repositori Debian, pada peralatan workstation yang cukup canggih (Mobo Superkomputer Asus P6T7 WS dengan chipset Intel ICH10R dan CPU Xeon W3680) dan ingin mengaktifkan dukungan IOMMU di kernel , sebaiknya tanpa harus mengompilasinya sendiri.

BIOS

Dalam pengaturan BIOS, saya mengaktifkan dukungan VT-x dan VT-d. Namun, saya tidak dapat melihat apa pun yang secara spesifik menyebutkan IOMMU.

Menyambungkan perangkat PCI

Ini sangat sederhana! Dokumentasi VirtualBox resmi ada di sini. Apa yang saya lakukan, yang menurut saya kurang ambigu, adalah membuka nvidia-settings , pilih kartu grafis sekunder dan catat ID Bus (“PCI:5:0:0” dalam kasus saya). Kemudian, dari baris perintah host:-

VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0

(Ketika saya pertama kali menjalankan ini, ada kesalahan karena VirtualBox meniru chipset PIIX; dikatakan bahwa pass-through PCI hanya berfungsi dengan chipset ICH9. Jadi saya mengubah Chipset menjadi ICH9 di pengaturan Sistem VirtualBox VM dan menyalakan tamu untuk menginstal driver baru yang diperlukan. Reboot nanti dan semuanya bekerja dengan baik, jadi saya mematikan tamu, dan menjalankan kembali perintah.)

Tidak ada output, dan saya segera dikembalikan ke baris perintah.

Menggunakan GPU host dari tamu

Sebelum menyalakan tamu, saya pertama-tama me-reboot mesin Host, jika sesuatu yang tidak terdokumentasi perlu terjadi di kernel, oleh virtualbox-dkms. Saat saya menjalankan perintah sebelumnya tanpa sudo hak istimewa, saya ragu ada perubahan yang dibuat.

Ketika saya selanjutnya memulai tamu, Pembaruan Windows mulai melakukan hal itu dan secara otomatis mendeteksi dan menginstal driver NVIDIA yang benar. Semua terlihat bagus sejauh ini. Sebelum saya dapat menggunakan perangkat, saya harus me-reboot tamu…

Masalah

Sekarang driver kartu grafis diinstal pada tamu dan perangkat PCI terpasang, saya tidak bisa masuk ke desktop Windows. Saya masuk ke layar masuk Windows, lalu setelah masuk, layar membeku, hanya mengatakan "Selamat datang", dengan lingkaran biru yang seharusnya berputar tetapi tidak di sebelahnya.

Terkait:Linux – Bagaimana cara Linux memutuskan aplikasi default?

Di /var/log/kern.log , pesan terakhir yang dicetak adalah:-

vboxpci: vboxPciOsDevInit: dev=500
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061bea0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
device eth0 entered promiscuous mode
power state: 0
vboxpci: No IOMMU domain (attach)

Adakah yang tahu cara memperbaikinya?

PERBARUI:

Saya mendapatkan boot kernel sekarang dengan intel_iommu=on , tetapi semuanya masih tidak berfungsi sepenuhnya.. Setelah me-reboot host, tamu mulai, masuk dengan baik dan semuanya tampak seperti sebelum memulai semua ini. Kartu grafis kedua saya tidak menghasilkan apa-apa.

Di Pengelola Perangkat, ada tanda seru di sebelah perangkat Quadro FX, dan ada kode kesalahan 12 di properti perangkat, dengan pesan yang mengatakan "Perangkat ini tidak dapat menemukan sumber daya gratis yang cukup". Deskripsi lebih lanjut di technet.microsoft.com.

Di log kernel host, terlihat menjanjikan:-

vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061baa0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
created IOMMU domain ffff88058377c9a0
device eth0 entered promiscuous mode
power state: 0
vboxpci: iommu_attach_device() success

Jika saya memulai OS tamu untuk kedua kalinya, tanpa me-reboot host, tampilan membeku lagi pada tahap "Selamat datang". Itu pasti menyelesaikan tahap log-in, karena saya bisa menggunakan pintasan windows untuk mematikan mesin tanpa memaksa mematikan..

Sekarang saya agak kehabisan ide… ​​Ada saran agar ini berfungsi? Ada info lebih lanjut yang bisa saya berikan?

PERBARUI2:

dmesg berisi beberapa kesalahan yang lebih menarik, tetapi saya tidak tahu apa yang dapat saya lakukan untuk mengatasinya:

IOMMU 0 0xfbfff000: using Queued invalidation
IOMMU 1 0xfbffe000: using Queued invalidation
------------[ cut here ]------------
WARNING: at /build/buildd/linux-3.5.0/drivers/iommu/intel-iommu.c:4254 init_dmars+0x39b/0x74f()
Hardware name: System Product Name

Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.

BIOS vendor: American Megatrends Inc.; Ver: 0811   ; Product Version: System Version
...
Your BIOS is broken; RMRR ends before it starts!

Jawaban yang Diterima:

Saya mendapatkan passthrough VGA yang bekerja dengan NVIDIA GTX 760 menggunakan KVM sebagai hypervisor dengan vfio-vga; Saya belum pernah mencobanya dengan Virtualbox. Itu menyakitkan, tetapi berfungsi dengan baik setelah mendapatkan konfigurasi yang benar. KVM sama nyamannya dengan Virtualbox untuk VM cepat dari desktop Anda dan Anda dapat mempertimbangkannya sebagai opsi lain.

Utas ini memiliki banyak informasi tentang berbagai konfigurasi dan langkah pemecahan masalah, dan sangat membantu:https://bbs.archlinux.org/viewtopic.php?id=162768


Linux
  1. Linux – Bagaimana Mengaktifkan User_namespaces Di Kernel? (untuk `unshare` tanpa hak.)?

  2. Linux – Berpartisipasi Di Milis Kernel?

  3. Linux – Temukan Driver Linux Untuk Headphone Di Kernel Tree?

  1. 8 tips untuk baris perintah Linux

  2. Kernel Linux:5 inovasi teratas

  3. Bagaimana cara menampilkan parameter baris perintah kernel Linux yang diberikan untuk boot saat ini?

  1. Panduan terminal Linux untuk pemula

  2. Analisis kernel Linux dengan ftrace

  3. Siklus hidup pengujian kernel Linux