Condividi tramite


Distribuire dispositivi grafici usando l'assegnazione di dispositivi discreti

Informazioni su come usare l'assegnazione di dispositivi discreti (DDA) per passare un intero dispositivo PCIe in una macchina virtuale (VM) con PowerShell. In questo modo è possibile accedere ad alte prestazioni ai dispositivi come l'archiviazione NVMe o le schede grafiche dall'interno di una macchina virtuale, pur essendo in grado di applicare i driver nativi del dispositivo. Per altre informazioni sui dispositivi che funzionano e sulle possibili implicazioni per la sicurezza, vedere Pianificare la distribuzione di dispositivi tramite l'assegnazione di dispositivi discreti.

Questo articolo illustra i passaggi per usare un dispositivo con DDA:

  1. Configurare la macchina virtuale per DDA
  2. Smontare il dispositivo dalla partizione host
  3. Assegnare il dispositivo alla macchina virtuale guest

Prerequisiti

Prima di poter usare DDA per distribuire i dispositivi grafici, è necessario disporre degli elementi seguenti.

  • Host Hyper-V che esegue Windows Server 2016 o versione successiva.

  • Una macchina virtuale che esegue uno dei sistemi operativi seguenti:

    • Windows Server 2016 o versione successiva.

    • Windows 10 o versione successiva.

  • Consultare Piano di distribuzione dei dispositivi usando l'assegnazione di dispositivi discreti per verificare che l'hardware sia compatibile con DDA.

    • Eseguire il SurveyDDA.ps1. Script di PowerShell per identificare se il server è configurato correttamente. Lo script visualizza anche i dispositivi che possono essere passati tramite l'assegnazione di dispositivi discreti.
  • Diritti amministrativi per l'host Hyper-V.

  • (Facoltativo) Anche se non è necessario, se la virtualizzazione I/O radice singola (SR-IOV) non è abilitata o supportata, è possibile che si verifichino problemi quando si usa DDA per distribuire i dispositivi grafici.

Configurare la macchina virtuale per la DDA

Il primo passaggio della soluzione consiste nell'affrontare le restrizioni di DDA per le macchine virtuali.

  1. Effettua l'accesso all'host Hyper-V come amministratore.

  2. Aprire un prompt di PowerShell con privilegi elevati.

  3. Configurare il Automatic Stop Action di una VM per abilitare TurnOff con il cmdlet di PowerShell seguente:

    Set-VM -Name VMName -AutomaticStopAction TurnOff
    

Preparazione delle macchine virtuali per i dispositivi grafici

Alcuni hardware offrono prestazioni migliori se la macchina virtuale è configurata in un certo modo. Per informazioni dettagliate sul fatto che siano necessarie le configurazioni seguenti per l'hardware, contattare il fornitore dell'hardware. Per altre informazioni, vedere Pianificare la distribuzione di dispositivi usando l'assegnazione di dispositivi discreti e in questo post di blog.

  1. Abilitare Write-Combining nella CPU usando il cmdlet seguente:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configurare lo spazio I/O (MMIO) di memoria a 32 bit utilizzando il seguente comando:

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Configurare uno spazio MMIO maggiore di 32 bit usando il cmdlet seguente:

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Suggerimento

    I valori dello spazio MMIO visualizzati sono valori ragionevoli da impostare per l'esperimento con una singola GPU. Se dopo l'avvio della macchina virtuale il dispositivo segnala un errore relativo a risorse non sufficienti, sarà probabilmente necessario modificare questi valori. Per altre informazioni su come calcolare con precisione i requisiti di MMIO, vedere Pianificare la distribuzione di dispositivi tramite l'assegnazione di dispositivi discreti.

Smontare il dispositivo dalla partizione host

Seguire le istruzioni riportate in questa sezione per smontare il dispositivo dalla partizione host.

Installare il driver di partizionamento (facoltativo)

DDA offre ai fornitori di hardware la possibilità di fornire un driver di mitigazione della sicurezza con i propri dispositivi. Questo driver non corrisponde al driver di dispositivo installato nella macchina virtuale guest. Spetta alla discrezione del fornitore di hardware fornire questo driver. Tuttavia, se forniscono un driver, installarlo prima di smontare il dispositivo dalla partizione host. Contattare il fornitore dell'hardware per verificare se ha un driver di mitigazione.

Se non viene fornito alcun driver di partizionamento, durante lo smontaggio è necessario usare l'opzione -Force per ignorare l'avviso di sicurezza. Per altre informazioni sulle implicazioni relative alla sicurezza, vedere Pianificare la distribuzione di dispositivi tramite l'assegnazione di dispositivi discreti.

Individuare il percorso del dispositivo

Il percorso della posizione PCI è necessario per smontare e montare il dispositivo dal host. Un percorso di esempio è simile al seguente: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000). Per altre informazioni sull'individuazione del percorso, vedere Pianificare la distribuzione di dispositivi tramite l'assegnazione di dispositivi discreti.

Disabilitare il dispositivo

Usare Gestione dispositivi o PowerShell per assicurarsi che il dispositivo sia Disabilitato.

Smontare il dispositivo

A seconda che il fornitore abbia fornito un driver di mitigazione, è necessario usare o meno l'opzione -Force , come illustrato di seguito:

  • Se è stato installato un driver di mitigazione, usare il cmdlet seguente:

    Dismount-VMHostAssignableDevice -LocationPath $locationPath
    
  • Se non è stato installato un driver di mitigazione, usare il cmdlet seguente:

    Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
    

Assegnare il dispositivo alla macchina virtuale guest

Il passaggio finale consiste nell'indicare a Hyper-V che una macchina virtuale deve avere accesso al dispositivo. Specificare il percorso e il nome della macchina virtuale.

Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName

Completare le attività nella macchina virtuale

Dopo che un dispositivo è stato montato correttamente in una macchina virtuale, è ora possibile avviare la macchina virtuale e interagire con il dispositivo come se fosse in esecuzione in un sistema bare metal. È ora possibile installare i driver del fornitore di hardware nella macchina virtuale e le applicazioni sono in grado di visualizzare l'hardware. È possibile verificarlo aprendo Gestione dispositivi nella macchina virtuale guest e verificando che l'hardware sia disponibile.

Rimuovere un dispositivo e restituirlo all'host

Se si vuole ripristinare lo stato originale del dispositivo, è necessario arrestare la macchina virtuale ed eseguire questo comando:

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

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

È quindi possibile riabilitare il dispositivo in Gestione dispositivi e il sistema operativo host è in grado di interagire di nuovo con il dispositivo.

Esempio: montare una GPU in una macchina virtuale

Questo esempio usa PowerShell per configurare una macchina virtuale denominata ddatest1 per prendere la prima GPU disponibile dal produttore NVIDIA e assegnarla alla macchina virtuale.

# 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

Risolvere i problemi relativi al montaggio di una GPU

Se passi una GPU in una macchina virtuale ma Servizi Desktop Remoto o un'applicazione non riconosce la GPU, verifica i seguenti problemi comuni.

  • Assicurarsi di installare la versione più recente del driver supportato dal fornitore della GPU e che il driver non segnali errori. È possibile farlo controllando lo stato del dispositivo in Gestione dispositivi.

  • Assicurarsi che il dispositivo disponga di spazio MMIO sufficiente allocato all'interno della macchina virtuale. Per ulteriori informazioni, consultare spazio MMIO.

  • Assicurarsi di usare una GPU supportata dal fornitore in questa configurazione. Ad esempio, alcuni fornitori impediscono il funzionamento delle schede consumer quando vengono passate a una macchina virtuale.

  • Assicurarsi che l'applicazione supporti l'esecuzione all'interno di una macchina virtuale e che l'applicazione supporti sia la GPU che i driver associati. Alcune applicazioni hanno elenchi consentiti di GPU e ambienti.

  • Se si usa il ruolo Host sessione Desktop remoto o Servizi Multipoint Windows nel guest, è necessario assicurarsi che sia impostata una voce di Criteri di gruppo specifica per consentire l'uso della GPU predefinita. Utilizzare un oggetto Criteri di gruppo applicato all'ospite (o all'Editor Criteri di gruppo locali sull'ospite). Passare all'elemento Criteri di gruppo seguente:

    Configurazione computer\Modelli amministratore\Componenti di Windows\Servizi Desktop remoto\Host sessione Desktop remoto\Ambiente sessione remota\Usa schede grafiche hardware per tutte le sessioni di Servizi Desktop remoto.

    Impostare il valore di Criteri di gruppo su Abilitato, quindi riavviare la macchina virtuale dopo aver applicato i criteri.