Pregunta

Pregunta

Estoy intentando utilizar PCI-Passthrough para conectar una tarjeta de video antigua (Radeon 4770) a una máquina virtual. Estoy usando Linux-KVM para ejecutar mis máquinas virtuales en un host Debian Linux (Wheezy, 3.2.0-4-amd64).

Pregunta

Para aclarar, no estoy seguro de cuál es la 'ruta' correcta para implementar PCI-Passthrough con Linux KVM. En esta etapa sospecho que la acción correcta esagregue CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONy CONFIG_PCI_STUBa la sección "Opciones de bus (PCI, etc.)" del código fuente del kernel y vuelva a compilar.

Pero no estoy segurosi se trata de una lista exhaustiva de adiciones necesarias antes de volver a compilarlas.Osi es necesario recompilar el kernel--¿Quizás haya un método más sencillo?

De las guías a las que he hecho referencia, sólolinux-kvm.orgmenciona explícitamente que la compilación es necesaria. Linux-KVM ya está instalado y funcionando como hipervisor.

Investigación

En este punto creo que mi problema está relacionado con mi kernel. Mi recurso principal ha sido la guía enlinux-kvm.org(http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM). Sin embargo, he encontrado otros recursos que indican métodos ligeramente diferentes que son (aparentemente) específicos de la distribución:

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

SUSE--"openSUSE: Virtualización con KVM" (Enlace omitido debido a baja relevancia y límite de 2 enlaces)

La guía de Fedora funciona hasta las referencias setseboolque parecen ser específicas de RedHat. La guía de SUSE indica que SUSE no admite la asignación de tarjetas gráficas; sin embargo, también hago referencia a ella porque indica que debería encontrar una CONFIG_DMAR_DEFAULT_ONcadena dentro de /boot/config-`uname -r`. Ellinux-kvm.orgEl sitio también hace referencia a CONFIG_DMAR_DEFAULT_ON, por lo que este parece ser un componente común y necesario.

Nota:No he encontrado restricciones para tarjetas gráficas en guías de Fedora o Debian. El documento SUSE al que se hace referencia tiene fecha de 2006-2013.

No puedo encontrarlo CONFIG_DMAR_DEFAULT_ONen /boot/config-`uname -r` en mi sistema. Investigaciones adicionales sugieren que CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONy CONFIG_PCI_STUBson elementos de configuración del kernel de Linux que son relevantes para las instrucciones enlinux-kvm.org. Como tal, creo que necesito recompilar el kernel de mi host con estos 3 (al menos) elementos de configuración del kernel. Arrancar intel_iommu=oncomo parámetro del kernel en mi sistema operativo host parece ser insuficiente.

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

Confirmación de compatibilidad con VT-d/IOMMU/KVM

Mi investigación indica que PCI-Passthrough requiere soporte tanto de CPU como de placa base para VT-d.

VT-d

He confirmado que mi procesador, unno kINTEL i7-3770 (según ark.intel.com/products/65719), admite VT-d:

Tecnología de virtualización Intel® para E/S dirigida (VT-d) ‡ Sí

Mi placa base Asrock Z77 Extreme4 también es compatible con VT-d (según la página 62 del Manual del usuario):

VT-d Utilice esto para habilitar o deshabilitar la tecnología Intel® VT-d (Tecnología de virtualización Intel® para E/S dirigida). El valor predeterminado de esta función es [Desactivado].

IOMMU

Verifiqué que mi sistema tiene soporte IOMMU:

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

KVM

KVM está instalado y funcional, además de la compatibilidad con PCI-Passthrough:

lsmod | grep kvm
kvm_intel             121968  0 
kvm                   287749  1 kvm_intel

Me he asegurado de que VT-d esté habilitado a través del BIOS de mi placa base. Como tal, no sospecho que haya problemas de hardware/BIOS que impidan el uso de VT-d. A pesar de todo,No puedo desconectar exitosamente mi tarjeta de video de mi host y reasignarla a una máquina virtual.

Pensamientos finales

Finalmente me gustaría mencionar que también intenté probar:

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

y obtuve el siguiente error después de intentar crear la 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

Supongo que esto se debe a que el host aún no cede el control de la tarjeta de video y probablemente se deba a que el kernel no está compilado con los elementos de configuración adecuados.

Este es un territorio nuevo para mí, así que perdone mi inexperiencia. me gustaríamuyAgradezco cualquier comentario, incluso si es simplemente una confirmación de que estoy en el camino correcto. Por favor, avíseme si he cometido un descuido evidente o si estoy pensando demasiado. Las críticas constructivas a mi pregunta también son bienvenidas. Déjame saber si no he proporcionado suficiente información para "ayudarte a ayudarme" (¡o si he incluido demasiada!). Estaría más que feliz de ayudar a que mi pregunta sea más clara o más fácil de responder.

Gracias de antemano,

Respuesta1

Artículo mencionado para el paso a través de PCI, se requiere la configuración del kernel

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 "*"

Sin embargo, no pude encontrar estas opciones en "Opciones de bus" y en su lugar en "Controladores de dispositivo -> Soporte de hardware IOMMU".

Después de seguir el artículo mencionado, todavía tuve problemas para iniciar la máquina invitada y recibí el error "No se pudo inicializar el dispositivo 'pci-assign'". Logré arrancarlo ejecutando:

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

Consulte el siguiente artículo si aún tiene problemas:http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

información relacionada