Увімкнення IOMMU в ядрі для проходження графічної карти


16

Коротке запитання:

Як я можу включити 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!

1
Параметр IOMMU повинен бути активним за замовчуванням на стабільному Debian, якщо апаратне забезпечення підтримує його. Оскільки це спричиняло неприємності та безліч помилок у журналі, мені довелося відключити його intel_iommu=soft. Можна спробувати пройти intel_iommu=on.
Марко

1
Класно, щойно знайшов файл і рядок, де це змінити; Модуль-конфігурація KDE, розміщений CONFIG_CMDLINE_LINUX=intel_iommu=onу /etc/default/grub. Тепер гість завантажується, але не виявляє відеокарту ...
Алекс Ліч

intel_iommu=softне здається дійсним параметром ядра, і коли я ним скористався, він повернувся до нього intel_iommu=on. З www.kernel.org ви можете мати iommu=soft, але я не можу знайти жодної документації для цього .. Чи знаєте ви, що це робить?
Алекс Ліч

3
Ти маєш рацію, це так iommu=soft. Він деактивує апаратну IOMMU (що викликає численні помилки DMA в моїй системі) та використовує натомість програмне забезпечення IOMMU. Ось посилання на стару тему: Пропозиція використовувати iommu = soft для всіх пакетів ядра
Marco

Спасибі. Я міг би зробити це під час наступного перезавантаження. Я думаю, що все моє обладнання підтримує IOMMU, тому не впевнений, чи буде емуляція програмного забезпечення хорошою ідеєю. У відповідній записці не впевнений, чи мій GPU має блок DMAR, і чи було б корисно використовувати intel_iommu=igfx_off...
Alex Leach

Відповіді:


2

Я отримав VGA найповнішу роботу з NVIDIA GTX 760, використовуючи KVM як гіпервізор з vfio-vga; Я ніколи не пробував цього з Virtualbox. Це було болем, але добре працює після отримання конфігурації. KVM так само зручно, як і Virtualbox для швидких VM з робочого столу, і ви можете розглянути це як інший варіант.

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


1
Чи працює CUDA?
Олександр Дубінський

Зараз цей блог стверджує, що застарів, і рекомендує vfio.blogspot.com
Олександр Дубінський

Ну а налаштування ефективного KVM + qemu з холодного ґрунту може бути не таким швидким.
sitilge

@AleksandrDubinsky, Наразі для роботи CUDA потрібно використовувати конкретне ядро ​​Linux: superuser.com/a/1392031/109803
Габріель Ярмарок

0

Якщо ваш драйвер Nvidia каже, що він не міг знайти достатньо вільних ресурсів, спробуйте відключити емуляцію "Стандартного адаптера VGA" в Диспетчері пристроїв. Перезавантажте гостя, і ви можете виявити наступне, щоб:

1) Ваш VM POST / завантаження відбувається на емульованому адаптері VGA. 2) Емульований адаптер VGA залишається порожнім перед тим, як потрапити на екран входу в систему 3) Драйвер Nvidia завантажується та піднімає найпростіший GPU, і ви отримуєте екран входу на карту Nvidia.

Трохи пощастивши, ви можете виявити, що з цього моменту все добре працює. Це більш-менш саме те, що відбувається в моїй аналогічній установці з Xen. Будь ласка, повідомте результати. :)


0

Здається, у вас є два окремих питання. Повторне завантаження для роботи з VGA проходженням може бути справжнім ведмедем. У Xen пристрій VGA часто демонструється як знімний пристрій, і деяким людям пощастило "вийняти" пристрій перед перезавантаженням.

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


0

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

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

У мене з'явилася нова 64-бітова система AMD, і я виявив, що у Linux є проблеми з налаштуваннями Nvidia та DMA, спричиненими налаштуваннями iommu в BIOS, тому встановлення цих параметрів у grub виправило це для мене.

Прочитайте це для більш детальної інформації .


-1

перевірено на HP dc7900, щоб побачити повідомлення "IOMMU знайдено":

деактивувати інтегроване відео

iommu=calgary intel_iommu=on intel_iommu=igfx_off
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.