GPU SRIOV con una tarjeta gráfica FirePro S7150¶
Para lograr un GPU SRIOV con una tarjeta FirePro S7150, necesitaremos tener un kernel 4.4 de un servidor Ubuntu 16.04. Durante el proceso de instalación, necesitaremos asegurarnos de que la opción de virtualización esté marcada.
TODO: - Verificar si se puede hacer con otras distribuciones o kernels
1- Modificar la BIOS¶
El primer paso será modificar la BIOS. Necesitaremos resetearla a valores por defecto, cambiar el método de arranque a legacy, activar todos los parámetros relacionados con virtualización y, finalmente, habilitar SRIOV. Si la placa base no tiene esta última opción, todo el proceso no funcionará. Tendremos que cambiar la tarjeta gráfica principal al onboard, ya que la FirePro S7150 no tiene salida de video. (IntelRCSetup > Miscellanious Configuration > Active Video [Onboard Device])
2- Compilación del kernel¶
Para usar las tarjetas gráficas y todos sus núcleos, tendremos que recompilar el Kernel Linux, modificando algunos valores y aplicando algunos parches.
2.1- Activar los repositorios apt deb-src para poder descargar el código fuente del Kernel¶
vim /etc/apt/sources.list
----
# Ver http://help.ubuntu.com/community/UpgradeNotes para cómo actualizar a
# versiones más nuevas de la distribución.
deb http://es.archive.ubuntu.com/ubuntu/ xenial main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial main restricted
## Actualizaciones importantes de corrección de errores producidas después del lanzamiento final de la
## distribución.
deb http://es.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
## N.B. el software de este repositorio NO ESTÁ COMPLETAMENTE SOPORTADO por el
## equipo de Ubuntu. También, ten en cuenta que el software en universe NO recibirá
## revisión o actualizaciones del equipo de seguridad de Ubuntu.
deb http://es.archive.ubuntu.com/ubuntu/ xenial universe
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial universe
deb http://es.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial-updates universe
## N.B. el software de este repositorio NO ESTÁ COMPLETAMENTE SOPORTADO por el
## equipo de Ubuntu, y puede no estar bajo una licencia libre. Por favor asegúrate de
## tus derechos para usar el software. También, ten en cuenta que el software en
## multiverse NO recibirá revisión o actualizaciones del equipo de
## seguridad de Ubuntu.
deb http://es.archive.ubuntu.com/ubuntu/ xenial multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://es.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
## N.B. el software de este repositorio puede no haber sido probado tan
## extensivamente como el contenido en el lanzamiento principal, aunque incluye
## versiones más nuevas de algunas aplicaciones que pueden proporcionar características útiles.
## También, ten en cuenta que el software en backports NO recibirá
## revisión o actualizaciones del equipo de seguridad de Ubuntu.
deb http://es.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
## Descomenta las siguientes dos líneas para añadir software del repositorio
## 'partner' de Canonical.
## Este software no es parte de Ubuntu, pero es ofrecido por Canonical y los
## proveedores respectivos como un servicio a los usuarios de Ubuntu.
# deb http://archive.canonical.com/ubuntu xenial partner
# deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb-src http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
----
apt update && apt upgrade -y
reboot # !!!! ESTE REINICIO ES NECESARIO !!!!
2.2- Ahora necesitamos descargar los paquetes requeridos para poder desempaquetar el kernel. Necesitamos descargar el repositorio que contiene las fuentes del módulo gim y los parches para aplicar¶
apt install -y dpkg-dev
apt source linux-image-$(uname -r)
git clone https://github.com/GPUOpen-LibrariesAndSDKs/MxGPU-Virtualization
2.3- Ahora instalamos todos los paquetes requeridos para compilar el Kernel¶
2.4- Preparación del kernel e instalación de parches¶
cd linux-4.4.0
make oldconfig
make menuconfig
> Enable loadable module support --->
>> [ ] Module signature verification # Esto tiene que estar desmarcado. Después de eso, podemos guardar y salir
patch < ../MxGPU-Virtualization/patch/0001-Added-legacy-endpoint-type-to-sriov-for-ubuntu-4.4.0-75-generic.diff
File to patch: ./drivers/pci/iov.c # Necesitamos especificar la ruta del archivo que queremos parchear
patch < ../MxGPU-Virtualization/patch/0002-add-pci-io-access-cap-for-ubuntu-4.4.0-75-generic.diff
File to patch: ./drivers/vfio/pci/vfio_pci_config.c # Necesitamos especificar la ruta del archivo que queremos parchear
2.5- Compilación del kernel¶
2.6- Instalación del nuevo Kernel¶
3- Preparación de GRUB¶
3.1- Añadir el módulo amdgpu a la lista negra (usaremos el módulo gim)¶
vim /etc/modprobe.d/blacklist.conf
----
...
# AMD GPU (usaremos el módulo gim)
blacklist amdgpu
----
update-initramfs -u
3.2- Editar la configuración por defecto de GRUB para habilitar IOMMU¶
vim /etc/default/grub
----
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
...
----
update-grub
4- Compilación del módulo gim¶
El módulo gim es el módulo que vamos a usar para controlar la tarjeta gráfica.
cd MxGPU-Virtualization
./gim.sh
mkdir /lib/modules/<versión firepro>/misc
mv /lib/modules/<versión firepro>/GIM /lib/modules/<versión firepro>/misc/gim
depmod
nano /etc/modules # Hacer que el módulo se cargue al arrancar
----
...
gim
...
----
Una vez compilado, necesitamos ejecutar lo siguiente:
reboot # Para aplicar toda la configuración de GRUB
modprobe gim
modprobe -r gim
nano /etc/gim_config # Tiene que ser nano, el comando vi no funcionará
----
...
vf_num=16 # Esto activará los 16 núcleos de la GPU
...
----
modprobe gim
dmesg # Finalmente, necesitamos verificar que el módulo gim se ha cargado correctamente, sin errores
lspci -vvv # Ahora podemos ver que la FirePro S7150 tiene todos los 16 núcleos activados