Distribuire dispositivi grafici usando l'assegnazione di dispositivi discreti

Si applica a: Windows Server 2022, Windows Server 2019, Microsoft Hyper-V Server 2019, Windows Server 2016, Microsoft Hyper-V Server 2016

A partire da Windows Server 2016, è possibile usare l'assegnazione di dispositivi discreti (DDA) per passare un intero dispositivo PCIe in una macchina virtuale (VM). 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.

Importante

Anche se non è necessario, se la virtualizzazione SR-IOV (Single Root I/O Virtualization) non è abilitata o supportata, potrebbero verificarsi problemi quando si usa DDA per distribuire i dispositivi grafici.

L'uso di un dispositivo con DDA prevede tre passaggi:

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

È possibile eseguire tutti i comandi nell'host in una console di Windows PowerShell come amministratore.

Configurare la macchina virtuale per la DDA

Il primo passaggio della soluzione consiste nell'affrontare le restrizioni di DDA per le macchine virtuali. Configurare di Automatic Stop Action una macchina virtuale 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 la combinazione di scrittura nella CPU usando il cmdlet seguente:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configurare lo spazio MMIO a 32 bit usando il cmdlet seguente:

    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 pci è necessario per smontare e montare il dispositivo dall'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 nel 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.

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 è stata passata una GPU in una macchina virtuale ma Servizi Desktop remoto o un'applicazione non riconosce la GPU, verificare i problemi comuni seguenti:

  • Assicurarsi di aver installato 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 altre informazioni, vedere 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 al guest (o all'Editor Criteri di gruppo locali nel guest) per passare all'elemento Criteri di gruppo seguente:

    Configurazione computer\Amministrazione Modelli amministrativi\Componenti di Windows\Servizi Desktop remoto\Host sessione Desktop remoto\Ambiente sessione desktop remoto\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 l'applicazione dei criteri.