Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erfahren Sie, wie Sie die diskrete Gerätezuweisung (Discrete Device Assignment, DDA) verwenden, um ein gesamtes PCIe-Gerät mit PowerShell an einen virtuellen Computer (VM) zu übergeben. Auf diese Weise können Geräte wie NVMe-Speicher oder Grafikkarten von einem virtuellen Computer aus auf hohe Leistung zugreifen, während die systemeigenen Treiber des Geräts angewendet werden können. Weitere Informationen zu Geräten, die funktionieren und mögliche Sicherheitsauswirkungen haben, finden Sie unter Plan for Deploying Devices using Discrete Device Assignment.
Dieser Artikel führt Sie durch die Schritte zum Verwenden eines Geräts mit DDA:
- Konfigurieren des virtuellen Computers für DDA
- Aufheben der Einbindung des Geräts in die Hostpartition
- Zuweisen des Geräts zur Gast-VM
Voraussetzungen
Bevor Sie DDA zum Bereitstellen von Grafikgeräten verwenden können, benötigen Sie Folgendes.
Ein Hyper-V Host unter Windows Server 2016 oder höher.
Eine VM mit einem der folgenden Betriebssysteme:
Windows Server 2016 oder höher.
Windows 10 oder höher.
Überprüfen Sie den Plan für die Bereitstellung von Geräten mithilfe der diskreten Gerätezuweisung , um sicherzustellen, dass Ihre Hardware mit DDA kompatibel ist.
- Führen Sie das PowerShell-Skript SurveyDDA.ps1. aus, um zu ermitteln, ob der Server ordnungsgemäß konfiguriert ist. Das Skript zeigt auch an, welche Geräte mithilfe der diskreten Gerätezuweisung durchlaufen werden können.
Administratorrechte für den host Hyper-V.
(Optional) Auch wenn es nicht erforderlich ist, treten möglicherweise Probleme auf, wenn E/A-Virtualisierung mit Einzelstamm (Single Root I/O Virtualization, SR-IOV) nicht aktiviert oder unterstützt wird, wenn Sie DDA zum Bereitstellen von Grafikgeräten verwenden.
Konfigurieren der VM für DDA
Der erste Schritt in der 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 erhöhte PowerShell-Eingabeaufforderung.
Konfigurieren Sie den
Automatic Stop Action
virtuellen Computer so, dass TurnOff mit dem folgenden PowerShell-Cmdlet aktiviert wird:Set-VM -Name VMName -AutomaticStopAction TurnOff
VM-Vorbereitung für Grafikgeräte
Einige Hardware wird besser ausgeführt, wenn der virtuelle Computer auf eine bestimmte Weise konfiguriert ist. Für weitere Informationen darüber, ob Sie die folgenden Konfigurationen für Ihre Hardware benötigen, wenden Sie sich bitte an den Hardwareanbieter. Weitere Informationen finden Sie unter "Plan zur Bereitstellung von Geräten mit diskreter Gerätezuweisung " sowie 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-Bereich (Memory Mapped IO) mithilfe des folgenden Cmdlets:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
Konfigurieren Sie mehr als 32-Bit-MMIO-Speicherplatz mithilfe des folgenden Cmdlets:
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
Tipp
Die angezeigten MMIO-Raumwerte sind vernünftige Werte für das Experimentieren mit einer einzelnen GPU. Wenn nach dem Starten des virtuellen Computers ein Fehler gemeldet wird, der sich auf nicht genügend Ressourcen bezieht, müssen Sie diese Werte wahrscheinlich ändern. Weitere Informationen zur genauen Berechnung von MMIO-Anforderungen finden Sie unter Plan for Deploying Devices using Discrete Device Assignment.
Gerät von der Hostpartition trennen
Folgen Sie den Anweisungen in diesem Abschnitt, um das Gerät von der Hostpartition zu entfernen.
Installieren Sie den Partitionierungstreiber (optional)
DDA bietet Hardwareanbietern die Möglichkeit, einen Treiber zur Sicherheitsminderung mit ihren Geräten bereitzustellen. Dieser Treiber ist nicht mit dem gerätetreiber identisch, der auf der Gast-VM installiert ist. Es liegt an der Diskretion des Hardwareanbieters, diesen Treiber bereitzustellen. Wenn sie jedoch einen Treiber bereitstellen, installieren Sie ihn, bevor Sie das Gerät von der Hostpartition trennen. Wenden Sie sich an den Hardwareanbieter, um festzustellen, ob sie über einen Minderungs-Treiber verfügen.
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 zu den Sicherheitsauswirkungen finden Sie unter Plan zur Bereitstellung von Geräten mit Verwendung der diskreten Gerätezuweisung.
Suchen des Standortpfads des Geräts
Der PCI-Speicherortpfad ist für die Einbindung des Geräts in den Host und die Aufhebung erforderlich. Ein Beispiel für einen Speicherortpfad sieht wie folgt 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
Verwenden Sie den Geräte-Manager oder PowerShell, um sicherzustellen, dass das Gerät deaktiviert ist.
Aufheben der Geräteeinbindung
Je nachdem, ob der Anbieter einen Schutztreiber bereitgestellt hat, müssen Sie entweder die -Force
-Option verwenden oder nicht, wie in folgendem Beispiel gezeigt:
Wenn ein Entschärfungstreiber installiert wurde, verwenden Sie das folgende Cmdlet:
Dismount-VMHostAssignableDevice -LocationPath $locationPath
Wenn kein Entschärfungstreiber 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 dem virtuellen Computer
Nachdem ein Gerät erfolgreich in einer VM eingebunden wurde, können Sie diese VM starten und mit dem Gerät interagieren, als ob Sie auf einem physischen System arbeiten würden. Sie können jetzt die Treiber des Hardwareanbieters auf dem virtuellen Computer installieren, und Anwendungen können die Hardware sehen. Sie können dies überprüfen, indem Sie den Geräte-Manager auf der Gast-VM öffnen und sehen, dass die Hardware verfügbar ist.
Entfernen eines Geräts und Zurückgeben des Geräts an den Host
Wenn Sie das Gerät wieder in den ursprünglichen Zustand zurücksetzen möchten, müssen Sie den virtuellen Computer beenden und diesen Befehl ausgeben:
# 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 erneut mit dem Gerät interagieren.
Beispiel: Bereitstellen einer GPU auf einem virtuellen Computer
In diesem Beispiel wird PowerShell verwendet, um einen virtuellen Computer mit dem Namen ddatest1 zu konfigurieren, um die erste gpu zu verwenden, die vom Hersteller NVIDIA verfügbar ist, 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
Probleme beim Einbau einer GPU beheben
Wenn Sie eine GPU an einen virtuellen Computer übergeben, aber Remotedesktopdienste oder eine Anwendung die GPU nicht erkennen, überprüfen Sie die folgenden häufigen Probleme.
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.
Stellen Sie sicher, dass Ihr Gerät über genügend MMIO-Speicherplatz verfügt, der innerhalb des virtuellen Computers zugewiesen ist. Weitere Informationen finden Sie unter MMIO Space.
Stellen Sie sicher, dass Sie eine GPU verwenden, die vom Anbieter für die Verwendung in dieser Konfiguration unterstützt wird. Beispielsweise verhindern einige Anbieter, dass ihre Verbraucherkarten funktionieren, wenn sie an einen virtuellen Computer übergeben werden.
Stellen Sie sicher, dass die Anwendung die Ausführung innerhalb eines virtuellen Computers unterstützt und dass die Anwendung sowohl die GPU als auch die zugehörigen Treiber unterstützt. Einige Anwendungen verfügen über Zulassungslisten von 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 Gruppenrichtlinienobjekt, das auf den Gast angewendet wird (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 den virtuellen Computer neu, nachdem Sie die Richtlinie angewendet haben.