Включение IOMMU в ядро ​​для передачи видеокарты

Короткий вопрос:

Как включить параметр intel_iommu в ядре Linux? Я запускаю хост Debian, используя загрузчик grub2. Документация, которую я видел, позволяет редактировать /boot/grub/menu.lst , что, по-видимому, актуально только для grub 1.x, поскольку у меня нет этого файла.

Я понимаю (и последний вариант, о котором я могу думать), что изменение этого параметра загрузки может избавиться от следующего сообщения об ошибке в /var/log/kern.log

 vboxpci: No IOMMU domain (attach) 

Длительный вопрос:

Предоставление гостевой ОС прямого доступа к видеокарте

Недавно я понял, что через устройство PCI-Express можно перейти к гостевой ОС, работающей в Virtualbox. Круто, подумал я! У меня две графические карты NVIDIA Quadro FX (с подключением моста SLI на месте, что, я надеюсь, не вызывает горения) и хотел бы посвятить 2-ю видеокарту гостевой ОС, чтобы я мог использовать функции OpenGL внутри Photoshop и др.

NVIDIA продает эту конфигурацию « SLI Multi-OS », которая в основном является тем, что я хотел создать на протяжении веков, но я не хочу тратить больше внимания на программное обеспечение Virtualisation (экстремальная рабочая станция Parallels), когда я был используя VirtualBox довольно счастливо уже много лет.

Хост-система

Я запускаю linux-3.5.0-19 из репозиториев Debian, на довольно высокопроизводительном оборудовании для рабочих станций (Asus P6T7 WS Supercomputer mobo с чипсетом Intel ICH10R и процессором Xeon W3680) и хотел бы включить поддержку IOMMU в ядре , предпочтительно без необходимости его компиляции.

BIOS

В настройках BIOS я поддерживаю поддержку VT-x и VT-d. Тем не менее, я не видел ничего конкретного упоминания о IOMMU.

Присоединение устройства PCI

Это было приятно удивительно просто! Официальная документация VirtualBox находится здесь . То, что я сделал, что я считал менее двусмысленным, заключалось в том, чтобы открыть nvidia-settings , выбрать вторичную графическую карту и отметить идентификатор шины («PCI: 5: 0: 0» в моем случае). Затем из командной строки хоста: –

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

(Когда я впервые запустил это, произошла ошибка, потому что VirtualBox эмулировал чипсет PIIX, он сказал, что сквозной прогон PCI работает только с чипсетами ICH9. Поэтому я изменил набор микросхем на ICH9 в настройках виртуальной машины VirtualBox и включил гостевую систему для установки необходимых новых драйверов. Перезагрузка позже, и все работает нормально, поэтому я закрыл гостя и перезапустил команду.)

Не было вывода, и я сразу же вернулся в командную строку.

Использование хоста GPU у гостя

Прежде чем включить гостя, я сначала перезагрузил хост-компьютер, если в ядре нужно что-то недокументированное, с помощью virtualbox-dkms. Хотя я запускал предыдущую команду без привилегий sudo , я сомневаюсь, что все изменения были сделаны.

Когда я запустил гостя, Windows Update начал делать все, и автоматически обнаружил и установил правильные драйверы NVIDIA. Пока все хорошо. Прежде чем я смог использовать устройство, мне пришлось перезагрузить гостя …

проблема

Теперь, когда драйверы видеокарты установлены на гостевом компьютере и подключен к устройству PCI, я не могу попасть на рабочий стол Windows. Я попадаю на экран входа в Windows, а затем после входа в систему экран замерзает, просто говоря «Добро пожаловать», с рядом с ним должен быть круглый, но не синий.

В /var/log/kern.log последними напечатанными сообщениями являются: –

 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) 

Любая идея, как это исправить?

ОБНОВИТЬ:

У меня теперь загружается ядро ​​с помощью intel_iommu=on , но все еще не работает полностью. После перезагрузки хоста начинается гость, все в порядке, и все кажется таким, каким оно было до начала любого из этого. Моя вторая видеокарта ничего не выводит.

В диспетчере устройств рядом с устройством Quadro FX есть восклицательный знак, и в свойствах устройства есть код ошибки 12, с сообщением «Это устройство не может найти достаточно свободных ресурсов». Дальнейшее описание на сайте technet.microsoft.com .

В журнале ядра хоста он выглядит многообещающим:

 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 

Если я запустил гостевую ОС второй раз, не перезагружая хост, дисплей снова замерзает на этапе «Добро пожаловать». Конечно, он заканчивает этап входа в систему, поскольку я могу использовать быстрые клавиши Windows для выключения компьютера без принудительного выключения.

Теперь я немного из идей … Любые предложения, чтобы заставить это работать? Больше информации я могу предоставить?

UPDATE2:

dmesg содержит еще несколько интересных ошибок, но я не знаю, что я могу с ними сделать:

 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! 

5 Solutions collect form web for “Включение IOMMU в ядро ​​для передачи видеокарты”

Я получил VGA passthrough, работая с NVIDIA GTX 760, используя KVM в качестве гипервизора с vfio-vga; Я никогда не пробовал его с помощью Virtualbox. Это была боль, но хорошо работает после правильной настройки. KVM так же удобен, как Virtualbox для быстрых виртуальных машин с вашего рабочего стола, и вы можете считать его еще одним вариантом.

Этот поток содержит множество информации о множестве различных конфигураций и этапах устранения неполадок и был действительно полезен: https://bbs.archlinux.org/viewtopic.php?id=162768

Если ваш драйвер Nvidia говорит, что не может найти достаточно свободных ресурсов, попробуйте отключить эмулируемый «Стандартный адаптер VGA» в диспетчере устройств. Перезагрузите гостя, и вы можете обнаружить следующее:

1) Ваша VM POST / загрузка происходит на эмулированном адаптере VGA. 2) Эмулированный адаптер VGA опускается до того, как он доберется до экрана входа в систему. 3) Драйвер Nvidia загружает и запускает транзитный графический процессор, и вы получаете экран входа в систему на карте Nvidia.

Немного удачи, вы можете обнаружить, что все хорошо работает. Это более или менее точно то, что происходит на моей аналогичной установке с Xen. Пожалуйста, сделайте отчет. 🙂

Похоже, у вас есть две отдельные проблемы. Получение перезагрузки для работы с прохождением VGA может стать настоящим медведем. В Xen устройство VGA часто отображается как съемное устройство, и некоторым людям повезло «выталкивать» устройство перед перезагрузкой.

Вероятно, ошибку кода 12 можно устранить, просто отключив виртуальное видеоустройство в диспетчере устройств Windows.

Попробуйте установить один из них в /etc/grub :

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

У меня новая система AMD 64bit и выяснилось, что Linux имеет проблемы с настройками Nvidia и DMA, вызванными настройками iommu в BIOS, поэтому установка этих параметров в grub исправила это для меня.

Читайте это для более подробной информации .

протестирован на HP dc7900, чтобы увидеть сообщение «IOMMU found»:

деактивировать интегрированное видео

 iommu=calgary intel_iommu=on intel_iommu=igfx_off 
  • Fedora и Samba на VirtualBox
  • Есть ли какое-либо преимущество в использовании аргумента -j2 при создании Linux-систем в VirtualBox?
  • Ошибка установки (установка системы) - Kali Linux
  • Как настроить постоянную настройку моста iproute2?
  • почтовый сервер виртуального сервера postfix + dovecot
  • Автоматизация установки гостевых дополнений VirtualBox через командную строку
  • Использовать поставщика VirtualBox по умолчанию для Fedora 21
  • Где файл журнала бродяг?
  • Что означает это сообщение из ядра?
  • grub ждет ввода пользователем при загрузке в качестве гостевого в виртуальном боксе
  • Папка с d ?????????? в ls -l
  • Interesting Posts

    Может ли один компьютер использоваться двумя пользователями одновременно с помощью двух мониторов?

    Как запустить приложение с эмулятором терминалов по умолчанию на Ubuntu?

    Установить разрешение видео при загрузке?

    Как распечатать имя процесса рядом с идентификационным номером процесса в файле?

    Как я могу напечатать вторую в последнюю строку множество файлов в один файл?

    Как переместить всю ОС на другой сервер?

    Заставить GRUB загрузиться в определенное ядро ​​/ ОС?

    Уменьшите размер LVM / tmp до 10G и добавьте все в / root dir

    Аутентификация PAM и SSH-доступ на основе информации о пользователе, хранящейся в sqlite3

    sed: многострочная замена блока конфигурации

    Даты выпуска для ядра Linux

    Добавлена ​​дополнительная группа пользователей, но «группы (1)» не отображаются изменения

    Как исправить загрузчик GRUB (Windows 10 не работает)

    Отфильтровать список файлов на основе атрибутов файлов

    Объяснение значения содержимого файла / var / run / utmp

    Linux и Unix - лучшая ОС в мире.