Udostępnij za pośrednictwem


Wdrażanie urządzeń graficznych przy użyciu dyskretnego przypisania urządzenia

Dowiedz się, jak za pomocą dyskretnego przypisania urządzenia (DDA) przekazać całe urządzenie PCIe do maszyny wirtualnej za pomocą programu PowerShell. Dzięki temu można uzyskać dostęp do urządzeń, takich jak magazyn NVMe lub karty graficzne z poziomu maszyny wirtualnej, przy jednoczesnym stosowania sterowników natywnych urządzenia. Aby uzyskać więcej informacji na temat urządzeń, które działają i możliwe implikacje dotyczące zabezpieczeń, zobacz Planowanie wdrażania urządzeń przy użyciu dyskretnego przypisania urządzenia.

W tym artykule przedstawiono procedurę używania urządzenia z DDA:

  1. Konfigurowanie maszyny wirtualnej dla DDA
  2. Odinstalowywanie urządzenia z partycji hosta
  3. Przypisz urządzenie do maszyny wirtualnej dla gościa

Wymagania wstępne

Aby można było użyć narzędzia DDA do wdrożenia urządzeń graficznych, musisz mieć następujące elementy.

  • Host Hyper-V z systemem Windows Server 2016 lub nowszym.

  • Maszyna wirtualna z jednym z następujących systemów operacyjnych:

    • Windows Server 2016 lub nowszy.

    • System Windows 10 lub nowszy.

  • Zapoznaj się z Planem wdrażania urządzeń przy użyciu dyskretnego przypisania urządzenia, aby upewnić się, że sprzęt jest zgodny z DDA.

    • Uruchom SurveyDDA.ps1. Skrypt programu PowerShell w celu określenia, czy serwer jest poprawnie skonfigurowany. Skrypt wyświetla również, które urządzenia mogą być przekazywane za pomocą dyskretnego przypisania urządzenia.
  • Uprawnienia administracyjne do hosta Hyper-V.

  • (Opcjonalnie) Chociaż nie jest to wymagane, jeśli Single Root I/O Virtualization (SR-IOV) nie jest włączona lub obsługiwana, mogą wystąpić problemy przy użyciu DDA podczas wdrażania urządzeń graficznych.

Konfigurowanie maszyny wirtualnej dla DDA

Pierwszym krokiem rozwiązania jest rozwiązanie ograniczeń DDA dla maszyn wirtualnych.

  1. Zaloguj się do hosta Hyper-V jako administrator.

  2. Otwórz wiersz polecenia programu PowerShell z podwyższonym poziomem uprawnień.

  3. Automatic Stop Action Skonfiguruj maszynę wirtualną, aby włączyć funkcję TurnOff przy użyciu następującego polecenia cmdlet programu PowerShell:

    Set-VM -Name VMName -AutomaticStopAction TurnOff
    

Przygotowanie maszyny wirtualnej dla urządzeń graficznych

Niektóre sprzęty działają lepiej, jeśli maszyna wirtualna jest skonfigurowana w określony sposób. Aby uzyskać szczegółowe informacje na temat potrzeb następujących konfiguracji sprzętu, skontaktuj się z dostawcą sprzętu. Aby uzyskać więcej informacji, zobacz Planowanie wdrażania urządzeń przy użyciu dyskretnego przypisania urządzenia i w tym wpisie w blogu.

  1. Włącz Write-Combining na CPU przy użyciu następującego polecenia cmdlet:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Skonfiguruj 32-bitowy obszar MMIO przy użyciu następującego polecenia cmdlet:

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Skonfiguruj większą niż 32-bitową przestrzeń MMIO przy użyciu następującego polecenia cmdlet:

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Wskazówka

    Wyświetlane wartości przestrzeni MMIO są rozsądnymi wartościami ustawionymi na potrzeby eksperymentowania z pojedynczym procesorem GPU. Jeśli po uruchomieniu maszyny wirtualnej urządzenie zgłasza błąd związany z niewystarczającą ilością zasobów, prawdopodobnie trzeba będzie zmodyfikować te wartości. Aby uzyskać więcej informacji na temat sposobu dokładnego obliczania wymagań mmIO, zobacz Planowanie wdrażania urządzeń przy użyciu dyskretnego przypisania urządzenia.

Odinstalowywanie urządzenia z partycji hosta

Postępuj zgodnie z instrukcjami w tej sekcji, aby odinstalować urządzenie z partycji hosta.

Instalowanie sterownika partycjonowania (opcjonalnie)

DDA zapewnia dostawcom sprzętu możliwość zapewnienia sterownika ograniczania zabezpieczeń na swoich urządzeniach. Ten sterownik nie jest taki sam jak sterownik urządzenia zainstalowany na maszynie wirtualnej gościa. O udostępnieniu tego sterownika decyduje dostawca sprzętu. Jeśli jednak udostępniają sterownik, zainstaluj go przed odinstalowaniem urządzenia z partycji hosta. Skontaktuj się z dostawcą sprzętu, aby sprawdzić, czy ma sterownik ograniczania ryzyka.

Jeśli nie podano sterownika partycjonowania, podczas odinstalowania należy użyć -Force opcji obejścia ostrzeżenia o zabezpieczeniach. Aby uzyskać więcej informacji na temat implikacji zabezpieczeń, zobacz Planowanie wdrażania urządzeń przy użyciu dyskretnego przypisania urządzenia.

Lokalizowanie ścieżki lokalizacji urządzenia

Ścieżka lokalizacji PCI jest wymagana do odinstalowania i zainstalowania urządzenia z hosta. Przykładowa ścieżka lokalizacji wygląda następująco: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000). Aby uzyskać więcej informacji na temat lokalizowania ścieżki lokalizacji, zobacz Planowanie wdrażania urządzeń przy użyciu dyskretnego przypisania urządzenia.

Wyłączanie urządzenia

Użyj Menedżera urządzeń lub programu PowerShell, aby upewnić się, że urządzenie jest wyłączone.

Odinstalowywanie urządzenia

W zależności od tego, czy dostawca dostarczył sterownik ograniczania ryzyka, należy użyć -Force opcji lub nie, jak pokazano poniżej:

  • Jeśli sterownik ograniczania ryzyka został zainstalowany, użyj następującego polecenia cmdlet:

    Dismount-VMHostAssignableDevice -LocationPath $locationPath
    
  • Jeśli sterownik ograniczania ryzyka nie został zainstalowany, użyj następującego polecenia cmdlet:

    Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
    

Przypisz urządzenie do maszyny wirtualnej gościa

Ostatnim krokiem jest powiedzenie Hyper-V, że maszyna wirtualna powinna mieć dostęp do urządzenia. Określ ścieżkę lokalizacji i nazwę maszyny wirtualnej.

Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName

Wykonywanie zadań na maszynie wirtualnej

Po pomyślnym zamontowaniu urządzenia w maszynie wirtualnej możesz uruchomić tę maszynę i korzystać z urządzenia tak, jakbyś pracował na systemie fizycznym. Teraz możesz zainstalować sterowniki dostawcy sprzętu na maszynie wirtualnej, a aplikacje są w stanie zobaczyć sprzęt. Możesz to sprawdzić, otwierając Menedżera urządzeń na maszynie wirtualnej gościa i sprawdzając, czy sprzęt jest dostępny.

Usuwanie urządzenia i zwracanie go do hosta

Jeśli chcesz przywrócić oryginalne urządzenie, musisz zatrzymać maszynę wirtualną i wydać następujące polecenie:

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

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

Następnie można ponownie włączyć urządzenie w Menedżerze urządzeń, a system operacyjny hosta będzie mógł ponownie wchodzić w interakcję z urządzeniem.

Przykład — instalowanie procesora GPU na maszynie wirtualnej

W tym przykładzie użyto programu PowerShell do skonfigurowania maszyny wirtualnej o nazwie ddatest1 , aby pobrać pierwszy procesor GPU dostępny przez producenta NVIDIA i przypisać go do maszyny wirtualnej.

# 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

Rozwiązywanie problemów z instalowaniem procesora GPU

Jeśli przekazujesz procesor GPU do maszyny wirtualnej, ale usługi pulpitu zdalnego lub aplikacja nie rozpoznaje procesora GPU, sprawdź następujące typowe problemy.

  • Upewnij się, że zainstalowano najnowszą wersję obsługiwanego sterownika dostawcy procesora GPU i że sterownik nie zgłasza błędów. Możesz to zrobić, sprawdzając stan urządzenia w Menedżerze urządzeń.

  • Upewnij się, że urządzenie ma wystarczającą ilość miejsca mmIO przydzielonego na maszynie wirtualnej. Aby uzyskać więcej informacji, zobacz MMIO Spacja.

  • Upewnij się, że używasz procesora GPU obsługiwanego przez dostawcę w tej konfiguracji. Na przykład niektórzy dostawcy uniemożliwiają, aby karty konsumenckie działały po przekazaniu ich do maszyny wirtualnej.

  • Upewnij się, że aplikacja obsługuje uruchamianie wewnątrz maszyny wirtualnej i że aplikacja obsługuje zarówno procesor GPU, jak i skojarzone sterowniki. Niektóre aplikacje mają listę dozwolonych procesorów GPU i środowisk.

  • Jeśli używasz roli hosta sesji Pulpitu zdalnego lub Usług Windows Multipoint na gościu, musisz upewnić się, że określony wpis zasad Grupy jest skonfigurowany, aby zezwolić na korzystanie z domyślnego procesora graficznego. Użyj obiektu zasad grupy zastosowanego na komputerze gościa (lub edytora lokalnych zasad grupy na komputerze gościa). Przejdź do następującego elementu zasad grupy:

    Konfiguracja komputera\Szablony administratora\Składniki systemu Windows\Usługi pulpitu zdalnego\Host sesji pulpitu zdalnego\Środowisko sesji zdalnej\Użyj sprzętowych kart graficznych dla wszystkich sesji usług pulpitu zdalnego.

    Ustaw wartość zasad grupy na Włączone, a następnie uruchom ponownie maszynę wirtualną po zastosowaniu zasad.