Коротке запитання:
Як я можу включити intel_iommu
налаштування в ядрі Linux? Я запускаю хост Debian, використовуючи завантажувач grub2. Документація, яку я бачив, говорить про редагування /boot/grub/menu.lst
, яка, здається, є актуальною лише для grub 1.x, оскільки у мене немає цього файлу.
Як я розумію (і останній варіант, про який я можу придумати), що змінивши цей варіант завантаження, можна позбутися наступного повідомлення про помилку в /var/log/kern.log
vboxpci: No IOMMU domain (attach)
Довге запитання:
Надання гостьовій ОС прямого доступу до відеокарти
Нещодавно я зрозумів, що можна пройти через PCI-експрес-пристрій до гостьової ОС, що працює в Virtualbox. Класно, я думав! У мене є дві відеокарти NVIDIA Quadro FX (з мостовим з'єднанням SLI, яке, я сподіваюся, не викликає горя), і я хотів би присвятити другу відеокарту гостьовій ОС, щоб я міг використовувати функції OpenGL в межах Photoshop та ін.
NVIDIA продає цю " SLI Multi-OS " конфігурацію, яка в основному те, що я хотів налаштувати на віки, але я не хочу витрачати більше на велику програму віртуалізації (екстремальна робоча станція Parallels), коли я був використовуючи VirtualBox досить щасливо вже багато років.
Система хоста
Я запускаю linux-3.5.0-19 із сховищ Debian, на досить висококласному обладнанні робочих станцій (Asus P6T7 WS Supercomputer mobo w / чіпсет Intel ICH10R і процесор Xeon W3680) і хотів би включити підтримку IOMMU в ядрі , бажано без необхідності складати його самостійно.
BIOS
У налаштуваннях BIOS увімкнено підтримку VT-x та VT-d. Я нічого не міг бачити, зокрема, згадуючи про ІОММУ.
Приєднання пристрою 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 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
, але все ще не працює повноцінно. Після перезавантаження хоста гостьовий запуск починає входити в лад, і все здається, як було до початку цього. Моя 2-а відеокарта нічого не видає.
У диспетчері пристроїв є знак оклику поруч із пристроєм 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, щоб вимкнути машину, не примушуючи її вимикати ..
Зараз у мене щось від ідеї ... Будь-які пропозиції, щоб це працювало? Я можу надати більше інформації?
ОНОВЛЕННЯ2:
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
, але я не можу знайти жодної документації для цього .. Чи знаєте ви, що це робить?
iommu=soft
. Він деактивує апаратну IOMMU (що викликає численні помилки DMA в моїй системі) та використовує натомість програмне забезпечення IOMMU. Ось посилання на стару тему: Пропозиція використовувати iommu = soft для всіх пакетів ядра
intel_iommu=igfx_off
...
intel_iommu=soft
. Можна спробувати пройтиintel_iommu=on
.