Pergunta

Pergunta

Estou tentando usar o PCI-Passthrough para conectar uma placa de vídeo antiga (Radeon 4770) a uma máquina virtual. Estou usando Linux-KVM para executar minhas máquinas virtuais em um host Debian Linux (Wheezy, 3.2.0-4-amd64).

Pergunta

Para esclarecer, não tenho certeza de qual é o 'caminho' correto para implementar o PCI-Passthrough com Linux KVM. Nesta fase, suspeito que a ação correta sejaadicione CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ON, e CONFIG_PCI_STUBà seção "Opções de barramento (PCI etc.)" da fonte do kernel e recompile.

Mas eu não tenho certezase esta for uma lista exaustiva de adições necessárias antes de recompilar.Ouse recompilar o kernel for necessário--talvez exista um método mais fácil?

Dos guias que mencionei, apenaslinux-kvm.orgmenciona explicitamente que a compilação é necessária. Linux-KVM já está instalado e funcionando como hipervisor.

Pesquisar

Neste ponto, acho que meu problema está relacionado ao meu kernel. Meu recurso principal tem sido o guia emlinux-kvm.org(http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM). No entanto, encontrei outros recursos que indicam métodos ligeiramente diferentes que são (aparentemente) específicos da distribuição:

Fedora--https://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html

SUSE--"openSUSE: Virtualização com KVM" (Link omitido devido à baixa relevância e limite de 2 links)

O guia do Fedora funciona até fazer referência setseboolao que parece ser específico do RedHat. O guia SUSE indica que a atribuição de placa gráfica não é suportada pelo SUSE, mas também estou fazendo referência a ele porque indicou que devo encontrar uma CONFIG_DMAR_DEFAULT_ONstring em /boot/config-`uname -r`. Olinux-kvm.orgsite também faz referência a CONFIG_DMAR_DEFAULT_ON, então este parece ser um componente comum e necessário.

Observação:Não encontrei restrições para placas gráficas nos guias do Fedora ou Debian. O documento SUSE referenciado é datado de 2006-2013.

Não consigo encontrar CONFIG_DMAR_DEFAULT_ONem /boot/config-`uname -r` no meu sistema. Outras pesquisas sugerem que CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONe CONFIG_PCI_STUBsão itens de configuração do kernel Linux que são relevantes para as instruções emlinux-kvm.org. Como tal, acredito que preciso recompilar o kernel do meu host com estes 3 (pelo menos) itens de configuração do kernel. A inicialização intel_iommu=oncomo parâmetro do kernel para meu sistema operacional host parece ser insuficiente.

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

Confirmação de suporte VT-d/IOMMU/KVM

Minha pesquisa indica que o PCI-Passthrough requer suporte de CPU e placa-mãe para VT-d.

VT-d

Confirmei que meu processador, umnão-kINTEL i7-3770 (por ark.intel.com/products/65719), suporta VT-d:

Tecnologia de virtualização Intel® para E/S direcionada (VT-d) ‡ Sim

Minha placa-mãe Asrock Z77 Extreme4 também suporta VT-d (conforme página 62 do Manual do Usuário):

VT-d Use para ativar ou desativar a tecnologia Intel ® VT-d (Intel ® Virtualization Technology for Directed I/O). O valor padrão deste recurso é [Desativado].

IOMMU

Verifiquei que meu sistema tem suporte IOMMU:

dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[    0.000000] Intel-IOMMU: enabled

KVM

O KVM está instalado e funcional, além do suporte PCI-Passthrough:

lsmod | grep kvm
kvm_intel             121968  0 
kvm                   287749  1 kvm_intel

Garanti que o VT-d esteja habilitado através do BIOS da minha placa-mãe. Como tal, não suspeito de problemas de hardware/BIOS que impediriam o uso do VT-d. Sem considerar,Não consigo desconectar com êxito minha placa de vídeo do meu host e reatribuí-la a uma máquina virtual.

Considerações finais

Por fim, gostaria de mencionar que também tentei testar:

echo "8086 10b9" \> /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" \> /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" \> /sys/bus/pci/drivers/pci-stub/bind
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0

e recebi o seguinte erro após tentar criar a VM de destino:

Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized

Suponho que isso ocorre porque o host ainda não abrirá mão do controle da placa de vídeo e provavelmente devido ao kernel não ter sido compilado com os itens de configuração apropriados.

Este é um território novo para mim, então, por favor, perdoe minha inexperiência. Eu poderiamuitoAgradeço qualquer feedback, mesmo que seja simplesmente uma confirmação de que estou no caminho certo. Por favor, deixe-me saber se cometi um descuido flagrante ou estou pensando demais. Críticas construtivas à minha pergunta também são bem-vindas. Deixe-me saber se não forneci informações suficientes para "ajudar você a me ajudar" (ou se incluí informações demais!). Eu ficaria mais do que feliz em ajudar a tornar minha pergunta mais clara ou mais fácil de responder.

Agradeço antecipadamente,

Responder1

Artigo mencionado para passagem PCI, a configuração do Kernel é necessária

make menuconfig
set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"

optional setting: 
set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"

No entanto, não consegui encontrar essas opções em "Opções de barramento" e, em vez disso, em "Drivers de dispositivo -> Suporte de hardware IOMMU".

Depois de seguir o artigo mencionado, ainda tive problemas ao inicializar a máquina convidada e recebi erros de que "O dispositivo 'pci-assign' não pôde ser inicializado". Consegui inicializá-lo executando:

 echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

Consulte o artigo a seguir se ainda estiver tendo problemas:http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

informação relacionada