Bereitstellen von Grafikgeräten mithilfe diskreter Gerätezuweisung (Discrete Device Assignment, DDA)
Erfahren Sie, wie Sie mithilfe von Discrete Device Assignment (DDA) ein gesamtes PCIe-Gerät mit PowerShell an eine virtuelle Maschine (VM) übergeben. Dies ermöglicht einen leistungsstarken Zugriff auf Geräte wie den NVMe-Speicher oder auf Grafikkarten von einer VM aus, wobei die nativen Treiber des Geräts genutzt werden können. Weitere Informationen zu funktionierenden Geräten und möglichen Sicherheitsauswirkungen, finden Sie unter Planen der Bereitstellung von Geräten mithilfe diskreter Gerätezuweisung.
Dieser Artikel führt Sie durch die Schritte zur Verwendung eines Geräts mit DDA:
- Konfigurieren der VM für DDA
- Aufheben der Einbindung des Geräts in die Hostpartition
- Zuweisen des Geräts zur Gast-VM
Voraussetzungen
VBevor Sie DDA zum Bereitstellen von Grafikgeräten verwenden können, müssen Sie über Folgendes verfügen.
Ein Hyper-V-Host, auf dem Windows Server 2016 oder höher ausgeführt wird.
Eine VM, auf der eines der folgenden Betriebssysteme ausgeführt wird:
Windows Server 2016 oder höher.
Windows 10 oder höher
Lesen Sie den Abschnitt Plan zur Bereitstellung von Geräten mit diskreter Gerätezuweisung, um sicherzustellen, dass Ihre Hardware mit DDA kompatibel ist.
- Führen Sie das PowerShell-Skript SurveyDDA.ps1. aus, um festzustellen, ob der Server richtig konfiguriert ist. Das Skript zeigt auch an, welche Geräte mithilfe der diskreten Gerätezuweisung weitergeleitet werden können.
Administratorrechte für den Hyper-V-Host.
(Optional) Obwohl nicht erforderlich, können Probleme auftreten, wenn Sie DDA zum Bereitstellen von Grafikgeräten verwenden, wenn Single Root I/O Virtualization (SR-IOV) nicht aktiviert oder unterstützt wird.
Konfigurieren der VM für DDA
Der erste Schritt zur Lösung besteht darin, DDA-Einschränkungen für die VMs zu beheben.
Melden Sie sich als Administrator beim Hyper-V-Host an.
Öffnen Sie eine PowerShell-Eingabeaufforderung mit erhöhten Rechten.
Konfigurieren Sie die
Automatic Stop Action
eines virtuellen Computers, um TurnOff mit dem folgenden PowerShell-Cmdlet zu aktivieren:Set-VM -Name VMName -AutomaticStopAction TurnOff
VM-Vorbereitung für Grafikgeräte
Bestimmte Hardware funktioniert besser, wenn der virtuelle Computer auf eine bestimmte Weise konfiguriert ist. Wenn Sie Details dazu benötigen, ob die folgenden Konfigurationen für Ihre Hardware erforderlich sind, wenden Sie sich bitte an den Hardwarehersteller. Weitere Details finden Sie unter Planen der Bereitstellung von Geräten mit diskreter Gerätezuweisung und in diesem Blogbeitrag.
Aktivieren Sie Write-Combining auf der CPU mithilfe des folgenden Cmdlets:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Konfigurieren Sie den 32-Bit-MMIO-Speicherplatz (Memory Mapped IO) mit dem folgenden Cmdlet:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
Konfigurieren Sie den Bereich oberhalb des 32-Bit-MMIO-Bereichs mithilfe des folgenden Cmdlets:
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
Tipp
Die oben genannten MMIO-Bereichswerte sind vernünftige Werte für das Experimentieren mit einer einzelnen GPU. Wenn das Gerät nach dem Starten der VM einen Fehler im Zusammenhang mit unzureichenden Ressourcen meldet, müssen Sie diese Werte wahrscheinlich ändern. Weitere Informationen zur genauen Berechnung der MMIO-Anforderungen finden Sie unter Planen der Bereitstellung von Geräten mithilfe diskreter Gerätezuweisung.
Aufheben der Einbindung des Geräts in der Hostpartition
Folgen Sie den Anweisungen in diesem Abschnitt, um die Bereitstellung des Geräts in der Hostpartition aufzuheben.
Installieren des Partitionierungstreibers (optional)
Das DDA bietet Hardwareanbietern die Möglichkeit, zusammen mit ihren Geräten einen Treiber zur Bedrohungsminderung bereitzustellen. Dieser Treiber ist nicht mit dem Gerätetreiber identisch, der auf der Gast-VM installiert wird. Die Entscheidung, diesen Treiber bereitzustellen, liegt beim Hardwareanbieter. Wenn sie jedoch einen Treiber bereitstellen, installieren Sie ihn, bevor Sie die Bereitstellung des Geräts von der Hostpartition aufheben. Wenden Sie sich an den Hardwarehersteller, um zu erfahren, ob ein Treiber zur Bedrohungsminderung verfügbar ist.
Wenn kein Partitionierungstreiber bereitgestellt wird, müssen Sie während der Aufhebung der Einbindung die Option „-Force
“ verwenden, um die Sicherheitswarnung zu umgehen. Weitere Informationen über die möglichen Sicherheitsauswirkungen, finden Sie unter Planen der Bereitstellung von Geräten mithilfe diskreter Gerätezuweisung.
Suchen des Speicherortpfads des Geräts
Der PCI-Speicherortpfad ist für die Einbindung des Geräts in den Host und die Aufhebung erforderlich. Ein beispielhafter Speicherortpfad sieht folgendermaßen aus: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
. Weitere Informationen zum Suchen des Speicherortpfads finden Sie unter Planen der Bereitstellung von Geräten mithilfe diskreter Gerätezuweisung.
Deaktivieren des Geräts
Vergewissern Sie sich mithilfe des Geräte-Managers oder von PowerShell, dass das Gerät deaktiviert ist.
Aufheben der Geräteeinbindung
Je nachdem, ob der Anbieter einen Treiber zur Bedrohungsminderung bereitgestellt hat, müssen Sie entweder die Option „-Force
“ verwenden oder nicht, wie hier gezeigt wird:
Wenn ein Treiber zur Bedrohungsminderung installiert wurde, verwenden Sie das folgende Cmdlet:
Dismount-VMHostAssignableDevice -LocationPath $locationPath
Wenn kein Treiber zur Bedrohungsminderung installiert wurde, verwenden Sie das folgende Cmdlet:
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
Zuweisen des Geräts zur Gast-VM
Der letzte Schritt besteht darin, Hyper-V mitzuteilen, dass eine VM Zugriff auf das Gerät haben soll. Geben Sie den Speicherortpfad und den Namen der VM an.
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
Ausführen von Aufgaben auf der VM
Nachdem ein Gerät erfolgreich in eine VM eingebunden wurde, können Sie diese VM starten und mit dem Gerät interagieren, als ob Sie es auf einem Bare-Metal-System ausgeführen würden. Sie können jetzt die Treiber des Hardwareherstellers auf der VM installieren, und Anwendungen können die Hardware erkennen. Sie können dies überprüfen, indem Sie den Geräte-Manager auf der Gast-VM öffnen und sehen, dass die Hardware jetzt angezeigt wird.
Entfernen eines Geräts und Zurückgeben an den Host
Wenn Sie das Gerät wieder in den ursprünglichen Zustand versetzen möchten, müssen Sie die VM beenden und folgenden Befehl erteilen:
# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath
Anschließend können Sie das Gerät im Geräte-Manager erneut aktivieren, und das Hostbetriebssystem kann wieder mit dem Gerät interagieren.
Beispiel – Mounten einer GPU auf einer VM
In diesem Beispiel verwenden wir PowerShell, um eine VM mit dem Namen ddatest1 zu konfigurieren, um die erste vom Hersteller NVIDIA verfügbare GPU auszuwählen und sie der VM zuzuweisen.
# 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
Behandeln von Problemen beim Einbinden einer GPU
Wenn Sie eine GPU an eine VM übergeben, Remotedesktopdienste oder eine Anwendung die GPU jedoch nicht erkennt, prüfen Sie, ob die folgenden häufigen Probleme vorliegen.
Stellen Sie sicher, dass Sie die neueste Version des vom GPU-Anbieter unterstützten Treibers installieren und dass der Treiber keine Fehler meldet. Sie können dies tun, indem Sie den Gerätestatus im Geräte-Manager überprüfen.
Vergewissern Sie sich, dass Ihrem Gerät genügend MMIO-Speicherplatz innerhalb der VM zugeordnet ist. Weitere Informationen finden Sie unter MMIO-Bereich.
Achten Sie darauf, eine GPU zu verwenden, deren Einsatz in dieser Konfiguration vom Anbieter unterstützt wird. Beispielsweise blockieren einige Anbieter die Nutzung ihrer Consumerkarten, wenn sie an eine VM übergeben werden.
Vergewissern Sie sich, dass die Anwendung die Ausführung innerhalb einer VM unterstützt und dass die Anwendung sowohl die GPU als auch die zugehörigen Treiber unterstützt. Für manche Anwendungen bestehen Positivlisten mit GPUs und Umgebungen.
Wenn Sie die Rolle „Remotedesktop-Sitzungshost“ oder „Windows Multipoint Services“ auf dem Gast verwenden, müssen Sie sicherstellen, dass ein bestimmter Gruppenrichtlinieneintrag festgelegt ist, um die Verwendung der Standard-GPU zuzulassen. Verwenden Sie ein auf den Gast angewendetes Gruppenrichtlinienobjekt (oder den Editor für lokale Gruppenrichtlinien auf dem Gast). Navigieren Sie zum folgenden Gruppenrichtlinienelement:
Computerkonfiguration\Administrative Vorlagen\Windows-Komponenten\Remotedesktopdienste\Remotedesktop-Sitzungshost\Remotesitzungsumgebung\Hardwaregrafikadapter für alle Sitzungen mit Remotedesktopdiensten verwenden.
Legen Sie den Gruppenrichtlinienwert auf Aktiviert fest und starten Sie die VM neu, nachdem Sie die Richtlinie angewendet haben.