¿Cómo compilo mi kernel Gentoo para AMD IOMMU?

¿Cómo compilo mi kernel Gentoo para AMD IOMMU?

Tengo una CPU AMD A4-5300 con una placa base que admite IOMMU y estoy intentando habilitar IOMMU en mi kernel Gentoo Hardened 4.3.3-r4 con la intención de usar una tarjeta gráfica en una VM KVM. De acuerdo aesta guía aquí, se supone que debo recompilar mi kernel con algunas opciones proporcionadas ("Soporte para dispositivos de reasignación DMA", "Habilitar dispositivos de reasignación DMA" y "controlador PCI Stub"). Sin embargo, "Soporte para dispositivos de reasignación DMA" y "Habilitar dispositivos de reasignación DMA" no están en la configuración de mi kernel.

Luego busqué "reasignar" en la configuración e intenté habilitar varias opciones, que eran CONFIG_IRQ_REMAP, CONFIG_DMAR_TABLE, CONFIG_IOMMU_SUPPORT, CONFIG_SWIOTLB y CONFIG_PCI_IOV. Luego volví a compilar mi kernel con estas opciones habilitadas, inicié mi sistema amd_iommu=fullflush iommu=forceen la línea de comando del kernel y, de acuerdo con la guía antes mencionada, verifiqué si IOMMU se estaba ejecutando en mi sistema buscando "AMD-Vi" en los mensajes de mi kernel:

dmesg | grep AMD-Vi

No aparece nada en el registro de mi kernel sobre AMD-Vi.

Además, cuando intento iniciar una máquina virtual en virt-manager con un dispositivo PCI conectado, aparece un mensaje que dice"Error al iniciar el dominio: configuración no admitida: el host no admite el paso de dispositivos PCI del host".

Casi todo lo que encuentro es para Fedora, Ubuntu y Debian, donde aparentemente IOMMU simplemente funciona de inmediato. No creo que sea una cuestión de que mi placa base y mi CPU no lo admitan, porque mi BIOS tiene una opción para ello y porque recuerdo que hace unos años pude ejecutar una máquina virtual VirtualBox con IOMMU en Debian (aunque no lo hice). No seguiré con esto porque nunca pensé en este momento que necesitaría dos tarjetas gráficas para usar una GPU en una VM a través de IOMMU).

Esto es lo que ya probé pero no funcionó:

  1. Usando el kernel estándar en lugar del endurecido.
  2. HabilitandoControladores de dispositivos >> Soporte de hardware IOMMU,Soporte AMD IOMMU,Soporte para Intel IOMMU usando dispositivos de reasignación DMA,Soporte para reasignación de interrupcionesyOpciones de bus (PCI, etc.) >> PCI Stub.
  3. Usando el último kernel, actualmente recién actualizado a 4.4.8-hardened-r1.

Esta es la línea de comando que estoy usando para iniciar mi kernel, con cada parámetro en una línea separada para mayor comodidad:

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

¿Todavía me falta una opción de configuración del kernel?


Actualizar:Por distracción emití por error ps -ef | grep -i iommu, y mira lo que acabo de encontrar...

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

Si veo un hilo del kernel, supongo que podría haber una posibilidad de que pueda ejecutar IOMMU, es solo que mi kernel no dice nada al respecto. Es sólo una suposición descabellada... pero voy a seguir adelante e intentaré usarlo.

Respuesta1

Opciones principales de IOMMU

Intentar Device Drivers >> IOMMU Hardware Support:

Opciones de IOMMU

AMD IOMMU

Luego habilite AMD IOMMU support.

Reasignación de DMA

PermitirSupport for Intel IOMMU using DMA Remapping Devices

Opcional: reasignación de IRQ

PermitirSupport for Interrupt Remapping

Opcional: habilitar la compatibilidad con la versión 2

AMD IOMMU Version 2 driver


Opción PCI

Opciones de autobús

Bus options (PCI etc.) >> PCI Stub


Nunca grepel archivo de configuración, use siempre menuconfigla /clave y para buscar las opciones requeridas. Hay tres problemas con la guía que vinculó:

  1. Está diseñado para usuarios de Fedora/Redhat.
  2. Debido al punto 1, la versión del kernel es diferente, por lo tanto, las opciones están en un lugar diferente.
  3. El kernel de Gentoo es más nuevo que el kernel usado en la guía.

Actualizar

Mi placa base es demasiado antigua para admitir PCI Passthrough, pero quería que vieras que las opciones ahora están habilitadas correctamente. Usando las opciones exactas que te indiqué que usaras:

Opciones principales de 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

Respuesta2

Finalmente, después de muchos lamentos, quejas y golpes de cabeza, finalmente descubrí lo que estaba pasando.

Como resulta,IOMMU estuvo funcionando todo el tiempo, solo que los registros del kernel no lo mostraban.Pero el controlador IOMMU estaba allí, estaba funcionando y, por casualidad, lo descubrí cuando escribí por error ps -efen lugar de dmesgesto:

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

Cuando vi el hilo del kernel ejecutándose pensé, ¿quizás mi IOMMU realmente esté funcionando? Entonces realicé los mismos pasos de configuración que hice anteriormente para Debian, y una hora después, he aquí, estaba en mi máquina virtual conectada a mi tarjeta gráfica jugando algunos juegos.

Guarde este hilo para referencia futura, porque me tomó unas buenas 3 semanas resolver esto. Aún así le di al otro cartel una merecida reputación +50 por molestarse en configurar y probar este problema.

información relacionada