Как скомпилировать ядро ​​Gentoo для AMD IOMMU?

Как скомпилировать ядро ​​Gentoo для AMD IOMMU?

У меня есть процессор AMD A4-5300 с материнской платой, которая поддерживает IOMMU, и я пытаюсь включить IOMMU на моем ядре Gentoo Hardened 4.3.3-r4 с намерением использовать графическую карту на виртуальной машине KVM. Согласноэто руководство здесь, я должен перекомпилировать свое ядро ​​с несколькими предоставленными параметрами («Поддержка устройств перераспределения DMA», «Включить устройства перераспределения DMA» и «Драйвер PCI Stub»). Однако «Поддержка устройств перераспределения DMA» и «Включить устройства перераспределения DMA» отсутствуют в моей конфигурации ядра.

Затем я поискал в конфигурации "remap" и попытался включить несколько опций, среди которых были CONFIG_IRQ_REMAP, CONFIG_DMAR_TABLE, CONFIG_IOMMU_SUPPORT, CONFIG_SWIOTLB и CONFIG_PCI_IOV. Затем я перекомпилировал свое ядро ​​с этими включенными опциями, запустил свою систему с помощью amd_iommu=fullflush iommu=forceкомандной строки ядра и, согласно вышеупомянутому руководству, проверил, запущен ли IOMMU в моей системе, посмотрев на "AMD-Vi" в сообщениях ядра:

dmesg | grep AMD-Vi

В моем журнале ядра ничего не отображается об AMD-Vi.

Кроме того, когда я пытаюсь запустить виртуальную машину на virt-manager с подключенным устройством PCI, я получаю сообщение следующего содержания:«Ошибка запуска домена: неподдерживаемая конфигурация: хост не поддерживает сквозную передачу устройств PCI хоста».

Почти все, что я нахожу, относится к Fedora, Ubuntu и Debian, где IOMMU, по-видимому, работает «из коробки». Я не думаю, что это связано с тем, что моя материнская плата и процессор не поддерживают его, потому что в моем BIOS есть опция для этого, и потому что я помню, что несколько лет назад я мог запустить виртуальную машину VirtualBox с IOMMU на Debian (хотя я не стал это проверять, потому что в тот момент я никогда не думал, что мне потребуются две графические карты для использования GPU на виртуальной машине через IOMMU).

Вот что я уже пробовал, но не сработало:

  1. Использование стандартного ядра вместо усиленного.
  2. ВключениеДрайверы устройств >> Поддержка оборудования IOMMU,Поддержка AMD IOMMU,Поддержка Intel IOMMU с использованием устройств перераспределения DMA,Поддержка переназначения прерыванийиПараметры шины (PCI и т.д.) >> PCI Stub.
  3. Используется новейшее ядро, на данный момент обновленное до 4.4.8-hardened-r1.

Это командная строка, которую я использую для запуска ядра, причем каждый параметр для удобства находится на отдельной строке:

root=/dev/ram0 
crypt_root=/dev/disk/by-uuid/c1ce6456-4c6a-4a64-8027-5ec4fdc0f344 
dolvm 
real_root=/dev/mapper/cryptgentoo-raiz 
rootfstype=jfs 
real_init=/sbin/init 
root_keydev=/dev/disk/by-partuuid/086194de-e476-4abb-82da-9744e6fb0257 
root_key=luks-key.gpg 
keymap=la 
amd_iommu=on 
iommu=on

Мне все еще не хватает опции конфигурации ядра?


Обновлять:По рассеянности я по ошибке выдал ps -ef | grep -i iommu, и посмотрите, что я только что нашел...

rockshooter ~ # ps -ef | grep iommu
root        66     2  0 02:57 ?        00:00:00 [amd_iommu_v2]

Если я вижу поток ядра, я думаю, что есть шанс, что я смогу запустить IOMMU, просто мое ядро ​​ничего об этом не говорит. Это просто дикая догадка... но я собираюсь пойти и попробовать использовать его.

решение1

Основные параметры IOMMU

Пытаться Device Drivers >> IOMMU Hardware Support:

Варианты IOMMU

AMD IOMMU

Затем включите AMD IOMMU support.

Перераспределение DMA

Давать возможностьSupport for Intel IOMMU using DMA Remapping Devices

Дополнительно: переназначение IRQ

Давать возможностьSupport for Interrupt Remapping

Необязательно: включить поддержку версии 2

AMD IOMMU Version 2 driver


PCI-опция

Варианты автобусов

Bus options (PCI etc.) >> PCI Stub


Никогда не используйте grepфайл конфигурации, всегда используйте menuconfigи /ключ для поиска необходимых опций. В руководстве, на которое вы ссылаетесь, есть три проблемы:

  1. Он предназначен для пользователей Fedora/Redhat.
  2. Из-за пункта 1 версия ядра другая, поэтому параметры находятся в другом месте.
  3. Ядро Gentoo новее ядра, используемого в руководстве.

Обновлять

Моя материнская плата слишком старая для поддержки PCI Passthrough, но я хотел бы, чтобы вы увидели, что теперь все параметры включены правильно. Используйте именно те параметры, которые я вам указал:

Основные параметры IOMMU

AGP: Checking aperture...
[    0.000000] AGP: No AGP bridge found
[    0.000000] AGP: Node 0: aperture [bus addr 0xc4000000-0xc5ffffff] (32MB)
[    0.000000] Aperture pointing to e820 RAM. Ignoring.
[    0.000000] AGP: Your BIOS doesn't leave an aperture memory hole
[    0.000000] AGP: Please enable the IOMMU option in the BIOS setup
[    0.000000] AGP: This costs you 64MB of RAM
[    0.000000] AGP: Mapping aperture over RAM [mem 0xc4000000-0xc7ffffff] (65536KB)
...
[    0.959270] PCI-DMA: Disabling AGP.
[    0.959337] PCI-DMA: aperture base @ c4000000 size 65536 KB
[    0.959338] PCI-DMA: using GART IOMMU.
[    0.959340] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture
...
[    1.375277] AMD IOMMUv2 driver by Joerg Roedel <[email protected]>
[    1.375277] AMD IOMMUv2 functionality not available on this system

решение2

Наконец, после долгих причитаний, жалоб и размышлений, я, наконец, понял, что происходит.

Как выясняется из,IOMMU работал все это время, просто логи ядра этого не показывали.Но драйвер IOMMU был там, он работал, и по счастливой случайности я об этом узнал, когда по ошибке набрал ps -efвместо dmesgэтого:

rockshooter ~ # ps -ef | grep -i iommu
root        66     2  0 04:19 ?        00:00:00 [amd_iommu_v2]  

Когда я увидел, что поток ядра работает, я подумал, может, мой IOMMU действительно работает? Поэтому я выполнил те же шаги по настройке, которые я делал ранее для Debian, и через час, о чудо, я был на своей виртуальной машине, подключенной к моей видеокарте, и играл в какие-то игры.

Пожалуйста, сохраните эту ветку для дальнейшего использования, потому что мне потребовалось около 3 недель, чтобы разобраться с этим. Я все равно дал другому автору вполне заслуженные +50 репутации за то, что он потрудился с настройкой и тестированием этой проблемы.

Связанный контент