Salta el contingut

GPU SRIOV amb una targeta gràfica FirePro S7150

Per aconseguir un GPU SRIOV amb una targeta FirePro S7150, necessitarem tenir un kernel 4.4 d'un servidor Ubuntu 16.04. Durant el procés d'instal·lació, necessitarem assegurar-nos que l'opció de virtualització estigui marcada.

TODO: - Verificar si es pot fer amb altres distribucions o kernels

1- Modificar la BIOS

El primer pas serà modificar la BIOS. Necessitarem restablir-la a valors per defecte, canviar el mètode d'arrencada a legacy, activar tots els paràmetres relacionats amb virtualització i, finalment, habilitar SRIOV. Si la placa base no té aquesta última opció, tot el procés no funcionarà. Haurem de canviar la targeta gràfica principal a onboard, ja que la FirePro S7150 no té sortida de vídeo. (IntelRCSetup > Miscellanious Configuration > Active Video [Onboard Device])

2- Compilació del kernel

Per usar les targetes gràfiques i tots els seus nuclis, haurem de recompilar el Kernel Linux, modificant alguns valors i aplicant alguns pegats.

2.1- Activar els repositoris apt deb-src per poder descarregar el codi font del Kernel

vim /etc/apt/sources.list
----
# Veure http://help.ubuntu.com/community/UpgradeNotes per com actualitzar a
# versions més noves de la distribució.
deb http://es.archive.ubuntu.com/ubuntu/ xenial main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ xenial main restricted

## Actualitzacions importants de correcció d'errors produïdes després del llançament final de la
## distribució.
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 programari d'aquest repositori NO ESTÀ COMPLETAMENT SUPORTAT pel
## equip d'Ubuntu. També, tingues en compte que el programari a universe NO rebrà
## revisió o actualitzacions de l'equip de seguretat d'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 programari d'aquest repositori NO ESTÀ COMPLETAMENT SUPORTAT per
## l'equip d'Ubuntu, i pot no estar sota una llicència lliure. Si us plau assegura't dels
## teus drets per usar el programari. També, tingues en compte que el programari a
## multiverse NO rebrà revisió o actualitzacions de l'equip de
## seguretat d'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 programari d'aquest repositori pot no haver estat provat tan
## extensivament com el contingut del llançament principal, encara que inclou
## versions més noves d'algunes aplicacions que poden proporcionar característiques útils.
## També, tingues en compte que el programari a backports NO rebrà
## revisió o actualitzacions de l'equip de seguretat d'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 les següents dues línies per afegir programari del repositori
## 'partner' de Canonical.
## Aquest programari no és part d'Ubuntu, però és ofert per Canonical i els
## proveïdors respectius com un servei als usuaris d'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 # !!!! AQUEST REINICI ÉS NECESSARI !!!!

2.2- Ara necessitem descarregar els paquets requerits per poder desempaquetar el kernel. Necessitem descarregar el repositori que conté les fonts del mòdul gim i els pegats per aplicar

apt install -y dpkg-dev
apt source linux-image-$(uname -r)
git clone https://github.com/GPUOpen-LibrariesAndSDKs/MxGPU-Virtualization

2.3- Ara instal·lem tots els paquets requerits per compilar el Kernel

apt build-dep linux-image-$(uname -r)
apt install libncurses5 libncurses5-dev

2.4- Preparació del kernel i instal·lació de pegats

cd linux-4.4.0
make oldconfig
make menuconfig
> Enable loadable module support --->
>> [ ] Module signature verification # Això ha d'estar desmarcat. Després d'això, podem guardar i sortir
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 # Necessitem especificar la ruta del fitxer que volem pegat
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 # Necessitem especificar la ruta del fitxer que volem pegat

2.5- Compilació del kernel

make -j <nombre de fils que  la CPU> deb-pkg LOCALVERSION=-vm-firepro

2.6- Instal·lació del nou Kernel

cd ..
dpkg -i *.deb

3- Preparació de GRUB

3.1- Afegir el mòdul amdgpu a la llista negra (usarem el mòdul gim)

vim /etc/modprobe.d/blacklist.conf
----
...
# AMD GPU (usarem el mòdul gim)
blacklist amdgpu
----
update-initramfs -u

3.2- Editar la configuració per defecte de GRUB per habilitar IOMMU

vim /etc/default/grub
----
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
...
----
update-grub

4- Compilació del mòdul gim

El mòdul gim és el mòdul que farem servir per controlar la targeta gràfica.

cd MxGPU-Virtualization
./gim.sh
mkdir /lib/modules/<versió firepro>/misc
mv /lib/modules/<versió firepro>/GIM /lib/modules/<versió firepro>/misc/gim
depmod
nano /etc/modules # Fer que el mòdul es carregui a l'arrencada
----
...
gim
...
----

Un cop compilat, necessitem executar el següent:

reboot # Per aplicar tota la configuració de GRUB
modprobe gim
modprobe -r gim
nano /etc/gim_config # Ha de ser nano, la comanda vi no funcionarà
----
...
vf_num=16 # Això activarà els 16 nuclis de la GPU
...
----
modprobe gim
dmesg # Finalment, necessitem verificar que el mòdul gim s'ha carregat correctament, sense errors
lspci -vvv # Ara podem veure que la FirePro S7150 té tots els 16 nuclis activats