Déployer des appareils graphiques à l’aide de l’attribution d’appareils en mode discret
Apprenez à utiliser Discrete Device Assignment (DDA) pour passer un appareil PCIe entier dans une machine virtuelle (VM) avec PowerShell. Cela permet un accès performant à des appareils tels que le stockage NVMe ou les cartes graphiques à partir d’une machine virtuelle tout en étant en mesure d’appliquer des pilotes natifs des appareils. Pour plus d’informations sur les appareils compatibles et les implications de sécurité possibles, consultez Planifier le déploiement d’appareils à l’aide de l’attribution d’appareils en mode discret.
Cet article vous présente les étapes à suivre pour utiliser un appareil avec DDA :
- Configurer la machine virtuelle pour DDA
- Démonter l’appareil de la partition hôte
- Affecter l’appareil à la machine virtuelle invitée
Prérequis
Avant de pouvoir utiliser DDA pour déployer des appareils graphiques, vous devez disposer des éléments suivants :
Un hôte Hyper-V exécutant Windows Server 2016 ou une version ultérieure.
Une machine virtuelle exécutant l'un des systèmes d'exploitation suivants :
Windows Server 2016 ou ultérieur.
Windows 10 ou version ultérieure.
Examinez le plan de déploiement des appareils à l'aide de l'attribution discrète des appareils pour vous assurer que votre matériel est compatible avec l'attribution discrète des appareils.
- Exécutez le script PowerShell SurveyDDA.ps1. PowerShell pour déterminer si le serveur est configuré correctement. Le script affiche également les appareils qui peuvent être passés-through en utilisant Discrete Device Assignment.
Des droits d'administration sur l'hôte Hyper-V.
(Facultatif) Bien que cela ne soit pas obligatoire, si la virtualisation d'E/S à racine unique (SR-IOV) n'est pas activée ou prise en charge, vous risquez de rencontrer des problèmes lorsque vous utilisez DDA pour déployer des appareils graphiques.
Configurer la machine virtuelle pour DDA
La première étape de la solution consiste à traiter les restrictions DDA aux machines virtuelles.
Connectez-vous à l'hôte Hyper-V en tant qu'administrateur.
Ouvrez une invite PowerShell avec élévation de privilèges.
Configurez la
Automatic Stop Action
machine virtuelle pour activer TurnOff avec l’applet de commande PowerShell suivante :Set-VM -Name VMName -AutomaticStopAction TurnOff
Préparation des machines virtuelles pour les appareils graphiques
Certains matériels fonctionnent mieux si la machine virtuelle est configurée d’une certaine manière. Pour plus d’informations sur la nécessité des configurations suivantes pour votre matériel, contactez le fournisseur de matériel. Pour plus d’informations, consultez Planifier le déploiement d’appareils à l’aide de l’attribution d’appareils en mode discret et sur ce billet de blog.
Activez la combinaison d’écriture sur l’UC à l’aide de l’applet de commande suivante :
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Configurez l'espace MMIO (memory mapped IO) 32 bits à l'aide de la cmdlet suivante :
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
Configurez un espace MMIO supérieur à 32 bits à l’aide de l’applet de commande suivante :
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
Conseil
Les valeurs d’espace MMIO affichées sont des valeurs raisonnables à définir pour expérimenter avec un seul GPU. Si, après avoir démarré la machine virtuelle, l’appareil signale une erreur liée à des ressources insuffisantes, vous devrez probablement modifier ces valeurs. Pour plus d’informations sur la façon de calculer précisément les exigences MMIO, consultez Planifier le déploiement d’appareils à l’aide d’une attribution d’appareils en mode discret .
Démonter l’appareil de la partition hôte
Suivez les instructions de cette section pour démonter l’appareil de la partition hôte.
Installer le pilote de partitionnement (facultatif)
Le DDA permet aux fournisseurs de matériel de fournir un pilote d’atténuation de sécurité avec leurs appareils. Ce pilote n’est pas identique au pilote de périphérique installé dans la machine virtuelle invitée. C’est à la discrétion du fournisseur de matériel de fournir ce pilote. Mais s'ils fournissent un pilote, installez-le avant de démonter l'appareil de la partition hôte. Contactez le fournisseur de matériel pour vérifier s’ils possèdent un pilote d’atténuation.
Si aucun pilote de partitionnement n’est fourni, lors du démontage, vous devez utiliser l’option -Force
pour contourner l’avertissement de sécurité. Pour plus d’informations sur les implications en matière de sécurité, consultez Planifier le déploiement d’appareils à l’aide de l’attribution d’appareils en mode discret.
Localiser le chemin d’emplacement de l’appareil
Le chemin d’accès à l’emplacement PCI est nécessaire pour démonter et monter l’appareil à partir de l’hôte. Un exemple de chemin d’accès à l’emplacement ressemble à ce qui suit : PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
. Pour plus d’informations sur la localisation du chemin d’accès à l’emplacement, consultez Planifier le déploiement d’appareils à l’aide d’une attribution d’appareils en mode discret.
Désactivez l’appareil
Utilisez le Gestionnaire de périphériques ou PowerShell pour vous assurer que l’appareil est désactivé .
Démonter l’appareil
Selon que le fournisseur a fourni un pilote d’atténuation, vous devez utiliser l’option -Force
ou non, comme indiqué ici :
Si un pilote d’atténuation a été installé, utilisez l’applet de commande suivante :
Dismount-VMHostAssignableDevice -LocationPath $locationPath
Si aucun pilote d’atténuation n’a pas été installé, utilisez l’applet de commande suivante :
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
Attribuer l’appareil à la machine virtuelle invitée
La dernière étape consiste à indiquer à Hyper-V qu’une machine virtuelle doit avoir accès à l’appareil. Spécifier le chemin d’accès à l’emplacement et le nom de la machine virtuelle.
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
Effectuer des tâches sur la machine virtuelle
Une fois qu’un appareil est monté avec succès dans une machine virtuelle, vous pouvez désormais démarrer cette machine virtuelle et interagir avec l’appareil comme si vous étiez un système nu. Vous pouvez désormais installer les pilotes du fournisseur de matériel dans la machine virtuelle et les applications seront en mesure de voir le matériel. Vous pouvez vérifier cela en ouvrant le gestionnaire de périphériques dans la machine virtuelle invitée et vérifier que le matériel s’affiche.
Supprimer un appareil et le retourner à l’hôte
Si vous souhaitez rétablir l’état d’origine de l’appareil, vous devez arrêter la machine virtuelle et exécuter cette commande :
# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath
Vous pouvez ensuite réactiver l’appareil dans le gestionnaire de périphériques et le système d’exploitation hôte sera en mesure d’interagir à nouveau avec l’appareil.
Exemple - Montage d'un GPU dans une machine virtuelle
Cet exemple démontre comment utiliser PowerShell pour configurer une machine virtuelle nommée ddatest1 afin de prendre le premier GPU disponible du fabricant NVIDIA et de l’attribuer à la machine virtuelle.
# Configure the VM for a Discrete Device Assignment
$vm = "ddatest1"
# Set automatic stop action to TurnOff
Set-VM -Name $vm -AutomaticStopAction TurnOff
# Enable Write-Combining on the CPU
Set-VM -GuestControlledCacheTypes $true -VMName $vm
# Configure 32 bit MMIO space
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
# Configure Greater than 32 bit MMIO space
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm
# Find the Location Path and disable the Device
# Enumerate all PNP Devices on the system
$pnpdevs = Get-PnpDevice -presentOnly
# Select only those devices that are Display devices manufactured by NVIDIA
$gpudevs = $pnpdevs | Where-Object {$_.Class -like "Display" -and $_.Manufacturer -like "NVIDIA"}
# Select the location path of the first device that's available to be dismounted by the host.
$locationPath = ($gpudevs | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths).data[0]
# Disable the PNP Device
Disable-PnpDevice -InstanceId $gpudevs[0].InstanceId
# Dismount the Device from the Host
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
# Assign the device to the guest VM.
Add-VMAssignableDevice -LocationPath $locationPath -VMName $vm
Résoudre les problèmes liés au montage d’un GPU
Si vous montez un GPU dans une machine virtuelle mais que Remote Desktop Services ou une application ne reconnaît pas le GPU, vérifiez les problèmes courants suivants.
Assurez-vous que vous installez la version la plus récente du pilote pris en charge par le fournisseur du GPU et que le pilote ne signale pas d'erreurs. Pour ce faire, vérifiez l’état de l’appareil dans gestionnaire de périphériques.
Assurez-vous que votre appareil dispose d’un espace MMIO suffisant alloué au sein de la machine virtuelle. Pour plus d’informations, consultez Espace MMIO.
Vérifiez que vous utilisez un GPU que le fournisseur prend en charge dans cette configuration. Par exemple, certains fournisseurs empêchent leurs cartes de consommation de fonctionner lorsqu’elles sont passées à une machine virtuelle.
Assurez-vous que l’application prend en charge l’exécution à l’intérieur d’une machine virtuelle et que l’application prend en charge à la fois le GPU et ses pilotes associés. Certaines applications ont une liste d’autorisation de GPUs et d’environnements.
Si vous utilisez le rôle Hôte de session Bureau à distance ou Windows Multipoint Services sur l’invité, vous devez obligatoirement vous assurer qu’une entrée de stratégie de groupe spécifique est définie pour autoriser l’utilisation du GPU par défaut. Utilisez un objet de stratégie de groupe appliqué à l'invité (ou l'éditeur de stratégie de groupe local sur l'invité). Naviguez jusqu'à l'élément de stratégie de groupe suivant :
Configuration ordinateur\Modèles d’administrateur\Composants Windows\Services Bureau à distance\Hôte de session Bureau à distance\Environnement de session à distance\Utilisation des cartes graphiques matérielles pour toutes les sessions des services Bureau à distance .
Définissez la valeur de la stratégie de groupe sur Activé, puis redémarrez la machine virtuelle après avoir appliqué la stratégie.