Como eu compilo meu kernel do Gentoo para o AMD IOMMU?

1

Eu tenho um processador AMD A4-5300 com uma placa-mãe que suporta o IOMMU e estou tentando habilitar o IOMMU no kernel do Gentoo Hardened 4.3.3-r4 com a intenção de usar uma placa gráfica em uma VM KVM. De acordo com este guia aqui , devo recompilar meu kernel com algumas opções fornecidas ("Suporte para Remapeamento de Dispositivos DMA "," Ativar Dispositivos Remapeamento de DMA "e" Driver PCI Stub "). No entanto, "Suporte para Remapeamento de Dispositivos DMA" e "Ativar Remapeamento de Dispositivos DMA" estão ausentes da configuração do meu kernel.

Em seguida, procurei na configuração "remapear" e tentei ativar várias opções, que eram CONFIG_IRQ_REMAP, CONFIG_DMAR_TABLE, CONFIG_IOMMU_SUPPORT, CONFIG_SWIOTLB e CONFIG_PCI_IOV. Então eu recompilei meu kernel com estas opções ativadas, iniciei meu sistema com amd_iommu=fullflush iommu=force na linha de comando do kernel, e de acordo com o guia mencionado verifiquei se o IOMMU estava rodando em meu sistema procurando por "AMD-Vi" em minhas mensagens do kernel :

dmesg | grep AMD-Vi

Nada aparece no meu log do kernel sobre o AMD-Vi.

Além disso, quando tento iniciar uma VM no virt-manager com um dispositivo PCI conectado, recebo uma mensagem que diz "Erro ao iniciar o domínio: configuração não suportada: o host não suporta passagem de dispositivos PCI host ".

Praticamente tudo o que eu encontro é para o Fedora, Ubuntu e Debian, onde o IOMMU aparentemente simplesmente funciona fora da caixa. Eu não acredito que seja uma questão de minha placa-mãe e CPU não suportarem, porque meu BIOS tem uma opção para isso, e porque eu me lembro de poder há alguns anos rodar uma VM VirtualBox com o IOMMU no Debian (embora eu não tenha t follow up on it porque eu nunca pensei no momento que eu precisei de duas placas gráficas para usar uma GPU em uma VM através do IOMMU).

Veja o que eu já tentei, mas não funcionou:

  1. Usando o kernel padrão em vez de endurecido.
  2. Ativando Drivers de dispositivos > > Suporte de Hardware IOMMU , suporte AMD IOMMU , Suporte para Intel IOMMU usando DMA Remapping Devices , Suporte para Remapeamento de Interrupções e Opções de barramento (PCI etc.) > > PCI Stub .
  3. Usando o kernel mais recente, atualmente apenas atualizado para o 4.4.8-endurecido-r1.

Esta é a linha de comando que estou usando para iniciar meu kernel, com cada parâmetro em uma linha separada por conveniência:

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

Ainda sinto falta de uma opção de configuração do kernel?

Atualização: Fora de distração eu erroneamente emiti ps -ef | grep -i iommu , e veja o que acabei de encontrar ...

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

Se eu vir um encadeamento de kernel, acho que pode haver uma chance de que eu possa executar o IOMMU, só que meu kernel não está dizendo nada sobre isso. É apenas um palpite ... mas vou seguir em frente e tentar usá-lo.

    
por RAKK 22.06.2016 / 08:21

2 respostas

0

Finalmente, depois de muitos lamentos, reclamações e críticas, finalmente descobri o que estava acontecendo.

Por acaso, o IOMMU estava trabalhando o tempo todo, só que os logs do kernel não estavam mostrando. Mas o driver do IOMMU estava lá, estava funcionando e descobri serenamente quando Por engano digitei ps -ef em vez de dmesg assim:

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

Quando vi esse encadeamento do kernel em execução, pensei, talvez meu IOMMU esteja realmente funcionando? Então eu executei os mesmos passos de configuração que eu fiz anteriormente para o Debian, e uma hora depois, eis que, eu estava na minha máquina virtual conectada à minha placa gráfica jogando alguns jogos.

Por favor, salve este tópico para referência futura, porque eu levei umas boas 3 semanas para descobrir isso. Eu ainda dei ao outro pôster uma merecida reputação de +50 por se preocupar em configurar e testar esse problema.

    
por 09.07.2016 / 13:06
1

Opções principais do IOMMU

Experimente Device Drivers >> IOMMU Hardware Support :

AMDIOMMU

Emseguida,ativeAMDIOMMUsupport.

RemapeamentodeDMA

AtivarSupportforIntelIOMMUusingDMARemappingDevices

Opcional:RemapeamentodeIRQ

AtivarSupportforInterruptRemapping

Opcional:ativeosuportedaversão2

AMDIOMMUVersion2driver

OpçãoPCI

Bus options (PCI etc.) >> PCI Stub

Nunca grep do arquivo de configuração use sempre menuconfig e / para procurar as opções necessárias. Existem três problemas com o guia vinculado:

  1. Ele é personalizado para usuários do Fedora / Redhat.
  2. Por causa de # 1, a versão do kernel é diferente, portanto as opções estão em um lugar diferente.
  3. O kernel do Gentoo é mais novo que o kernel usado no guia.

Atualizar

Minha placa-mãe é muito antiga para suportar o PCI Passthrough, mas eu queria que você visse que as opções agora estão habilitadas corretamente. Usando as opções exatas que eu instruí a usar:

Opções principais do 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
    
por 23.06.2016 / 22:46