Virtualiser un client sur Proxmox VE
Guide pour comprendre comment virtualiser une instance bureautique avec GPU Passthrough sur Proxmox VE.
Au sommaire :
- 1-Objectif du tutoriel
- 2-Prérequis
- 3-Installation de Proxmox VE
- 4-Configuration du PCI Passthrough
- 5-Installation de ReviOS
1-Objectif du tutoriel
Je vais vous montrer comment réutiliser un poste bureautique et lui redonner une seconde jeunesse en lui installant PVE.
L'idée est qu'au lieu d'utiliser PVE en mode serveur, nous allons l'utiliser en mode client en créant une machine virtuelle avec un Windows 11 allégé (ReviOS) qui accédera à la carte graphique et aux périphériques USB via une passerelle (USB/PCI Passthrough).
Avec un démarrage automatique de la machine virtuelle à l'allumage du poste et une interface web pour administrer le tout, vous ne verrez aucune différence malgré les 3-5% de perte de performances en moins.
Le tutoriel est basé sur le poste que j'ai préparer pour mes neveux pour qu'ils puissent jouer à leur jeux vidéos favoris.
Sachez également que la méthode que j'utilise est pas du tout nouvelle, elle est juste peu connue du grand public
Elle est très utilisé en entreprise, notamment chez ceux qui font de la CAO (conception assistée par ordinateur) et qui utilisent des cartes professionnelles de type Quadro/Tesla avec les solutions VMware.
La fonctionnalité "PCI Passthrough" sont disponibles depuis peu sur les cartes commerciales et pour la petite anecdote, c'est que depuis 2020 que Nvidia l'autorise. Il fallait tricher et faire passer des arguments à sa machine virtuelle pour que la carte graphique soit dupée.
2-Prérequis
Il vous faut donc :
- Un serveur sous Proxmox VE version 8.0.4 (à la date du 09/08/2023)
- Un processeur et un chipset compatible Intel VT-d (passthrough) et Intel VT-x (virtualisation)
- Les instructions activés dans les paramètres du BIOS
- Une machine virtuelle sous Windows 11
Pour les besoins de ce tutoriel, j'ai utiliser deux Dell Optiplex qui disposent des instructions Intel-VT-d au niveau du chipset et du processeur.
Caractéristiques des postes :
- Dell Optiplex 7020 (E3-1245 v3 jumeau du i7-4770 4c/8c 3,4 Ghz, RX 6400, 16 Go DDR3, SSD 240 Go, disque dur de 1 To).
- Dell Optiplex 790 (E3-1270 équivalent i7-2600 4c/8c 3,4 Ghz sans IGPU, GTX 950, 8 Go DDR3, SSD 240 Go, disque dur de 500 Go).
3-Installation de Proxmox VE
4-Configuration du PCI passthrough
6-Installation de ReviOS
Pour mes neveux, il était hors de question d'installer une version standard de Windows qui est beaucoup trop intrusive et gourmande en ressources.
Après quelques recherches, j'ai opter pour ReviOS qui est très bien supporté en machine virtuelle contrairement à TinyOS.
ReviOS supprime les services inutiles sans sacrifier la stabilité du système. améliore le framerate des jeux et désactive UWP/Appx, Cortana ainsi que Windows Update.
Pour en savoir plus.
Téléchargez l'ISO de reviOS puis ajoutez là sur votre serveur en allant dans Datacenter\<nomduserveur>\local\ISO Images\Upload puis "Select File".
Ensuite, créez une machine virtuelle et donnez lui un nom.
Dans "Use CD/DVD disk image file 'iso", sélectionnez votre image. Si vous êtes sur le stockage par défaut, elles sont stockés dans "local".
Par défaut, "Guest OS" est paramétré sur Microsoft Windows et 11/2022.
Ensuite, activez "Qemu Agent" et sélectionnez "local-lvm" pour stocker la partition EFI et le module TPM 2.0, vous savez, le module qui vous empêche d'installer Windows 11 sur des postes plus anciens. Ici, vous n'aurez rien à craindre.
Qemu Agent est comme son nom l'indique l'agent de liaison de l'émulateur QEMU. Il est utile pour envoyer des informations comme l'adresse IP ainsi que pour démarrer ou éteindre la machine virtuelle.
Par défaut, PVE sélectionne le bios OVMF (Open Virtual Machine Firmware) qui est le portage open-source du standard UEFI et le profil machine q35 qui est plus moderne que le i440fx. Il est obligatoire pour transmettre un périphérique physique (PCI passthrough).
Également, PVE sélectionne par défaut VirtIO SCSI comme contrôleur SCSI qui nous sera utile lorsqu'on utilisera les pilotes de para-virtualisation. Pour en savoir plus :
Dans "Cache", sélectionnez "Write back" pour de meilleures performances et "SCSI" dans "Bus/Device" car il remplace VirtIO Block qui est déprécié et IDE/SATA ne sont pas assez performants en lecture/écriture,
Sélectionnez également "SSD emulation" pour indiquer à la machine virtuelle quelle tourne sur un SSD et non un disque dur, cela permettra d’allonger la durée de vie du SSD. Pensez aussi à activer "Discard" pour une meilleure gestion du provisionnement dynamique.
Sur mes deux postes, j'ai un processeur 4c/8t donc si vous êtes dans le même cas que moi, dans "Cores :
- Ajoutez 4 cores si vous comptez lancez d'autres services dans PVE
- Ajoutez 8 cores si vous souhaitez juste utiliser la machine virtuelle Windows
J'ai vu des différences de performances notamment lorsque je souhaitait jouer à l'émulateur RPCS3. En passant de 4 à 8 cores, je n'ai plus eu de ralentissements.
Dans "Type", changez la valeur par défaut "kvm64" par "host". Le mode "host" permet un accès direct au CPU sans couche d'abstraction. Il est obligatoire pour Windows car sans le mode "host", beaucoup d'applications risque de planter.
Dans "Memory", indiquez au minimum 4096 Mib (4 Go de mémoire vive) et 8 si vous avez la possibilité.
J'ai que 8 Go de mémoire vive et étant donné qu'il va servir que pour Windows, j'indique 6144 Mib.
Privilégier la mémoire fixe sans balloon pour Windows car Il est notoire que cette option est facteur d'instabilité et pose des soucis de performance (pour Linux, la mémoire dynamique ne pose aucun soucis).
Voir le lien ci-dessous pour plus d’informations :
Dans "Model", sélectionnez le pilote de para-virtualisation VirtIO pour la carte réseau. La carte ne sera pas reconnu par défaut par Windows, nous verront comment l'installer à l'avance.
Par défaut, le pare-feu du serveur est activé et il est connecté au pont vmbr0 (pont par défaut de Proxmox VE).
Validez la configuration en cliquant sur "Finish".
Ensuite, téléchargez l'image contenant les pilotes de VirtIo à cette adresse :
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
Et comme l'ISO de ReviOS, ajoutez là dans votre serveur en allant dans Datacenter\<nomduserveur>\local\ISO Images\Upload\Select File et cliquez sur "Upload".
Il vous faudra également ajouter un lecteur CD pour pouvoir monter les pilotes VirtIO. Allez dans Hardware\Add\CD/DVD Drive
Sélectionnez le lieu de stockage (local par défaut) et votre image de VirtIO.
Au lieu d'ajouter un à un les périphériques USB, nous allons attribuer les ports USB physiques du poste exclusivement à la machine virtuelle.
Ils sont facilement repérables. Pour ma part c'est les périphériques 00:1a et 00:1d que je dois ajouter.
Enfin, pensez bien à activer le démarrage automatique de la machine virtuelle.
Maintenant que tout est fin prêt, passons à l'étape suivante.
Démarrez la machine virtuelle
Appuyez sur n'importe quelle touche pour démarrer le DVD.
Puis validez les Conditions générales d'utilisation (CGU).
Vous remarquerez que le stockage n'est pas reconnu. Normal car vous avez choisis le bus/device SCSI sous VirtIO et Windows n'embarque pas les pilotes VirtIO en natif. Il va donc falloir installer le pilote lié au stockage via le deuxième lecteur monté dans la machine virtuelle.
Cliquez sur "Load driver" puis sur "Browse".
Naviguez dans le lecteur CD, allez dans le dossier "D:\netKVM\w11\amd64" et cliquez sur "OK". Cela va charger le pilote de la carte réseau.
Note : le pilote prend en comptes les cartes 10 Gbits/s, vous allez vous régaler.
Cliquez sur "Next" pour installer le pilote.
De nouveau, naviguez dans le lecteur CD et allez dans le dossier "D:\vioscsi\w11\amd64" et cliquez sur "OK". Cela va charger le pilote du disque dur.
Cliquez sur "Next" pour installer le pilote.
Enfin, sélectionnez le disque puis cliquez sur "Next".
La machine virtuelle ayant redémarré, arrivé à cet écran, sélectionnez "France" comme pays puis à l'écran suivant, sélectionnez "French" si vous avez un clavier AZERTY.
Passez cette étape (ajout d'un deuxième clavier).
Indiquez le nom et le mot de passe du compte administrateur (admin pour l'exemple).
note : pour ma part, j'indique uniquement le nom et aucun mot de passe. Les neveux n'étant pas très doués en informatique, le poste dois démarrer automatiquement et afficher le bureau.
ReviOS consomme seulement 11,4 Go d'espace disque, à des années lumières d'un Windows standard.
Il vous faut installer les pilotes VirtIO pour que Windows tourne de manière optimale.
Tout d'abord, allez à la racine du lecteur CD contenant VirtIO et cliquez sur "virtio-win-gt-x64.msi".
Cliquez sur "Next" et cochez les CGU.
Cliquez sur "Next" et "Install".
Attendez que l'installation se termine.
Cliquez sur "Finish".
Les pilotes sont bien installés donc les plus importants sont :
- vioserial (périphériques PCI ou PCI Simple Communication Controller, indispensable pour le PCI passthrough),
- NetKVM (carte réseau ou Ethernet Controller),
- Balloon (partage de la mémoire vive),
Ensuite, installez l'agent Qemu. Cela permettra à PVE de récupérer de précieuse informations comme l'adresse IP de votre machine virtuelle.
Il permet également de recevoir les instructions du serveur comme les commandes "shutdown" et "reboot".
On vois que Qemu-guest-agent envoie bien les information de la machine virtuelle au serveur hôte.
ReviOS consomme 1,3 Go de mémoire vive après installation du service "Balloon"
Dans "Task Manager", si l'option "SSD Emulation" n'est pas activé, le disque est reconnu en tant que HDD (disque dur mécanique) et non pas en tant que SSD à mémoire flash, ce qui fait que les lectures/écritures sont beaucoup plus fréquentes et risque de diminuer la durée de vie du disque physique donc pensez bien à suivre scrupuleusement le tutoriel.
Ensuite, il vous faudra installer le dernier pilote vidéo à jour.
Après l'installation du pilote, arrêtez la machine virtuelle, allez dans les paramètres de la machine virtuelle et dans "Display", choisissez "none" pour ne pas utiliser VNC, SPICE et cie.
Désactivez également l’option « USB Tablet Device » pour réduire la charge processeur.
Démarrez de nouveau la machine virtuelle, vous devriez avoir le signal vidéo à l'écran.
Pensez bien à installer OpenSSH Server, Winget et Chocolatey qui vous seront utiles par la suite.
Pour ne pas alourdir le tutoriel, référez-vous à celui-ci (partie 4, optimisations).
Si vous avez installer Chocolatey, installez les paquets suivants.
choco install vcredist-all directx dotnet-all steam epicgameslauncher goggalaxy
Voici les liens pour EA Play et Ubisoft Connect (soucis avec Chocolatey).
Donc ça c'est si vous êtes dans la même optique que moi, c'est à dire préparer un PC dédié aux jeux-vidéos.
Enfin, nul besoin de Teamviewer pour prendre la main à distance sur le poste si mes neveux ont un soucis. J'installe Parsec qui permet de streamer ses jeux à distance.
Note : il faut que votre carte graphique dispose d'un encodeur matériel donc dans mon cas, seule la GTX 950 en dispose.
Pour finir, référez-vous à ce tutoriel si vous souhaitez ajouter un disque dur SATA ou USB.
l