Mengaktifkan IOMMU di kernel untuk pass-through kartu grafis

16

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 sudohak 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!
Alex Leach
sumber
1
Pengaturan IOMMU harus aktif secara default pada Debian stable jika perangkat keras mendukungnya. Karena itu menyebabkan masalah dan banyak kesalahan dalam log saya harus menonaktifkannya intel_iommu=soft. Anda dapat mencoba melewati intel_iommu=on.
Marco
1
Keren, baru saja menemukan file dan baris tempat untuk mengubahnya; Modul grub-config KDE menempatkan CONFIG_CMDLINE_LINUX=intel_iommu=onke /etc/default/grub. Sekarang tamu melakukan booting, tetapi tidak mendeteksi kartu grafis ...
Alex Leach
intel_iommu=softsepertinya 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?
Alex Leach
3
Anda benar, itu 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
Marco
Terima kasih. Saya mungkin mencobanya ketika saya reboot berikutnya. Saya pikir semua perangkat keras saya mendukung IOMMU, jadi tidak yakin apakah emulasi perangkat lunak akan menjadi ide yang bagus. Pada catatan terkait, tidak yakin apakah GPU saya memiliki unit DMAR, dan apakah itu akan menjadi ide yang baik untuk digunakan intel_iommu=igfx_off...
Alex Leach

Jawaban:

2

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

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

Josh
sumber
1
Apakah CUDA berfungsi?
Aleksandr Dubinsky
Blog itu sekarang mengklaim telah kedaluwarsa dan merekomendasikan vfio.blogspot.com
Aleksandr Dubinsky
Ya, menyiapkan KVM + qemu yang efisien dari cold-up mungkin tidak secepat itu.
sitilge
@AleksandrDubinsky, Saat ini untuk membuat CUDA bekerja, kernel Linux tertentu harus digunakan: superuser.com/a/1392031/109803
Gabriel Fair
0

Jika driver Nvidia Anda mengatakan tidak dapat menemukan sumber daya gratis yang cukup, coba nonaktifkan "Standard VGA Adapter" di Device Manager. Nyalakan ulang tamu, dan Anda mungkin menemukan yang berikut terjadi, dalam rangka:

1) VM POST / boot Anda terjadi pada adaptor VGA yang ditiru. 2) Adaptor VGA yang diemulasi menjadi kosong sesaat sebelum layar login 3) Driver Nvidia memuat dan menampilkan passthrough GPU, dan Anda mendapatkan layar login pada kartu Nvidia.

Dengan sedikit keberuntungan, Anda mungkin menemukan bahwa hal-hal bekerja dengan baik sejak saat itu. Ini kurang lebih persis apa yang terjadi pada pengaturan serupa saya dengan Xen. Tolong, lakukan hasil laporan. :)

pengguna1842677
sumber
0

Sepertinya Anda memiliki dua masalah terpisah. Memulai booting kembali untuk bekerja dengan VGA bisa menjadi tantangan nyata. Di Xen, perangkat VGA sering muncul sebagai perangkat yang dapat dilepas dan beberapa orang lebih beruntung "mengeluarkan" perangkat sebelum reboot.

Kesalahan kode 12 mungkin dapat diperbaiki dengan hanya menonaktifkan perangkat video virtual di manajer perangkat Windows.

StrongBad
sumber
0

Coba atur salah satunya di /etc/grub:

  • iommu=memmaper
  • iommu=soft
  • vga=normal
  • vesa=0

Saya memiliki sistem AMD 64bit baru dan menemukan bahwa Linux memiliki masalah dengan pengaturan Nvidia dan DMA yang disebabkan oleh pengaturan iommu di BIOS, jadi pengaturan ini di grub memperbaikinya untuk saya.

Baca ini untuk detail lebih lanjut .

Steve LinuxBiru
sumber
-1

diuji pada HP dc7900 untuk melihat pesan "IOMMU ditemukan":

nonaktifkan video terintegrasi

iommu=calgary intel_iommu=on intel_iommu=igfx_off
backtolinux
sumber