Como habilito a passagem de dispositivo KVM no Linux?

13

Eu tenho uma placa-mãe MSI-GD65 Gaming e uma Intel i7 4790. O VT-D está ativado na seção Recursos da CPU da BIOS.

Estou executando o Ubuntu 14.04.1 LTS e quando tento desanexar um dispositivo, recebo a seguinte mensagem:

# virsh nodedev-desanexar pci_0000_00_1f_2

erro: falha ao desconectar o dispositivo pci_0000_00_1f_2 erro: operação não suportada: nem a atribuição de dispositivo VFIO nem KVM é suportada atualmente neste sistema

O Dmesg inclui algumas informações sobre o IOMMU, mas não sei dizer se isso significa que o VT-D está ativado

$ dmesg | grep -i iommu

[0.027450] dmar: IOMMU 0: reg_base_addr fed90000 ver 1: 0 limite c0000020660462 ecap f0101a
[0.027455] dmar: IOMMU 1: reg_base_addr fed91000 ver 1: 0 limite d2008020660462 ecap f010da
[0.027521]

Alguém pode aconselhar o que preciso fazer para ativar o VT-D neste sistema e passar dispositivos PCI aos convidados da KVM, por favor?

Anonymouslemming
fonte
você fez um ciclo de energia completo depois de ativar o VT e o VT-d?
dyasny

Respostas:

11

A solução para esse problema é habilitar o IOMMU nos parâmetros de inicialização do GRUB.

Você pode fazer isso configurando o seguinte em / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_iommu = on"

Se você estiver usando um processador AMD, deverá anexar amd_iommu=onos parâmetros de inicialização.

GRUB_CMDLINE_LINUX_DEFAULT = "respingo silencioso amd_iommu = ativado"

Em seguida, execute update-grube reinicie

Este link me ajudou bastante: https://www.centos.org/forums/viewtopic.php?f=47&t=48115

Veja também: https://pve.proxmox.com/wiki/Pci_passthrough

Isso me escapou um pouco, pois eu acreditava que o iommu era uma alternativa da AMD ao VT-D.

Anonymouslemming
fonte
E se isso não funcionar, o seu CPU pode não suportar VT-D ou AMD-VI (a pergunta deixa claro - Estou postando aqui para os outros)
ndemou
5

Adicionando à resposta do Anonymouslemming: Parece haver um bug no Ubuntu (18.04 para mim), que faz com que a configuração do GRUB_CMDLINE_LINUX_DEFAULT no / etc / default / grub seja ignorada.

Pode ser corrigido comentando o GRUB_CMDLINE_LINUX_DEFAULT em /etc/default/grub.d/50-curtin-settings.cfg

https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1569567

Mads Y
fonte
1

Você parece ter os requisitos de hardware porque outro módulo está usando (IOAPIC). Nesse caso, você precisa simplesmente configurar a extremidade do software.

Parece que você precisa ter todos os pré-requisitos instalados para dar suporte ao desanexação do dispositivo apropriado. Parece que você não os tem instalado ou eles não estão configurados.

Você precisa ter as bibliotecas e módulos de kernel apropriados instalados e inicializados antes de tentar usá-los em um caso como este. Esses serão vários utilitários de sistema "host" e módulos de kernel para sua configuração do KVM.

Você precisa ler a seção do manual sobre como configurar adequadamente sua solução KVM apropriada e seguir essas etapas antes de tentar executar apenas os utilitários. Eles não configuram simplesmente no primeiro lançamento apenas porque os pacotes necessários estão instalados.

Observe que, se o dispositivo em questão estiver incorporado na placa-mãe, ele pode não ser tecnicamente um dispositivo PCI, mas um dispositivo mapeado por PCI. Esses dispositivos são realmente conectados por outros meios, mas são mapeados para o espaço do BIOS PCI usando o BIOS. Eles podem ou não ser compatíveis com o desapego do dispositivo, dependendo de vários aspectos de como estão conectados ao sistema.

Além disso, talvez você não consiga desconectar sub-dispositivos sem desconectar dispositivos-pai, se seus drivers forem interdependentes. Você pode desconectar apenas dispositivos com absoluta certeza de quem é o dispositivo pai, o controlador PCI, o PCI Bridge ou algum outro controlador ou ponte de barramento suportado

Robert Wm Ruedisueli
fonte
Obrigado pela informação. Acho que minha pergunta deveria ter incluído "Onde posso encontrar documentação para fazer isso no KVM" para ser mais específico.
Anonymouslemming
0

Estou no centos7

Eu tive esse erro que me levou até aqui, mas meu problema não era atualizar o (no meu caso) vim /etc/sysconfig/grube adicionar intel_iommu=onao final da linha paraGRUB_CMDLINE_LINUX

Eu tive que executar esse comando

grub2-mkconfig -o /boot/grub2/grub.cfg

então reinicie

Nota: No entanto, também executei o grub2-mkconfig com uma reinicialização antes do comando acima e isso não fez nada para mim pelo que vi.

referência: https://bugzilla.redhat.com/show_bug.cgi?id=1269446

Comentários 11 e 12

gstlouis
fonte