Krótkie pytanie:
Jak mogę włączyć intel_iommu
ustawienie w jądrze Linuksa? Prowadzę host Debiana, używając bootloadera grub2. Dokumentacja, którą widziałem, mówi do edycji /boot/grub/menu.lst
, która wydaje się być odpowiednia tylko dla grub 1.x, ponieważ nie mam tego pliku.
Rozumiem (i ostatnia opcja, o której myślę), że zmiana tej opcji rozruchu może pozbyć się następującego komunikatu o błędzie /var/log/kern.log
vboxpci: No IOMMU domain (attach)
Długie pytanie:
Zapewnienie systemowi-gościowi bezpośredniego dostępu do karty graficznej
Niedawno zdałem sobie sprawę, że możliwe jest przejście przez urządzenie PCI-express do systemu-gościa działającego w Virtualbox. Fajnie, pomyślałem! Mam dwie karty graficzne NVIDIA Quadro FX (z połączeniem mostka SLI, które, mam nadzieję, nie powoduje problemów) i chciałbym poświęcić drugą kartę graficzną systemowi-gościowi, aby móc korzystać z funkcji OpenGL w Photoshop i in.
NVIDIA sprzedaje tę konfigurację „ SLI Multi-OS ”, którą zasadniczo chciałem skonfigurować od wieków, ale nie chcę wydawać więcej na oprogramowanie do wirtualizacji (ekstremalna stacja robocza Parallels), kiedy byłem od lat korzystam z VirtualBox.
System hosta
Korzystam z linux-3.5.0-19 z repozytoriów Debiana na dość wysokiej klasy sprzęcie roboczym (Asus P6T7 WS Superkomputer mobo z chipsetem Intel ICH10R i procesorem Xeon W3680) i chciałbym włączyć obsługę IOMMU w jądrze , najlepiej bez konieczności samodzielnego kompilowania.
BIOS
W ustawieniach BIOS mam włączoną obsługę VT-x i VT-d. Nie widziałem jednak nic, co wspominałoby o IOMMU.
Podłączanie urządzenia PCI
To było przyjemnie zaskakująco proste! Oficjalna dokumentacja VirtualBox jest tutaj . To, co zrobiłem, co uważałem za mniej dwuznaczne, to otworzyć nvidia-settings
, wybrać dodatkową kartę graficzną i zanotować identyfikator magistrali (w moim przypadku „PCI: 5: 0: 0”). Następnie z wiersza poleceń hosta: -
VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0
(Kiedy po raz pierwszy to uruchomiłem, wystąpił błąd, ponieważ VirtualBox emulował mikroukład PIIX; powiedział, że tranzyt PCI działa tylko z mikroukładami ICH9. Więc zmieniłem Chipset na ICH9 w ustawieniach systemu wirtualnego VirtualBox i włączyłem gościa aby zainstalować niezbędne nowe sterowniki. Uruchom ponownie później i wszystko działało dobrze, więc zamknąłem gościa i ponownie uruchomiłem polecenie).
Nie było danych wyjściowych i prawie natychmiast wróciłem do wiersza poleceń.
Korzystanie z hosta GPU od gościa
Przed włączeniem gościa ponownie uruchomiłem maszynę hosta, na wypadek, gdyby coś nieudokumentowanego musiało się wydarzyć w jądrze przez virtualbox-dkms. Ponieważ uruchomiłem poprzednią komendę bez sudo
uprawnień, wątpię, aby jakiekolwiek zmiany zostały wprowadzone.
Kiedy następnym razem uruchomiłem gościa, Windows Update zaczął działać i automatycznie wykrył i zainstalował prawidłowe sterowniki NVIDIA. Jak dotąd wszystko wygląda dobrze. Zanim jednak mogłem korzystać z urządzenia, musiałem ponownie uruchomić gościa ...
Problem
Teraz, gdy sterowniki karty graficznej są zainstalowane na gościu i podłączonym urządzeniu PCI, nie mogę dostać się na pulpit systemu Windows. Przechodzę do ekranu logowania do systemu Windows, a następnie po zalogowaniu ekran zawiesza się, mówiąc tylko „Witaj”, a obok niego powinno kręcić się, ale nie ma niebieskiego koła.
W /var/log/kern.log
ostatnich drukowanych wiadomościach są: -
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)
Jakiś pomysł jak to naprawić?
AKTUALIZACJA:
Mam teraz jądro do rozruchu intel_iommu=on
, ale rzeczy nadal nie działają w pełni .. Po ponownym uruchomieniu hosta gość uruchamia się, loguje się i wszystko wygląda tak, jak było przed uruchomieniem tego. Moja druga karta graficzna niczego nie wyświetla.
W Menedżerze urządzeń obok urządzenia Quadro FX znajduje się wykrzyknik, a we właściwościach urządzenia znajduje się kod błędu 12, z komunikatem „To urządzenie nie może znaleźć wystarczającej ilości wolnych zasobów”. Dalszy opis na technet.microsoft.com .
W dzienniku jądra hosta wygląda obiecująco: -
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
Jeśli uruchomię system operacyjny gościa po raz drugi, bez ponownego uruchamiania hosta, ekran ponownie zawiesi się na etapie „Witamy”. Zdecydowanie kończy to jednak etap logowania, ponieważ mogłem użyć skrótów systemu Windows do zamknięcia komputera bez wymuszania zamknięcia.
Teraz mam trochę pomysłów ... Jakieś sugestie, żeby to zadziałało? Czy mogę podać więcej informacji?
AKTUALIZACJA 2:
dmesg
zawiera kilka interesujących błędów, ale nie wiem, co mogę z nimi zrobić:
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
w do /etc/default/grub
. Teraz gość uruchamia się, ale nie wykrywa karty graficznej ...
intel_iommu=soft
nie wydaje się być prawidłową opcją jądra, a kiedy jej użyłem, powróciłem do intel_iommu=on
... Z www.kernel.org możesz mieć iommu=soft
, ale nie mogę znaleźć żadnej dokumentacji na ten temat. Czy wiesz co to robi?
iommu=soft
. Dezaktywuje sprzętową IOMMU (która powoduje wiele błędów DMA w moim systemie) i zamiast tego używa oprogramowania IOMMU. Oto link do starego wątku: Sugestia użycia iommu = soft dla wszystkich pakietów jądra
intel_iommu=igfx_off
...
intel_iommu=soft
. Możesz spróbować przejśćintel_iommu=on
.