agsandrew - Fotolia

PCIe-Pass-Through per Discrete Device Assignment in Hyper-V 2016

Discrete Device Assignment bietet in Hyper-V 2016 eine neue Möglichkeit für GPU-Pass-Through-Konfigurationen. Diese Anleitung zeigt die Einrichtung.

Eine der nützlichsten neuen Funktionen in Windows Server 2016 Hyper-V ist das Discrete Device Assignment, das sich am ehesten als Hardware-Pass-Through umschreiben lässt. Damit wird es also möglich, einer virtuellen Maschine exklusiv eine physische Hardwarekomponente zuzuweisen.

In gewisser Weise hatte Hyper-V dabei schon immer Pass-Through-Funktionalität, so ist es beispielsweise schon seit längerem möglich, einer virtuellen Maschine per SCSI-Pass-Through ein physisches DVD-Laufwerk oder eine physische Festplatte zuzweisen. Discrete Device Assignment funktioniert allerdings etwas anders und ermöglicht zum Beispiel das Durchreichen physischer Grafikkarten.

Der Vollständigkeit halber sollte man aber wohl anmerken, dass es auch mit Windows Server 2012 R2 Hyper-V bereits die Möglichkeit gab, GPUs durchzuschleifen. Das Problem dabei war aber, dass hierfür die Remote Desktop Services (RDS) genutzt werden, was letztlich einen Lizenzserver sowie die nötigen RDS-Lizenzen notwendig macht.

Das Durchschleifen per Discrete Device Assignment in Hyper-V 2016 ermöglicht demgegenüber native GPU-Pass-Through-Konfigurationen und kann inoffiziell auch für das Durchreichen anderer PCIe-Hardware verwendet werden.

Konfiguration des Discrete Device Assigment

Discrete Device Assignment setzt zunächst einmal Intel VT oder AMD-V voraus. Die neue Pass-Through-Funktion wird dann über das ebenfalls neue PowerShell-Modul PnpDevice gesteuert. Eine Liste der Hardwaregeräte kann dann durch Eintippen von Get-PnpDevice auf dem Host-Server angezeigt werden, wie Abbildung 1 verdeutlicht.

Abbildung 1: Liste der Hardwaregeräte auf dem Host-Server.

In diesem Beispiel ist der Server mit zwei unterschiedlichen Grafik-Adaptern ausgestattet, mit einer AMD Radeon sowie mit einem Microsoft Basic Display Adapter. Da die Radeon-Grafikkarte wesentlich mehr Leistung bietet, würde man in dieser Situation diese direkt an die virtuelle Maschine durchreichen. Hierfür wird die Instance ID des Gerätes sowie der Name der virtuellen Maschine benötigt, der die GPU zugeordnet werden soll. Für das Discrete Device Assigment muss die virtuelle Maschine zwingend auf dem gleichen Host ausgeführt werden.

Über Get-PnpDevice zusammen mit einer Variable kann der Variablen-Name referenziert werden, um das Select-Object-Cmdlet anzuhängen. Auf diese Weise erhält man die volle Instance ID, wie Abbildung 2 zeigt:

Abbildung 2: Über die Verwendung einer Variable erhält man die Instance ID.

Im nächsten Schritt muss der generische Video-Adapter dekativiert werden, damit das Betriebssystem nicht stattdessen darauf zugreift. Dies kann natürlich über den Geräte-Manager durchgeführt werden, über die PowerShell funktioniert dies aber natürlich schneller. Da die A$-Variable in diesem Beispiel nur ein einziges Gerät enthält, lässt sich dieses über den folgenden Befehl deaktivieren:

Disable-PnpDevice -InstanceID $A.InstanceID

Als nächstes kann der Video-Adapter auf dem Host deaktiviert werden. Hierbei helfen die folgenden Befehle:

$LocationPath = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $A.InstanceID).Data[0]

Dismount-VMHostAssignableDevice -LocationPath $LocationPath -Force -Verbose

Get-VMHostAssignableDevice

Dieser Prozess funktioniert dabei nur, wenn die UEFI-Einstellungen des Servers so konfiguriert sind, dass das Betriebssystem Kontrolle über den PCIe-Bus hat. Andernfalls wird man an dieser Stelle eine Fehlermeldung erhalten.

Pass-Through-Einstellungen des Discrete Device Assignment

An dieser Stelle ist das Gerät bereit, um an die virtuelle Maschine durchgereicht zu werden. Gemäß einer Konfigurationsanleitung auf TechNet muss die Automatic Stop Action der VM auf Turn off stehen. Zudem muss die VM so konfiguriert werden, dass Dynamic Memory die gleichen Werte für Minimum Memory und Startup Memory aufweist.

Mit diesen Einstellungen kann das Gerät schließlich über den folgenden Befehl der virtuellen Maschine zugewiesen werden:

Add-VMAssignableDevice -VM <virtual machine name> -LocationPath $LocationPath –Verbose

Nachdem Hardware per Pass-Through über Direct Device Assignment an eine virtuelle Maschine durchgeschleift wurde, muss dieser VM noch ein Treiber zur Verfügung gestellt werden. Andernfalls wird die virtuelle Maschine die Hardware nicht erkennen.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!

Erfahren Sie mehr über Containervirtualisierung

ComputerWeekly.de
Close