Estou tentando usar o PCI-Passthrough para conectar uma placa de vídeo antiga (Radeon 4770) a uma máquina virtual. Estou usando o 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 qual é o 'caminho' correto para implantar PCI-Passthrough com o Linux KVM. Nesse estágio, suspeito que a ação correta seja adicionar CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
e CONFIG_PCI_STUB
à seção "Opções de barramento (PCI etc.)" da origem e recompilação do kernel.
Mas não tenho certeza se esta é uma lista exaustiva de adições necessárias antes de recomplilar. Ou se for necessário recompilar o kernel - talvez haja um método mais fácil?
Dos guias que referi, apenas linux-kvm.org menciona explicitamente que a compilação é necessária. O Linux-KVM já está instalado e funcionando como um hipervisor.
Pesquisa
Neste ponto, acho que meu problema está relacionado ao meu kernel. Meu principal recurso foi o guia em linux-kvm.org ( link ). 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: Virtualization with KVM" (Link omitted due to low-relevancy and 2-link limit)
O guia do Fedora funciona até referenciar setsebool
, que parece ser específico de RedHat. O guia do SUSE indica que a atribuição da placa gráfica não é suportada pelo SUSE, no entanto, estou referenciando-a também porque indicava que deveria encontrar uma string CONFIG_DMAR_DEFAULT_ON
em / boot / config-'uname -r '. O site linux-kvm.org também faz referência a CONFIG_DMAR_DEFAULT_ON
, portanto, este parece ser um componente comum e necessário.
Note: I have not found restrictions for graphics cards in guides for Fedora or Debian. The referenced SUSE document is dated 2006-2013.
Não consigo encontrar CONFIG_DMAR_DEFAULT_ON
em / boot / config-'uname -r 'no meu sistema. Pesquisas adicionais sugerem que CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
e CONFIG_PCI_STUB
são itens de configuração do kernel do Linux que são relevantes para as instruções em linux-kvm.org . Como tal, acredito que preciso recompilar o kernel do meu host com esses 3 (pelo menos) itens de configuração do kernel. A inicialização com intel_iommu=on
como um 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 a CPU e placa-mãe para o VT-d.
VT-d
Confirmei que meu processador, um não-k INTEL i7-3770 (por ark.intel.com/products/65719), suporta VT-d:
Intel® Virtualization Technology for Directed I/O (VT-d) ‡
Yes
A placa-mãe My Asrock Z77 Extreme4 também suporta VT-d (por página 62 do Manual do Usuário):
VT-d
Use this to enable or disable Intel
®
VT-d technology (Intel
®
Virtualization
Technology for Directed I/O). The default value of this feature is [Disabled].
IOMMU
Verifiquei que meu sistema tem suporte ao 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
Eu assegurei que o VT-d esteja ativado através do BIOS da minha placa-mãe. Como tal, não suspeito de problemas de hardware / BIOS que possam impedir o uso de VT-d. Independentemente disso, não consigo separar com sucesso minha placa de vídeo do meu host e reatribuí-la a uma máquina virtual .
Pensamentos finais
Por fim, gostaria de mencionar que também testei:
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 obteve 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
Eu estou supondo que isso acontece porque o host ainda não abandonará o controle da placa de vídeo e provavelmente porque o kernel não está sendo compilado com os itens de configuração apropriados.
Este é um novo território para mim, então, por favor, perdoe minha inexperiência. Eu agradeceria muito qualquer feedback, mesmo que seja simplesmente a confirmação de que estou no caminho certo. Por favor, deixe-me saber se eu fiz um descuido flagrante ou estou pensando demais. A crítica construtiva da minha pergunta é bem-vinda também. Deixe-me saber se eu não forneceu informações suficientes para "ajudar você me ajudar" (ou se eu tiver incluído muito!). Eu ficaria mais do que feliz em ajudar a tornar minha pergunta mais clara ou mais fácil de responder.
Obrigado antecipadamente,