Delen via


Grafische apparaten implementeren met discrete apparaattoewijzing

Meer informatie over het gebruik van discrete apparaattoewijzing (DDA) om een volledig PCIe-apparaat door te geven aan een virtuele machine (VM) met PowerShell. Hierdoor kunnen apparaten zoals NVMe-opslag of grafische kaarten met hoge prestaties worden geopend vanuit een VIRTUELE machine terwijl de systeemeigen stuurprogramma's van het apparaat kunnen worden toegepast. Zie Plannen voor het implementeren van apparaten met discrete apparaattoewijzing voor meer informatie over apparaten die werken en mogelijke gevolgen voor de beveiliging.

In dit artikel worden de stappen beschreven voor het gebruik van een apparaat met DDA:

  1. De VM configureren voor DDA
  2. Het apparaat ontkoppelen van de hostpartitie
  3. Het apparaat toewijzen aan de gast-VM

Vereiste voorwaarden

Voordat u DDA kunt gebruiken om grafische apparaten te implementeren, moet u het volgende hebben.

  • Een Hyper-V host met Windows Server 2016 of hoger.

  • Een VM met een van de volgende besturingssystemen:

    • Windows Server 2016 of hoger.

    • Windows 10 of hoger.

  • Bekijk het plan voor het implementeren van apparaten met discrete apparaattoewijzing om ervoor te zorgen dat uw hardware compatibel is met DDA.

    • Voer de SurveyDDA.ps1uit. PowerShell-script om te bepalen of de server juist is geconfigureerd. Het script geeft ook weer welke apparaten kunnen worden doorgegeven met behulp van discrete apparaattoewijzing.
  • Beheerdersrechten voor de Hyper-V host.

  • Hoewel niet vereist, als I/O-virtualisatie met één hoofdmap (SR-IOV) niet is ingeschakeld of ondersteund, kunnen er problemen ontstaan bij het gebruiken van DDA om grafische devices te implementeren.

De VM configureren voor DDA

De eerste stap in de oplossing is het oplossen van DDA-beperkingen voor de VM's.

  1. Meld u als beheerder aan bij de Hyper-V-host.

  2. Open een PowerShell-prompt met verhoogde bevoegdheid.

  3. Configureer de Automatic Stop Action vm om TurnOff in te schakelen met de volgende PowerShell-cmdlet:

    Set-VM -Name VMName -AutomaticStopAction TurnOff
    

VM-voorbereiding voor grafische apparaten

Sommige hardware presteert beter als de VIRTUELE machine op een bepaalde manier is geconfigureerd. Neem contact op met de hardwareleverancier voor meer informatie over of u de volgende configuraties voor uw hardware nodig hebt. Zie Plannen voor het implementeren van apparaten met discrete apparaattoewijzing en in dit blogbericht voor meer informatie.

  1. Schakel Write-Combining in op de CPU met behulp van de volgende cmdlet:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configureer de 32-bits geheugen toegewezen IO-ruimte (MMIO) met behulp van de volgende cmdlet:

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Configureer meer dan 32-bits MMIO-ruimte met behulp van de volgende cmdlet:

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Aanbeveling

    De weergegeven MMIO-ruimtewaarden zijn redelijke waarden die moeten worden ingesteld voor het experimenteren met één GPU. Als na het starten van de VIRTUELE machine een fout wordt gerapporteerd met betrekking tot onvoldoende resources, moet u deze waarden waarschijnlijk wijzigen. Zie Plannen voor het implementeren van apparaten met discrete apparaattoewijzingen voor meer informatie over het nauwkeurig berekenen van MMIO-vereisten.

Het apparaat ontkoppelen van de hostpartitie

Volg de instructies in deze sectie om het apparaat te ontkoppelen van de hostpartitie.

Het partitioneringsstuurprogramma installeren (optioneel)

DDA biedt hardwareleveranciers de mogelijkheid om een driver voor beveiligingsmitigatie met hun apparaten te leveren. Dit stuurprogramma is niet hetzelfde als het apparaatstuurprogramma dat is geïnstalleerd op de gast-VM. Het is aan de discretie van de hardwareleverancier om dit stuurprogramma te verstrekken. Maar als ze wel een stuurprogramma bieden, installeert u het voordat u het apparaat ontkoppelt van de hostpartitie. Neem contact op met de hardwareleverancier om te zien of ze een driver voor mitigatie hebben.

Als er geen partitioneringsstuurprogramma is opgegeven, moet u bij het ontkoppelen de -Force-optie gebruiken om de beveiligingswaarschuwing te omzeilen. Zie Plannen voor het implementeren van apparaten met discrete apparaattoewijzing voor meer informatie over de gevolgen voor de beveiliging.

Het locatiepad van het apparaat zoeken

Het PCI-locatiepad is vereist om het apparaat van de host te ontkoppelen en te koppelen. Een voorbeeld van een locatiepad ziet er als volgt uit: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000). Zie Plannen voor het implementeren van apparaten met discrete apparaattoewijzing voor meer informatie over het vinden van het locatiepad.

Het apparaat uitschakelen

Gebruik Apparaatbeheer of PowerShell om ervoor te zorgen dat het apparaat is uitgeschakeld.

Het apparaat ontkoppelen

Afhankelijk van of de leverancier een mitigatiedriver heeft geleverd, moet u de -Force optie gebruiken of niet, zoals hier getoond.

  • Als er een beperkingsstuurprogramma is geïnstalleerd, gebruikt u de volgende cmdlet:

    Dismount-VMHostAssignableDevice -LocationPath $locationPath
    
  • Als er geen beperkingsstuurprogramma is geïnstalleerd, gebruikt u de volgende cmdlet:

    Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
    

Het apparaat toewijzen aan de gast-VM

De laatste stap is het vertellen Hyper-V dat een virtuele machine toegang moet hebben tot het apparaat. Geef het locatiepad en de naam van de virtuele machine op.

Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName

Taken uitvoeren op de VIRTUELE machine

Nadat een apparaat is gekoppeld in een VIRTUELE machine, kunt u die VIRTUELE machine starten en communiceren met het apparaat alsof u op een bare-metalsysteem werkt. U kunt nu de stuurprogramma's van de hardwareleverancier installeren op de VIRTUELE machine en toepassingen kunnen de hardware zien. U kunt dit controleren door Apparaatbeheer te openen in de gast-VM en te zien dat de hardware beschikbaar is.

Een apparaat verwijderen en terugsturen naar de host

Als u het apparaat terug wilt zetten naar de oorspronkelijke staat, moet u de VIRTUELE machine stoppen en deze opdracht uitvoeren:

# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName

# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath

U kunt het apparaat vervolgens opnieuw inschakelen in Apparaatbeheer en het hostbesturingssysteem kan opnieuw communiceren met het apparaat.

Voorbeeld: een GPU koppelen aan een VIRTUELE machine

In dit voorbeeld wordt PowerShell gebruikt om een VIRTUELE machine met de naam ddatest1 te configureren om de eerste GPU te gebruiken die beschikbaar is door de fabrikant NVIDIA en toe te wijzen aan de VIRTUELE machine.

# 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

Problemen met het koppelen van een GPU oplossen

Als u een GPU doorgeeft aan een VM, maar Externe bureaubladservices of een toepassing de GPU niet herkent, controleer dan op de volgende veelvoorkomende problemen.

  • Zorg ervoor dat u de meest recente versie van het ondersteunde stuurprogramma van de GPU-leverancier installeert en dat het stuurprogramma geen fouten rapporteert. U kunt dit doen door de apparaatstatus in Apparaatbeheer te controleren.

  • Zorg ervoor dat op uw apparaat voldoende MMIO-ruimte is toegewezen binnen de VIRTUELE machine. Zie MMIO-ruimtevoor meer informatie.

  • Zorg ervoor dat u een GPU gebruikt die de leverancier ondersteunt voor gebruik in deze configuratie. Sommige leveranciers voorkomen bijvoorbeeld dat hun consumentenkaarten werken wanneer ze worden doorgegeven aan een VIRTUELE machine.

  • Zorg ervoor dat de toepassing ondersteuning biedt voor uitvoering binnen een VIRTUELE machine en dat de toepassing zowel de GPU als de bijbehorende stuurprogramma's ondersteunt. Sommige toepassingen hebben toegestane lijst met GPU's en omgevingen.

  • Als u de functie Extern bureaublad-sessiehost of Windows Multipoint Services op de gast gebruikt, moet u ervoor zorgen dat een specifieke groepsbeleidsvermelding is ingesteld om het gebruik van de standaard GPU toe te staan. Gebruik een groepsbeleidsobject dat is toegepast op de gast (of de editor voor lokaal groepsbeleid op de gast). Navigeer naar het volgende groepsbeleidsitem:

    Computerconfiguratie\Administratorsjablonen\Windows-onderdelen\Extern bureaublad-services\Extern bureaublad-sessiehost\Extern bureaublad-sessieomgeving\Hardwaregrafische adapters gebruiken voor alle sessies met Extern bureaublad-services.

    Stel de waarde groepsbeleid in op Ingeschakeld en start de VIRTUELE machine opnieuw op nadat u het beleid hebt toegepast.