Ahora toca hablar de la configuración del sistema hypervisor y de la máquina virtual.

Sistema hypervisor

En el sistema hypervisor hay que realizar varias configuraciones que implican al hardware físico. La primera de ellas es comprobar la compatibilidad hardware con IOMMU con la tecnología adecuada.

En el caso de AMD IOMMU se llama AMD-Vi. Esta disponible en cualquier placa base y CPU desde los AMD Bulldozer o FX. No se requiere ninguna opción especial a indicar desde el Bootloader GRUB para que activen ciertos módulos de kernel especiales y el UEFI (BIOS), le indica al Sistema Hypervisor que está disponible.

En el caso de Intel IOMMU se llama VT-d, ojo con esto, los sistemas Intel suelen soportar VT-x que es la instrucción que permite la virtualización, pero usualmente VT-d es un subconjunto aparte que suelen no incluir junto a la de virtualización. En el caso del Workstation de la oficina, VT-d costó encontrarlo, ya que aparte de activar la virtualización en un panel de configuración, tenemos que buscar la activación en otro panel diferente. Además hay que indicarle al bootloader GRUB parámetros de activación especiales para que carguen los módulos de IOMMU. Esto ocurre porque desde el Kernel no se activan por defecto. Este es el caso del Workstation con el que realizamos la guía.

Parámetro para indicarle al Sistema que debe activar los módulos de IOMMU

Luego tenemos que actualizar el bootloader con los cambios de los parámetros con el siguiente comando.

# update-grub

Luego de comprobar que efectivamente en la UEFI/BIOS, se han activado VT-d (cada UEFI es un mundo). Reiniciamos el sistema, verificamos que IOMMU está en correcto funcionamiento tal y como se puede ver en la siguiente captura. El comando ejecutado está a continuación de la captura.

Se pueden ver los grupos de IOMMU y la tecnología usada de Intel DMAR. Como curiosidad la de AMD-Vi, al estar activada por defecto comprueba que se trate de una CPU AMD.
# dmesg | grep -i -e DMAR -e IOMMU

El siguiente paso es activar los módulos necesarios, para que el kernel que es el hypervisor a la vez, pueda pasar el hardware físico a máquinas virtuales. Para ello editamos los siguientes archivos:

# nano /etc/modprobe.d/blacklist.conf

Archivo a editar necesario, para bloquear la carga de los módulos o lo que es lo mismo drivers, de la tarjeta gráfica que queremos ceder a la máquina virtual. Esto es para impedir que el sistema cargue para su propio uso la tarjeta gráfica.
Blacklist del módulo nouveau

Dependiendo de la gráfica que en mi caso es una Nvidia. Se tendrá que poner en blacklist distintos módulos si es AMDGPU o Radeon, o es una gráfica workstation,… También se tiene que tener en cuenta, si ese usan módulos privativos o libres, ya que estos son muy diferentes entre sí.

# nano /etc/modules

Aquí introducimos los módulos de VFIO o IOMMU. Que deben cargarse por el kernel, ya que de manera normal no los carga, suele cargar los del hardware físico o el de virtualización cuando sea llamado.
Módulos que hay que cargar en boot time (tiempo de arranque)
# lspci -nn 

Este comando es necesario para poder saber el identificador de hardware para que el módulo IOMMU lo asigne a la máquina virtual. Los identificadores están entre corchetes y hay que copiarlos 10de:128b sin ellos. Se puede ver que hay dos gráficas, permitiendo el uso de Passthrough, además se tiene que conocer también el ID de Sonido, ya que no funciona la tarjeta correctamente sin el acceso a la memoria que controla el sonido.
# nano /etc/modprobe.d/vfio.conf

Ahora aquí previa consulta del identificador con lspci, debemos poner la pareja Audio + VGA ya que sin dicha pareja no funciona correctamente por lo referido anteriormente.
Una vez conocidos los identificadores los añadimos a este fichero para que el kernel le cargue dichos módulos.

Una vez realizado esto necesitamos regenerar la imagen de carga initramfs de todos los kernels instalados para que apliquen las configuraciones indicadas en los ficheros anteriores y finalmente reiniciamos para recargar el kernel con toda la configuración nueva.

# update-initramfs -u -k all
# reboot
Una vez reiniciado podemos ver que el módulo se ha aplicado correctamente a la gráfica.

En el siguiente post, podemos ver cómo preparar la máquina virtual, con la tarjeta gráfica.

Fuentes

https://access.redhat.com/documentation/en-us/red_hat_virtualization/4.3/html/setting_up_an_nvidia_gpu_for_a_virtual_machine_in_red_hat_virtualization/proc_nvidia_gpu_passthrough_nvidia_gpu_passthrough

https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF

https://pve.proxmox.com/wiki/Pci_passthrough

https://wiki.archlinux.org/title/Kernel_parameters

Web Campus Infantil
Logo y enlace Web Campus Infantil 2021
Web SereIngeniera
Logo y enlace Web SereIngeniera 2021
PyconES 2022
Logo y enlace PyconES 2022
Humor
Humor
Archivos
Categorías