Wie können wir helfen?

Kategorien
Inhalt

Grafikkarte in Hyper V einbinden mit DDA (Discrete Device Assignment)

Navigation:
< zurück

Seit Windows Server 2016 ist es nicht mehr möglich die Grafikkarte in Hyper-V geshared oder komplett an die virtuelle Maschine freizugeben. Hintergrund dazu sind mehrere Sicherheitslücken, die Microsoft nicht geschlossen hat und somit das Feature vom Markt nimmt.

Hierzu sind zwei Alternativen möglich:

  • Discrete Device Assignment (DDA): Mit diskreter Gerätezuweisung wird einer virtuellen Maschine die Grafikkarte zugewiesen.
  • Grafikkartenlösungen von nVidia Grid GPU oder AMD Multiuser GPUs

Discrete Device Assignment (DDA) ermöglicht einen hochperformaten Zugriff auf Gerätetypen wie z.B. Grafikkarten, Festplatten und andere PCI-e Geräte, da diese direkt aus der VM heraus angesprochen werden.

STEP1 Vorbereitungen in Hyper-V

Bevor die Einstellungen durchgeführt werden, muss zuvor der minimale Arbeitsspeicher für direkt durchgereichte Geräte gefunden werden. Diesen Speicher bezeichnen wir als MMIO Space (Memory Mapped I/O Space).

Die einfachste Art dies herauszufinden ist folgendes Script in der Powershell auszuführen. Dabei werden alle Geräte ausgewertet und aufgelistet.

curl -o SurveyDDA.ps1 https://raw.githubusercontent.com/MicrosoftDocs/Virtualization-Documentation/live/hyperv-tools/DiscreteDeviceAssignment/SurveyDDA.ps1
.\SurveyDDA.ps1
image
Ergebnis dieses Scripts

Da wir nun den Speicherbedarf kennen, wird mit folgenden 2 Befehlen der minimale und maximale Speicher reserviert. ACHTUNG: Grafikkarten wie eine RXT8000 oder ähnlich benötigen viel mehr Speicher als kleinere Grafikkarten.

Zusätzlich erstellen wir eine Variable $vm die den Namen der jeweiligen virtuelle Maschine trägt.

Get-VM
$vm='Name_der_VM'
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 32Gb -VMName $vm

STEP2 Gerät vom Host trennen

Damit das Gerät direkt in der VM durchgereicht werden kann, muss es zuvor vom Host getrennt werden.

  1. Öffne dazu den Windows Geräte Manager in der Powershell oder mit ausführen: devmgmt.msc
  2. Navigiere zum Gerät (z.B. Grafikarten) > Eigenschaften > Details und wähle Speicherpfade (Location paths) aus, wie im folgenden Bild
  3. Kopiere die Zeile die mit “PCIROOT”…. beginnt.
  4. An PCI Pfad wird für die spätere Nutzung ebenso in einer Variable gespeichert, z.B.: $location = 'PCIROOT(60)#PCI(0301)#PCI(0000)'
  5. Im Abschluss muss das Gerät im Gerätemanager deaktiviert werden, d.h. Rechtklick auf das Gerät und “Deaktivieren” auswählen
image 1
Geräte Manager (devmgmt.msc) Detail Eigentschaften und Location Path (Speicherpfad) des PCI Geräts

STEP3 Virtuelle Maschine konfigurieren

Mit folgenden Befehl wird der Host als auch die virtuelle Maschine für die Passthrough Nutzung konfiguriert:

set-vm $vm -GuestControlledCacheTypes $true
set-vm -name $vm -AutomaticStopAction TurnOff
Dismount-VMHostAssignableDevice -force -LocationPath $location
Add-VMAssignableDevice -LocationPath $location -VMName $vm

Abschließend könnt ihr die VM starten und den jeweiligen Treiber direkt in der VM installieren.

Alle Aktionen rückgängig machen

Die virtuelle Maschine muss ausgeschaltet werden.

Remove-VMAssignableDevice -LocationPath $location -VMName $vm
Mount-VMHostAssignableDevice -LocationPath $location

Anschließend kann im Gerätemanager das Gerät erneut aktiviert werden (eventuell nach neuer Hardware suchen bzw. ein Neustart durchführen)

2 Kommentare

  1. Maltur

    Hallo,

    Vielen Dank für diese schöne Erklärung.
    Leider bekomme ich bei dem Versuch die Einstellungen zurück zu setzen, kommt immer ein locatinonsfehler.
    leider konnte ich das nicht lösen und musste den host neu aufsetzen. Würde mich über einen Tipp woran das hängen könnte, freuen.

    Viele Grüße

    Antworten
  2. SamT

    Der Befehl Get-VM ist falsch geschrieben oder konnte nicht gefunden werden

    Antworten

Kommentar absenden

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert