
Alexander - stock.adobe.com
Bureaux virtuels sur Hyper-V : comment les accélérer avec un GPU
Cet article explique comment configurer le mode GPU passthrough qui permet à une machine virtuelle d’accéder directement à la carte graphique présente dans le serveur hôte.
En tant qu’administrateur de bureaux virtuels, vous pouvez vous assurer que l’affichage de la VM de votre utilisateur distant sera accéléré par le GPU présent dans votre serveur.
La méthode varie en fonction du type de virtualisation que vous utilisez. LeMagIT avait précédemment décrit la méthode avec VMware. Cet article donne la marche à suivre sous Hyper-V, l’hyperviseur de Windows Server. Elle consiste à activer le mode GPU passthrough.
À noter qu’il existait autrefois sur Hyper-V une fonction RemoteFX pour lier un GPU physique du serveur à l’une de ses VM. Cette fonction a disparu à partir de Windows Server 2016.
La nouvelle méthode d’attribution d’un GPU à un bureau virtuel Hyper-V repose sur DDA, le système d’attribution de périphériques discrets (Discrete Device Assignment). DDA permet à une carte PCIe – en particulier les GPU et les SSD NVMe – d’être directement utilisable dans un bureau virtuel. Attention, cependant, tous les GPU ne sont pas compatibles DDA. Il est donc important de confirmer la prise en charge DDA d’un GPU avant de l’installer dans le serveur de bureaux virtuels.
Comment activer le mode GPU passthrough avec Hyper-V ?
La première toute étape en amont de l’activation du mode GPU passthrough consiste à définir Éteindre pour l’action d’arrêt automatique du bureau virtuel.
Une approche conseillée pour la suite de la configuration est de mettre le nom de la VM dans une variable VM$, car l’attribution d’un GPU se configure VM par VM, et il faudra donc à plusieurs reprises préciser de quelle VM on parle. Utiliser une variable permet donc de décliner la procédure pour d’autres VM en changeant juste au début la valeur de la variable.
Imaginons que votre VM s’appelle Demo. Ouvrez une session PowerShell en mode élevé et tapez cette commande :
$VM='Demo'
Activez ensuite le mode combinaison d’écriture du processeur, ce qui lui permet de donner la main au GPU. Voici la commande à saisir :
Set-VM $VM -GuestControlledCacheTypes $true
Ensuite, vous devrez déterminer l’emplacement du GPU. Le moyen le plus simple de le faire est d’ouvrir le Gestionnaire de périphériques sur le serveur Hyper-V, puis de localiser le GPU spécifique que vous prévoyez d’allouer. Normalement, le GPU sera répertorié dans la section Adaptateurs d’affichage du gestionnaire de périphériques. Si vous ne parvenez pas à localiser le GPU, assurez-vous d’avoir installé ses pilotes sur le système d’exploitation du serveur.
Ensuite, vous devrez faire un clic droit sur l’équipement et choisir la commande Propriétés dans le menu contextuel. Lorsque la fenêtre Propriétés s’ouvre, allez dans l’onglet Détails et sélectionnez l’option Chemins d’emplacement dans le menu déroulant Propriété. Maintenant, faites un clic droit sur la valeur qui commence par PCIROOT, puis choisissez la commande Copier dans le menu contextuel.

Une fois que vous avez copié l’emplacement du GPU dans le presse-papiers de Windows, retournez dans la session PowerShell et mettez cet emplacement dans une variable. La commande devrait ressembler à ceci, avec l’emplacement de votre GPU à la suite du signe = :
$Location = 'PCIROOT(D7)#PCI(0000)'
Vous remarquerez dans la commande ci-dessus que l’emplacement spécifié est plus court que l’emplacement PCIROOT réel. Souvent, vous devrez raccourcir l’emplacement pour n’utiliser que les deux premières valeurs, comme indiqué dans la commande ci-dessus.
La prochaine étape du processus consiste à configurer les valeurs limites pour la zone mémoire MMIO qui servira à communiquer avec le GPU. Vous devrez configurer cette zone pour chaque bureau virtuel.
Le système d’exploitation Windows réserve déjà un peu d’espace MMIO par défaut. Il définit la valeur basse à 128 Mo et la valeur haute à 512 Mo. Selon le GPU que votre bureau virtuel utilisera, cela pourrait être suffisant. Cependant, les GPU haut de gamme – dont certains modèles Nvidia – vous obligent à attribuer une zone MMIO supplémentaire.
Microsoft fournit un script de profilage machine que vous pouvez télécharger et exécuter, pour déterminer la quantité de MMIO dont votre GPU aura besoin. Une fois que vous savez combien de mémoire MMIO est nécessaire, il est temps d’attribuer cette zone MMIO au bureau virtuel qui utilisera le GPU. Par exemple, disons que vous devez définir la plage basse du MMIO à 512 Mo et la plage haute MMIO à 1 Go. Les commandes pour le faire ressembleraient à celles-ci :
Set-VM $VM -LowMemoryMappedIoSpace 512MB
Set-VM $VM -HighMemoryMappedIoSpace 1GB

Les dernières étapes du processus sont de dissocier le GPU du système d’exploitation du serveur, puis de l’associer à la machine virtuelle. La première étape consiste à revenir au gestionnaire de périphériques, à cliquer avec le bouton droit de la souris sur le périphérique, puis à choisir la commande Désactiver l’appareil dans le menu contextuel.
Maintenant que vous avez désactivé le GPU, il est temps de le démonter à l’aide de la commande suivante :
Dismount-VMHostAssignableDevice -force -LocationPath $Location
Maintenant que le GPU a été démonté, vous pouvez vérifier que Windows considère qu’il est assignable en utilisant cette commande :
Get-VMHostAssignableDevice
Cette commande devrait renvoyer un résumé des informations sur le périphérique. Vous devrez noter l’ID d’instance renvoyée par cette commande. Puis, entrez cette commande, en remplaçant <ID d’instance> par votre ID d’instance réelle :
Disable-PnpDevice -InstanceID <instance ID> -Confirm:$False
Maintenant, exécutez à nouveau la commande Get-VMHostAssignableDevice, mais, cette fois, en dirigeant sa sortie vers la commande Add-VMAssignableDevice. Voici ce qu’il faut taper :
Get-VMHostAssignableDevice | Add-VMHostAssignableDevice.
Lorsque vous y êtes invité, vous devrez entrer le nom de votre bureau virtuel. Si vous recevez une invite pour un nom de bureau virtuel supplémentaire, appuyez simplement sur Entrée.
À ce stade, le processus de configuration devrait être terminé. Démarrez votre bureau virtuel et assurez-vous que le GPU est répertorié dans le gestionnaire de périphériques du bureau virtuel. Ce faisant, vous pouvez procéder à l’installation des pilotes de périphériques GPU sur votre bureau virtuel.