Mon expérience avec le IGPU Passthrough Intel sous Proxmox 8
Bon alors je préfère prévenir, j’ai galéré.
J’ai vrai-ment beau-coup galéré.
Mais bon j’ai réussi ..
Tout à commencé quand j’ai acheté un petit minipc sous Intel N100 pour remplacer quelques Raspberry PI et autres (histoire de mutualiser les machines et économiser quelques prises électriques et réseaux).
Tout confiant, je me suis dit bon ok ca a l’air plutôt simple, eh bien que neni !
Pour les curieux, voici le boitier que j’ai pris : MiniPC
Je suis parti sur ce modèle car déjà j’avais envie de remplacer mon vieux PI3 qui faisait office de Recalbox pour quelque chose de plus performant donc j’avais besoin d’un petit GPU pas cher et qui consomme peu. Comme j’ai dit, je cherche à mutualiser, donc je suis parti sur une installation de Proxmox dessus.
De ce coté, vraiment aucun problème, c’est parti, partitions en ext4 etc. Aucun soucis sur ce petit minipc.
Mais qui dit jeux, dit aussi GPU c’est justement ce qui va nous intéresser, le GPU. Le iGPU pour être plus précis.
On va rentrer dans le but du sujet, le iGPU passthrough, c’est quoi ?
En gros, c’est de donné un accès exclusif à une VM au GPU de l’hôte et donc bénéficier de l’accélération graphique et tout ce qui va avec dans la machine virtuelle (on peut aussi le faire pour d’autres périphériques). Par contre, attention car si on fait ça, l’hôte ne voit plus de carte graphique donc pas de possibilité d’afficher la console du serveur par exemple. Seul moyen possible c’est de passer en SSH par exemple.
Note : La console web tourne toujours, pas de soucis de ce côté là, heureusement ;)
La procédure pour le N100 d’Intel est un peu différente de ce que propose le site officiel de Proxmox.
Voici les actions que j’ai du faire pour avoir mon iGPU avec HDMI :
- On doit modifier le fichier « /etc/default/grub » et plus précisement la ligne GRUB_CMDLINE_LINUX_DEFAULT
- GRUB_CMDLINE_LINUX_DEFAULT= »quiet intel_iommu=on iommu=pt pcie_acs_override=downstream »
- intel_iommu=on : Cela active l’IOMMU d’Intel. L’IOMMU est une unité de gestion de mémoire d’entrée/sortie, principalement utilisée dans des scénarios de virtualisation pour permettre au système hôte et aux machines virtuelles de partager les ressources matérielles.
- pcie_acs_override=downstream : Cela concerne le service de contrôle d’accès PCIe (Access Control Service). Ce paramètre peut être utile lorsque plusieurs machines virtuelles utilisent le même périphérique PCIe, généralement pour isoler les machines virtuelles au niveau matériel.
- GRUB_CMDLINE_LINUX_DEFAULT= »quiet intel_iommu=on iommu=pt pcie_acs_override=downstream »
- On execute la commande suivante :
- update-grub
- On doit éditer le fichier « /etc/modules » afin de charger au boot les modules qui nous intéresse :
- vfio
- vfio_iommu_type1
- vfio_pci
- vfio_virqfd
- vfio : Ceci est le module principal de VFIO (Virtual Function I/O). VFIO est un cadre qui fournit un moyen sécurisé et modulaire d’accéder au matériel, souvent utilisé dans la virtualisation.
- vfio_iommu_type1 : Il s’agit du pilote IOMMU de VFIO, qui prend en charge le Type 1 (Virtualisation d’E/S).
- vfio_pci : Ce module est un pilote VFIO pour les dispositifs PCI/PCIe.
- vfio_virqfd : C’est un module qui prend en charge les interruptions virtuelles VFIO.
- Une fois l’ajout effectué dans le fichier, on exécute :
- update-initramfs -u -k all
- On ajoute le driver par défaut à la blocklist :
- echo « blacklist i915 » >> /etc/modprobe.d/pve-blacklist.conf
- echo « blacklist snd_hda_intel » >> /etc/modprobe.d/pve-blacklist.conf
- On doit ajouter maintenant la liaison entre le driver et son matériel :
- On détecte en premier avec :
- lspci -n | grep -E « 0300 »
- On ajoute au fichier « /etc/modprobe.d/vfio.conf » les informations suivantes en récupérant l’ID 8086:46d1 donné par la commande précédente
- Il doit etre de cette forme :
- On détecte en premier avec :
- Au besoin, executer la ligne suivante :
- echo “options vfio_iommu_type1 allow_unsafe_interrupts=1” >> /etc /modprobe.d/iommu_unsafe_interrupts.conf
- On execute la commande suivante :
- update-initramfs -u
- Reboot
Bon là on est bon pour la partie hôte Proxmox, maintenant on va voir la partie configuration de la machine Windows et ca se complique un peu. On part du fait que le machine windows est déjà installée avec ses Virtio à jour :
- On va avoir besoin déjà de deux fichiers à télécharger sur le serveur proxmox :
- Une fois ces fichiers en notre possession on les copie à l’emplacement suivant « /usr/share/kvm/ ».
- La machine va devoir avoir les configurations suivantes configurée de cette manière :
- machine: pc-i440fx-8.1
- hostpci0: 0000:00:02,legacy-igd=1,romfile=gen12_igd.rom
- Il s’agit de la carte vidéo iGPU
- hostpci1: 0000:00:1f.3,romfile=IntelGopDriver-HWN100.rom
- Il s’agit du son Intel qui servira dans le HDMI
- vga: none
- args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on -debugcon file:/root/igd_debug.log -global isa-debugcon.iobase=0x402
- la partie « -debugcon file:/root/igd_debug.log -global isa-debugcon.iobase=0x402 » est facultative, elle sert surtout au debug
- Exemple avec la configuration de ma machine :
Et voilà, il ne reste plus qu’à tester et à installer la dernière version des pilotes Intel ARC dans la machine virtuelle.
Commentaires récents