Pertanyaan pendek:
Bagaimana saya bisa menghidupkan 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 galat berikut di /var/log/kern.log
vboxpci: No IOMMU domain (attach)
Pertanyaan panjang:
Memberikan tamu OS akses langsung ke kartu grafis
Saya baru-baru menyadari bahwa itu mungkin untuk melewati perangkat PCI-express ke OS tamu yang berjalan di Virtualbox. Keren, pikirku! Saya punya dua kartu grafis NVIDIA Quadro FX (dengan koneksi jembatan SLI, yang saya harap tidak menyebabkan kesedihan) dan ingin mendedikasikan kartu grafis kedua ke OS tamu, sehingga saya dapat menggunakan fitur OpenGL di dalam Photoshop et al.
Pasar NVIDIA ini " konfigurasi SLI Multi-OS " ini, yang pada dasarnya adalah apa yang saya ingin atur sejak lama, tetapi saya tidak ingin menghabiskan lebih dari satu ribu pada perangkat lunak Virtualisasi (Parallels workstation extreme), ketika saya telah menggunakan VirtualBox cukup bahagia selama bertahun-tahun sekarang.
Sistem Host
Saya menjalankan linux-3.5.0-19 dari repositori Debian, pada peralatan workstation cukup tinggi (Asus P6T7 WS Supercomputer mobo dengan chipset Intel ICH10R dan Xeon W3680 CPU) dan ingin mengaktifkan dukungan IOMMU di kernel , lebih disukai tanpa harus mengkompilasi sendiri.
BIOS
Dalam pengaturan BIOS, saya mengaktifkan dukungan VT-x dan VT-d. Namun, saya tidak bisa melihat apa pun yang menyebutkan IOMMU secara spesifik.
Memasang perangkat PCI
Ini ternyata sangat sederhana! Dokumentasi VirtualBox resmi ada di sini . Apa yang saya lakukan, yang saya temukan kurang ambigu, adalah membuka nvidia-settings
, memilih kartu grafis sekunder dan mencatat 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; ia mengatakan bahwa PCI pass-through hanya berfungsi dengan chipset ICH9. Jadi saya mengubah Chipset ke ICH9 dalam 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 kembali ke baris perintah.
Menggunakan host GPU dari tamu
Sebelum menyalakan tamu, saya pertama-tama me-reboot mesin host, kalau-kalau sesuatu yang tidak berdokumen perlu terjadi di kernel, oleh virtualbox-dkms. Ketika 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 baik sejauh ini. Sebelum saya dapat menggunakan perangkat, saya harus me-reboot tamu ...
Masalah
Sekarang driver kartu grafis sudah diinstal pada tamu dan perangkat PCI terpasang, saya tidak bisa masuk ke desktop Windows. Saya masuk ke layar login Windows, lalu setelah masuk, layar membeku, hanya mengatakan "Selamat datang", dengan lingkaran biru yang seharusnya berputar tetapi di sebelahnya.
Dalam /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 cara untuk memperbaikinya?
MEMPERBARUI:
Saya sudah mem-boot kernel sekarang intel_iommu=on
, tetapi masih belum berfungsi sepenuhnya .. Setelah me-reboot host, tamu mulai, login dengan baik dan semuanya tampak seperti sebelum memulai semua ini. Kartu grafis ke-2 saya tidak menghasilkan apa-apa.
Di Device Manager, 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". Penjelasan lebih lanjut tentang 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". Ini jelas menyelesaikan tahap log-in, karena saya bisa menggunakan cara pintas windows untuk mematikan mesin tanpa memaksa shutdown ..
Sekarang saya agak kehabisan ide ... Ada saran untuk membuatnya berfungsi? Adakah info lain yang bisa saya berikan?
UPDATE2:
dmesg
mengandung beberapa kesalahan yang lebih menarik, tetapi saya tidak tahu apa yang bisa saya lakukan tentang mereka:
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!
CONFIG_CMDLINE_LINUX=intel_iommu=on
ke /etc/default/grub
. Sekarang tamu melakukan booting, tetapi tidak mendeteksi kartu grafis ...
intel_iommu=soft
sepertinya tidak menjadi opsi kernel yang valid, dan ketika saya menggunakannya, ia kembali ke intel_iommu=on
.. Dari www.kernel.org , Anda dapat memilikinya iommu=soft
, tetapi saya tidak dapat menemukan dokumentasi untuk itu .. Apakah Anda tahu apa itu bukan?
iommu=soft
. Ini menonaktifkan IOMMU perangkat keras (yang menyebabkan banyak kesalahan DMA pada sistem saya) dan menggunakan perangkat lunak IOMMU sebagai gantinya. Berikut ini tautan ke utas lama: Saran untuk menggunakan iommu = lunak untuk semua paket kernel
intel_iommu=igfx_off
...
intel_iommu=soft
. Anda dapat mencoba melewatiintel_iommu=on
.