GNU/Linux >> Znalost Linux >  >> Linux

Linux – Povolení Iommu v jádře pro průchod grafické karty?

Krátká otázka:

Jak mohu zapnout intel_iommu nastavení v jádře Linuxu? Provozuji hostitele Debianu pomocí zavaděče grub2. Dokumentace, kterou jsem viděl, říká, že je třeba upravit /boot/grub/menu.lst , což se zdá být relevantní pouze pro grub 1.x, protože tento soubor nemám.

Chápu (a poslední možnost, která mě napadá), že změna této možnosti spouštění by mohla odstranit následující chybovou zprávu v /var/log/kern.log

vboxpci: No IOMMU domain (attach)

Dlouhá otázka:

Poskytnutí přímého přístupu ke grafické kartě hostujícímu OS

Nedávno jsem si uvědomil, že je možné předat zařízení PCI-express k hostujícím OS běžícím ve Virtualboxu. Super, pomyslel jsem si! Mám dvě grafické karty NVIDIA Quadro FX (s připojeným můstkem SLI, což doufám nezpůsobuje zármutek) a rád bych věnoval 2. grafickou kartu hostujícímu OS, abych mohl používat funkce OpenGL v rámci Photoshop a spol.

Společnost NVIDIA prodává tuto konfiguraci „SLI Multi-OS“, což je v podstatě to, co jsem chtěl nastavit už celé věky, ale nechci utrácet přes tisíc za virtualizační software (extrém Parallels pracovní stanice), když jsem pomocí VirtualBoxu už léta docela spokojeně.

Hostitelský systém

Používám linux-3.5.0-19 z repozitářů Debianu na poměrně špičkovém vybavení pracovní stanice (Asus P6T7 WS Supercomputer mobo s čipovou sadou Intel ICH10R a CPU Xeon W3680) a rád bych zapnul podporu IOMMU v jádře , nejlépe aniž bych to musel sám kompilovat.

BIOS

V nastavení BIOSu mám povolenou podporu VT-x a VT-d. Neviděl jsem však nic, co by konkrétně zmiňovalo IOMMU.

Připojení zařízení PCI

Tohle bylo příjemně překvapivě jednoduché! Oficiální dokumentace VirtualBoxu je zde. Co jsem udělal, což mi přišlo méně nejednoznačné, bylo otevřít nvidia-settings , vyberte sekundární grafickou kartu a poznamenejte si ID sběrnice (v mém případě „PCI:5:0:0“). Poté z příkazového řádku hostitele:-

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

(Když jsem to poprvé spustil, došlo k chybě, protože VirtualBox emuloval čipovou sadu PIIX; říkalo se, že PCI pass-through funguje pouze s čipovými sadami ICH9. Změnil jsem tedy čipovou sadu na ICH9 v nastavení systému VirtualBox VM System a zapnul hosta nainstalovat potřebné nové ovladače. Po restartu a vše fungovalo dobře, takže jsem hosta vypnul a znovu spustil příkaz.)

Nebyl žádný výstup a téměř okamžitě jsem byl vrácen do příkazového řádku.

Použití GPU hostitele z hosta

Před zapnutím hosta jsem nejprve restartoval hostitelský počítač pro případ, že by se v jádře muselo stát něco nezdokumentovaného, ​​pomocí virtualbox-dkms. Jak jsem spustil předchozí příkaz bez sudo privilegia, pochybuji, že byly provedeny nějaké změny.

Když jsem příště spustil hosta, služba Windows Update začala dělat svou věc a automaticky detekovala a nainstalovala správné ovladače NVIDIA. Vše zatím vypadá dobře. Než jsem však mohl zařízení používat, musel jsem restartovat hosta…

Problém

Nyní, když jsou ovladače grafické karty nainstalovány na hostovi a připojeno zařízení PCI, nemohu se dostat na plochu Windows. Dostanu se na přihlašovací obrazovku Windows, pak po přihlášení obrazovka zamrzne, jen se řekne „Vítejte“ a vedle něj se má točit, ale není modrý.

Související:Linux – Jak Linux rozhoduje o výchozí aplikaci?

V /var/log/kern.log , poslední vytištěné zprávy jsou:-

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)

Máte nápad, jak to opravit?

AKTUALIZACE:

Nyní mám bootování jádra s intel_iommu=on , ale věci stále nefungují plně.. Po restartování hostitele se host spustí, přihlásí se v pořádku a vše se zdá jako před spuštěním čehokoli z toho. Moje 2. grafická karta nic nevydává.

Ve Správci zařízení je vedle zařízení Quadro FX vykřičník a ve vlastnostech zařízení je kód chyby 12 se zprávou „Toto zařízení nemůže najít dostatek volných zdrojů“. Další popis na technet.microsoft.com.

V protokolu hostitelského jádra to vypadá slibně:-

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

Pokud spustím hostující OS podruhé, aniž bych restartoval hostitele, obrazovka znovu zamrzne ve fázi „Vítejte“. Definitivně to však dokončí fázi přihlášení, protože jsem mohl použít zkratky systému Windows k vypnutí počítače bez vynucení vypnutí..

Teď mi nějak došly nápady... Nějaké návrhy, jak to zprovoznit? Mohu poskytnout nějaké další informace?

AKTUALIZACE 2:

dmesg obsahuje některé zajímavější chyby, ale nevím, co s nimi mohu dělat:

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!

Přijatá odpověď:

Získal jsem VGA průchod při práci s NVIDIA GTX 760 pomocí KVM jako hypervizoru s vfio-vga; S Virtualboxem jsem to nikdy nezkoušel. Byla to bolest, ale po správné konfiguraci to funguje dobře. KVM je stejně pohodlný jako Virtualbox pro rychlé virtuální počítače z vašeho počítače a můžete ho zvážit jako další možnost.

Toto vlákno obsahuje spoustu informací o mnoha různých konfiguracích a krocích pro odstraňování problémů a bylo opravdu užitečné:https://bbs.archlinux.org/viewtopic.php?id=162768


Linux
  1. Linux – Jak povolit prostory uživatelských jmen v jádře? (pro nepřivilegované `unshare`.)?

  2. Podpora Linuxu pro novou externí grafickou kartu Sony Vaio Z?

  3. Jaké je rozhraní pro systémová volání ARM a kde je definováno v jádře Linuxu?

  1. 8 tipů pro příkazový řádek Linuxu

  2. Linuxové jádro:5 nejlepších inovací

  3. Životní cyklus testování linuxového jádra

  1. Průvodce linuxovým terminálem pro začátečníky

  2. Analyzujte linuxové jádro pomocí ftrace

  3. Průběžné testování integrace linuxového jádra