Краткий вопрос:
Как включить 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, который, я надеюсь, не вызывает горя), и я хотел бы выделить вторую гостевую видеокарту для гостевой ОС, чтобы я мог использовать функции OpenGL в Photoshop et al.
NVIDIA продает эту конфигурацию « SLI Multi-OS », которую я в основном хотел настроить целую вечность, но я не хочу тратить слишком много на программное обеспечение для виртуализации (экстремальная рабочая станция Parallels), когда я был с удовольствием пользуюсь VirtualBox уже много лет.
Хост-система
Я использую linux-3.5.0-19 из репозиториев Debian, на достаточно высокопроизводительном оборудовании для рабочих станций (суперкомпьютер Asus P6T7 WS 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 VM и включил гостевую систему. чтобы установить необходимые новые драйверы. Перезагружаемся позже, и все работает нормально, поэтому я закрыл гостя и повторно выполнил команду.)
Выводов не было, и меня почти сразу же вернули в командную строку.
Использование хоста GPU от гостя
Прежде чем включить гостя, я сначала перезагрузил хост-машину, на случай, если что-то недокументированное должно было произойти в ядре, с помощью virtualbox-dkms. Поскольку я sudo
выполнил предыдущую команду без привилегий, я сомневаюсь, что какие-либо изменения были сделаны.
Когда я в следующий раз запустил гостя, Центр обновления Windows начал делать свое дело и автоматически обнаружил и установил правильные драйверы 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!
CONFIG_CMDLINE_LINUX=intel_iommu=on
в /etc/default/grub
. Теперь гость загружается, но не обнаруживает видеокарту ...
intel_iommu=soft
кажется, не является допустимым вариантом ядра, и когда я использовал его, он вернулся к intel_iommu=on
.. С www.kernel.org , вы можете иметь iommu=soft
, но я не могу найти документацию для этого .. Вы знаете, что это делает?
intel_iommu=igfx_off
...
intel_iommu=soft
. Вы можете попробовать пройтиintel_iommu=on
.