Hyper-V GPU Passthrough: una guida essenziale per principianti
In alcuni scenari, potrebbe essere necessario utilizzare una scheda video (contenente una GPU), chiamata anche adattatore grafico o adattatore video, su una VM. Tuttavia, l’utilizzo di una scheda video emulata in una VM Hyper-V potrebbe non essere sufficiente per attività che utilizzano OpenGL, Direct3D, CUDA e altre funzionalità relative all’hardware. Fortunatamente, è possibile collegare una scheda video fisica a una VM su un host Hyper-V utilizzando la funzione GPU passthrough di Hyper-V.
Che cos’è GPU Passthrough?
Il GPU Passthrough è una funzione che consente di collegare una scheda video fisica installata su un host fisico a una VM senza emulazione. Di conseguenza, la VM può utilizzare direttamente un adattatore grafico fisico.
Per impostazione predefinita, le VM Hyper-V utilizzano una scheda grafica emulata, che si basa sulla CPU dell’host Hyper-V. Tuttavia, questo approccio consente agli utenti di eseguire solo le attività più basilari, ma non è sufficiente per le attività che richiedono prestazioni grafiche più elevate.
NOTA: Una GPU può essere integrata nel chipset di una scheda madre o in un’unità di elaborazione centrale (CPU), chiamata anche processore (per le ultime generazioni di processori Intel e l’architettura correlata). Una GPU ad alte prestazioni è un chip su una scheda video discreta collegata a una scheda madre tramite l’interfaccia PCI Express (PCIe).
Vantaggi principali del GPU Passthrough in Hyper-V
Una scheda grafica fisica collegata tramite GPU passthrough in una VM di Hyper-V può essere utilizzata da utenti domestici, sviluppatori, progettisti e altri in scenari specifici. Gli scenari più comuni sono:
- Esecuzione di applicazioni che utilizzano carichi di lavoro intensivi dal punto di vista grafico (progettazione grafica, modellazione 3D, disegno AutoCAD, ingegneria e calcoli, progettazione e sviluppo di giochi, ecc. Utilizzo del rendering accelerato dall’hardware.
- Esecuzione di giochi con funzioni di accelerazione hardware. Alcuni giochi potrebbero non funzionare senza una scheda video fisica.
- Esecuzione di applicazioni di machine learning (ML) e intelligenza artificiale (AI) utilizzando una GPU.
I vantaggi della modalità GPU passthrough sono:
- Migliori prestazioni grafiche con le VM che accedono direttamente a una scheda grafica per applicazioni o giochi ad alta intensità grafica. La riproduzione video è più fluida. Sono disponibili grafica con accelerazione hardware e le API più recenti.
- Utilizzo flessibile delle risorse hardware. Utilizzo di un host Hyper-V per più VM con attività grafiche intensive non uniformi nei casi in cui l’utilizzo di estazioni di lavoro dedicate non è ottimale.
- Efficienza in termini di costi. Il passthrough della GPU può consentire di risparmiare sui costi in alcuni scenari, in particolare in termini di utilizzo delle risorse hardware. Questa funzione può essere utilizzata anche per un’infrastruttura desktop virtuale (VDI).
- Sicurezza. I vantaggi in termini di sicurezza sono simili a quelli della virtualizzazione in generale. Se le vulnerabilità vengono sfruttate nelle VM, queste ultime funzionano in un ambiente isolato e ci sono più possibilità di mitigare il problema. In caso di problemi gravi, è possibile ripristinare rapidamente le VM da un backup.
Requisiti
Per configurare una VM con GPU passthrough su un host Hyper-V, è necessario soddisfare determinati requisiti hardware e software. Non tutte le schede video possono essere utilizzate per questa funzione.
Specifiche hardware per il GPU Passthrough
- La CPU sull’host Hyper-V deve supportare le funzionalità di virtualizzazione Intel-VT o AMD-V. La funzione di virtualizzazione appropriata deve essere abilitata per il processore sull’host Hyper-V nelle impostazioni UEFI/BIOS.
- L’unità di gestione della memoria di input-output (IOMMU) deve essere supportata dalla CPU sull’host Hyper-V. Questa funzione è obbligatoria per il passthrough PCI, incluso il passthrough della scheda video o della GPU.
- Una scheda video con una GPU che supporta tecnologie di virtualizzazione GPU, come NVIDIA GRID o AMD MxGPU (Multiuser GPU). Queste tecnologie sono specifiche del vendor. L’utilizzo di hardware di classe server migliora le percentuali di successo. I dispositivi meno recenti che utilizzano interruzioni PCI (INTx) non sono supportati.
- SR-IOV (Single Root Input/Output Virtualization) deve essere supportato e abilitato per evitare errori.
Requisiti software per Hyper-V Passthrough
- Windows Server 2016 o versione successiva di Windows Server (preferibile)
- Windows 10 o Windows 11
- Il ruolo (funzione) Hyper-V deve essere abilitato in Windows.
- I driver grafici più recenti devono essere installati sull’host Hyper-V e sulla VM guest che utilizza il passthrough GPU.
- Per il GPU passthrough con DDA è necessario utilizzare solo VM Hyper-V di seconda generazione.
Limitazioni e configurazioni non supportate
Si notino le configurazioni che non sono senza supporto per l’utilizzo del GPU passthrough: senza supporto per l’utilizzo del GPU passthrough:
- Le VM che utilizzano Hyper-V Dynamic Memory, ovvero la funzione che consente di allocare e deallocare RAM per una VM in base alle necessità, non possono utilizzare il GPU passthrough.
- Il GPU passthrough è disponibile solo sulle edizioni Windows più avanzate, come Windows Server 2019 Datacenter.
- Se Windows Subsystem for Linux è implementato sull’host Hyper-V, sulla VM potrebbe verificarsi un errore con codice 43.
- Le funzioni di clustering come l’alta disponibilità e la migrazione live delle VM non sono supportate.
- Il salvataggio e il ripristino con i punti di controllo delle VM non sono supportati.
Configurazione del passthrough GPU: cosa occorre sapere
È importante sapere che la configurazione del GPU passthrough può essere più complessa rispetto alla maggior parte delle normali attività di configurazione delle VM. La scalabilità degli ambienti virtuali quando si utilizza il GPU passthrough non è così elevata come quando si utilizza il metodo predefinito per l’emulazione delle schede video. Non è possibile migrare le VM utilizzando la funzione GPU passthrough tra host Hyper-V perché queste VM sono vincolate alle schede grafiche fisiche installate nell’host.
Fino a Windows Server 2016, la funzione RemoteFX era utilizzata per il GPU passthrough alle VM. Dopo Windows Server 2019 e Windows 10 build 1809, la funzione RemoteFX non è più disponibile e solo Hyper-V Direct Device Assignment (DDA) può essere utilizzato per il passthrough di una scheda grafica, analogamente a qualsiasi altro dispositivo PCI/PCIe, inclusi i Dispositivi di storage NVMe. DDA è l’analogo del passthrough PCI di VMware.
RemoteFX è un’estensione per RDP (Microsoft Remote Display Protocol) utilizzata per collegare dispositivi USB (collegati all’host) a una VM. RemoteFX vGPU è stato utilizzato per le schede grafiche di conseguenza. RemoteFX ha consentito la condivisione di una GPU per più VM, cosa impossibile con l’assegnazione di dispositivi discreti. RemoteFX ha anche limitato la quantità di memoria video dedicata a 1 GB per ogni VM e il FPS massimo è 30. Nel caso di DDA, non esiste tale limitazione della RAM video e l’FPS può essere impostato su 60.
Se si utilizza Windows Server 2016 Datacenter o altre versioni e edizioni di Windows che in precedenza supportavano RemoteFX, è possibile installare un aggiornamento di Windows per rimuovere completamente questa funzione da Hyper-V ed evitare potenziali vulnerabilità di sicurezza. La versione ufficiale di Microsoft è che RemoteFX è stato rimosso per evitare vulnerabilità architetturali di Hyper-V. RemoteFX era interessante per gli ambienti virtuali ad alta densità quando non era possibile assegnare una scheda grafica fisica dedicata a ciascuna VM. Si noti che DDA funziona sulle versioni di Windows Server (non sulle versioni client, come Windows 10).
Il partizionamento della GPU in PowerShell può essere una soluzione sulle versioni client di Windows, ma copiare i driver video da un sistema operativo host a un sistema operativo guest (che deve essere lo stesso del sistema operativo host) è complicato. È necessario utilizzare VM di seconda generazione. In questo caso, la scheda grafica deve supportare il partizionamento della GPU.
Configurazione del passthrough della GPU in Hyper-V
Seguire i passaggi riportati di seguito per preparare l’ambiente e configurare il passthrough della GPU in Hyper-V.
Preparazione alla configurazione del GPU passthrough
- Assicurarsi che l’hardware e il software supportino la virtualizzazione della GPU.
- Abilita le funzioni di virtualizzazione Intel VT-d o AMD-V per la CPU in UEFI/BIOS sull’host Hyper-V.
- Abilita IOMMU. L’impostazione IOMMU può essere abilitata in modi diversi su schede madri diverse con versioni UEFI/BIOS diverse. A volte, l’ubicazione di queste impostazioni può essere trovata nella configurazione North Bridge. Oppure IOMMU può essere abilitato quando si abilita Intel VT-d o AMD-V. Controllare la funzione denominata Memory Remap in UEFI/BIOS.
È possibile verificare se IOMMU è abilitato su una macchina host Hyper-V con il comando PowerShell (come amministratore):
(Get-VMHost).IovSupport; (Get-VMHost).IovSupportReasonsTrue – abilitato; False – disabilitato.
- Rimuovere tutti i punti di controllo per la VM che si intende configurare utilizzando il passthrough della GPU.
Se i punti di controllo automatici sono abilitati per la VM, è possibile disabilitarli con il comando PowerShell:
Set-VM -Name VMName -AutomaticStopAction TurnOff
GPU passthrough in Windows Server
- Per impostare la cache e i limiti per lo spazio MIMO a 32 bit (3 GB per i sistemi operativi a 32 bit), eseguire questo comando PowerShell come amministratore:
Set-VM -Name VMName -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280MbIn alternativa, è possibile utilizzare tre comandi separati:
Set-VM -GuestControlledCacheTypes $true -VMName YourVMNameSet-VM -LowMemoryMappedIoSpace 3Gb -VMName YourVMNameSet-VM -HighMemoryMappedIoSpace 33280Mb -VMName YourVMNameQuesti limiti definiscono la memoria che rende il dispositivo accessibile alla VM. È possibile utilizzare uno script di profilo macchina di Microsoft per impostare i valori limite MIMO più precisi. I valori ottimali possono variare a seconda delle schede video. Se all’avvio di una VM viene visualizzato un messaggio che indica che le risorse non sono sufficienti, è necessario arrestare la VM e modificare questi valori. 33280 MB vengono utilizzati per uno spazio MIMO superiore a 32 bit.
- Controllare l’indirizzo fisico del dispositivo PCI Express (l’ubicazione del dispositivo), che è la scheda grafica necessaria che si desidera trasferire.
È possibile farlo in Gestione dispositivi. È possibile aprire Gestione dispositivi eseguendo il comando
devmgmt.msc. In Gestione dispositivi:- Fare clic con il pulsante destro del mouse sulla scheda video necessaria nella sezione Schede video e selezionare Proprietà nel menu contestuale.
- Seleziona la scheda Dettagli nella finestra delle proprietà dell’adattatore.
- Seleziona la proprietà Percorsi di ubicazione nel menu a discesa e copia il valore (i valori possono essere diversi per ogni computer).

È anche possibile utilizzare PowerShell per identificare l’ubicazione di un dispositivo:
Get-PnpDevice | Where-Object {$_.Present -eq $true} | Where-Object {$_.Class -eq "Display"}|select Name,InstanceIde
Get-PnpDevice -Class Display | ForEach-Object { Write-Output "$($_.FriendlyName) has a device id of $($_.DeviceId) and is located at $($_ | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths | Select-Object -ExpandProperty Data | Where-Object { $_ -like "PCIROOT*" })"; }L’output dovrebbe contenere una stringa simile a questa:
‘PCIROOT(0)#PCI(0300)#PCI(0000)’

- Disabilita questa scheda grafica in Gestione dispositivi. Fai clic con il pulsante destro del mouse sulla scheda video e seleziona Disabilita il dispositivo nel menu contestuale.

- Smonta una scheda video disabilitata in PowerShell:
Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -ForceDove:
-Force È obbligatorio quando un driver di partizione (opzionale) non è installato. Non si tratta di un driver per una scheda grafica installata in un sistema operativo guest. A volte, il vendor di un dispositivo può fornire questo driver di mitigazione della sicurezza per un dispositivo. Se si intende installare questo driver, è necessario installarlo prima di smontare il dispositivo PCI Express dalla partizione host.
L’ubicazione utilizzata in questo comando è solo a scopo illustrativo ed è necessario utilizzare il valore specifico.
- Eseguire il comando per assegnare questa scheda video a una VM con GPU passthrough tramite DDA:
Add-VMAssignableDevice -VMName VMName -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" - Accendere la VM e verificare se una scheda video fisica viene visualizzata in Gestione dispositivi della VM Microsoft Hyper-V insieme all’adattatore video emulato predefinito denominato Microsoft Hyper-V video.
- Installare i driver per la scheda video sul sistema operativo guest della VM. È possibile scaricare i driver video dal sito Web ufficiale NVIDIA o AMD.
- Se si desidera scollegare la scheda video dalla VM, arrestare la VM e utilizzare il comando sull’host:
Remove-VMAssignableDevice -VMName YourVMName -LocationPath $locationPathAvanti, eseguire il comando per ricollegare la scheda video all’host Hyper-V:
Mount-VMHostAssignableDevice -LocationPath $locationPath
Configurazione in Windows 10
Nelle versioni client di Windows, come Windows 10 e Windows 11 (da Windows 10 build 1903), il flusso di lavoro per configurare il passthrough GPU Hyper-V è diverso ed è possibile utilizzando il metodo di partizionamento GPU:
- Verificare se la scheda video supporta il partizionamento GPU in Windows 10 con il comando PowerShell:
Get-VMPartitionableGpuIn Windows 11, il comando è:
Get-VMHostPartitionableGpu - Per il passthrough della GPU a una VM, viene utilizzato il cmdlet
Add-VMGpuPartitionAdapter. Tuttavia, è necessario copiare i driver grafici dall’host Hyper-V alla VM. Si noti che la versione del driver deve essere la stessa. Poiché si tratta di un processo complesso, è possibile utilizzare uno script gratuito Easy-GPU-PV per copiare i driver. Scarica questo script in un file ZIP ed estrarre il contenuto dell’archivio ZIP in una cartella sull’host Hyper-V. Questo script può utilizzare la paravirtualizzazione della GPU sfruttando i meccanismi utilizzati per Windows Subsystem for Linux (WSL2) e Windows Sandbox. - Aprire PowerShell come amministratore ed eseguire il comando per consentire l’esecuzione dello script:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -ForceSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - Spegnere la VM. Eseguire lo script dalla cartella in cui è stato estratto lo script scaricato per copiare i driver grafici installati dall’host Hyper-V alla VM e installare i driver sulla VM:
.Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO" - Configurare la VM per renderla pronta per il passthrough della GPU e l’associazione della scheda video:
Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32GbAdd-VMGpuPartitionAdapter -VMName YourVMName- Se si aggiornano i driver grafici su un host Hyper-V, è necessario aggiornare anche i driver grafici sulla VM. La VM deve essere spenta.
.Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO" - Se è necessario rimuovere una scheda video dalla VM, è possibile utilizzare il comando:
Remove-VMGpuPartitionAdapter -VMName "YourVMName"
- Se si aggiornano i driver grafici su un host Hyper-V, è necessario aggiornare anche i driver grafici sulla VM. La VM deve essere spenta.
Se la scheda video è stata collegata correttamente alla VM, dovresti vedere l’adattatore video appropriato in Gestione dispositivi della VM. Vedrai anche gli effetti visivi per il tema del desktop Windows guest, come la trasparenza, ecc.
Tieni presente che alcuni giochi e applicazioni potrebbero non funzionare anche dopo aver configurato il passthrough della GPU. Ciò può accadere quando un’applicazione avvia forzatamente un controllo di compatibilità della scheda grafica. Le informazioni sulla scheda video collegata nel sistema operativo guest sono diverse dalle informazioni sul sistema operativo host. Alcune applicazioni possono eseguire il controllo “in esecuzione in una VM”.
Se le applicazioni che utilizzano OpenGL non funzionano nella VM, installare OpenGL Compatibility Pack può essere utile in alcuni casi.
Quando si utilizza il metodo di partizionamento della GPU per Windows 10 e Windows 11, il modello di scheda video visualizzato in Gestione dispositivi è diverso dal modello di scheda grafica fisica visualizzato sull’host Hyper-V. È possibile visualizzare un driver Microsoft speciale per questo dispositivo. Gli strumenti specifici del vendor, come il pannello di controllo NVIDIA (o il pannello di controllo AMD), non sono disponibili nella VM.
Un altro problema che si può verificare si presenta se si chiude una connessione RDP senza disconnettersi da una sessione RDP. In questo caso, tutta la memoria della GPU può essere disconnessa e tutte le applicazioni che utilizzano la GPU segnaleranno l’impossibilità di accedere alla memoria video. In questo caso, tali applicazioni smetteranno di funzionare e la riconnessione tramite RDP non risolverà il problema. Sarà obbligatorio riavviare le applicazioni che utilizzano la GPU.
Risoluzione dei problemi relativi al passthrough della GPU
Se hai configurato il passthrough della GPU Hyper-V e collegato una scheda video a una VM, ma la scheda video non funziona correttamente, verifica quanto segue:
- Assicurarsi che siano installati i driver grafici più recenti e che non vi siano errori relativi ai driver. Aprire Gestione dispositivi e controllare lo stato del dispositivo e del driver. È necessario installare i driver scaricati dai siti Web ufficiali dei fornitori (NVIDIA, AMD, Intel) e non utilizzando Windows Update.
- Assicurarsi di aver assegnato spazio MIMO sufficiente alla propria VM.
- Verificare che la configurazione GPU passthrough sia supportata dal vendor della scheda grafica. Non tutte le schede video della serie cliente supportano questa funzione. I vendor possono preferire abilitare GPU passthrough solo per le schede video di fascia alta.
- Un’applicazione in esecuzione all’interno di una VM deve supportare la scheda video e i relativi driver per funzionare correttamente.
- Abilitare un criterio di gruppo per utilizzare la GPU quando ci si connette tramite Desktop remoto a una VM:
Computer ConfigurationAdministrator TemplatesWindows ComponentsRemote Desktop ServicesRemote Desktop Session HostRemote Session EnvironmentUse hardware graphics adapters for all Remote Desktop Services sessionsImpostare il valore del criterio di gruppo su Abilitato.
- Se viene visualizzato un errore del tipo “The operation failed because the object was not found” o Error 12, provare ad aggiungere le chiavi di registro in
HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsHyperVcon i valori:
RequireSecureDeviceAssignment = 0 (REG_DWORD)RequireSupportedDeviceAssignment = 0 (REG_DWORD)È possibile impostare questi valori con i comandi PowerShell:
Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsHyperV" -Name "RequireSecureDeviceAssignment" -Type DWORD -Value 0 -ForceSet-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsHyperV" -Name "RequireSupportedDeviceAssignment" -Type DWORD -Value 0 -Force - Disabilitare i controlli dell’hypervisor per i driver grafici all’interno della VM. Questa configurazione può essere effettuata in Enterprise Windows Driver Kit (WDK).
- Montare il file ISO WDK sull’unità DVD virtuale della VM.
- Eseguire E:LaunchBuildEnv.cmd (dove E: è un’unità DVD virtuale della VM) e quindi eseguire il comando powershell .
- Vai alla directory di ubicazione dello script
Remove-HypervisorChecks.ps1. - Esegui il comando per rimuovere i controlli dell’hypervisor per un driver video (nell’esempio NVIDIA):
./Remove-HypervisorChecks.ps1 -Nvidia -DriverPath "C:path-to-driverpackage.exe" - Attendere il completamento dell’esecuzione dello script.
- Copiare il driver preparato (un patched-driver.zip file) nella VM, abilitare la modalità di prova sulla VM e installare il driver in un sistema operativo guest.
- Se si verifica l’errore Errore 43, assicurati che la GPU e il bus PCI audio (le schede video NVIDIA possono anche avere funzioni audio) siano mantenuti insieme quando si utilizza il passthrough della GPU della VM.
- Se viene visualizzato il seguente errore durante l’esecuzione del comando:
Update-VMGpuPartitionDriver.ps1 -VMName "YourVMName" -GPUName "AUTO"Questo errore può essere causato dalla presenza di più partizioni (volumi) su un disco rigido virtuale. Provare a impostare l’attributo nascosto per le partizioni non di sistema (OS) o eliminare temporaneamente queste partizioni dopo aver copiato i dati necessari. Un’opzione alternativa è quella di impostare esplicitamente la partizione di sistema (OS) necessaria nello script o nel comando PowerShell.
Conclusione
L’utilizzo di una VM con GPU passthrough su un host Hyper-V può essere la soluzione ottimale in alcuni casi, ma è necessario essere consapevoli delle limitazioni. L’hardware di livello server e i sistemi operativi Windows Server sono generalmente preferibili per l’utilizzo di una scheda video discreta su VM. Verificare il software e l’hardware supportati prima di avviare la configurazione. Non dimenticare di eseguire il backup delle VM Hyper-V per evitare di perdere dati e tempo se qualcosa va storto durante la configurazione di una scheda video per le VM.