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 implicar PCI-Passthrough con Linux KVM. En esta etapa, sospecho que la acción correcta es agregar CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
y CONFIG_PCI_STUB
a la sección "Opciones de bus (PCI, etc.)" de la fuente del núcleo y volver a compilar.
Pero no estoy seguro de si esta es una lista exhaustiva de las adiciones necesarias antes de volver a compilar. O si es necesario volver a compilar el núcleo, ¿ tal vez hay un método más fácil?
De las guías a las que he hecho referencia, solo linux-kvm.org menciona explícitamente que es necesario compilar. Linux-KVM ya está instalado y funciona como un hipervisor.
Investigación
En este punto, creo que mi problema está relacionado con mi núcleo. Mi principal recurso ha sido la guía en linux-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 distribución:
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 la referencia setsebool
que parece ser específica de RedHat. La guía SUSE indica que la asignación de tarjetas gráficas no es compatible con SUSE, sin embargo, también estoy haciendo referencia a ella porque indicó que debería encontrar una CONFIG_DMAR_DEFAULT_ON
cadena dentro de / boot / config-`uname -r`. El sitio linux-kvm.org también hace referencia CONFIG_DMAR_DEFAULT_ON
, por lo que parece ser un componente común y necesario.
Nota: No he encontrado restricciones para las tarjetas gráficas en las guías para Fedora o Debian. El documento referenciado de SUSE está fechado en 2006-2013.
No puedo encontrar CONFIG_DMAR_DEFAULT_ON
en / boot / config-`uname -r` en mi sistema. La investigación adicional sugiere que CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
y CONFIG_PCI_STUB
son elementos de configuración del kernel de Linux que son relevantes para las instrucciones en linux-kvm.org . Como tal, creo que necesito recompilar el núcleo de mi host con estos 3 (al menos) elementos de configuración del núcleo. Arrancar intel_iommu=on
como un parámetro del kernel en mi host-OS parece ser insuficiente.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Confirmación de soporte de VT-d / IOMMU / KVM
Mi investigación indica que PCI-Passthrough requiere soporte de CPU y placa base para VT-d.
VT-d
He confirmado que mi procesador, un INTEL i7-3770 no k (según ark.intel.com/products/65719), es compatible con 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 Use 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 para IOMMU:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM está instalado y es funcional, además del soporte de PCI-Passthrough:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
Me aseguré de que VT-d esté habilitado a través del BIOS de mi placa base. Como tal, no sospecho problemas de hardware / BIOS que impidan el uso de VT-d. De todos modos, no puedo desconectar con éxito 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 máquina virtual 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 todavía no cederá el control de la tarjeta de video y probablemente se deba a que el núcleo no se compila con los elementos de configuración adecuados.
Este es un territorio nuevo para mí, así que perdona mi inexperiencia. Me gustaría mucho aprecio cualquier comentario que sea, incluso si es simplemente la confirmación de que estoy en el camino correcto. Avíseme si he hecho un descuido deslumbrante o si estoy pensando demasiado. La crítica constructiva de mi pregunta también es bienvenida. Avíseme si no he proporcionado suficiente información para "ayudarlo a ayudarme" (¡o si he incluido demasiado!). 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,