Implementación de dispositivos gráficos mediante la asignación discreta de dispositivos

Se aplica a: Windows Server 2022, Windows Server 2019, Microsoft Hyper-V Server 2019, Windows Server 2016, Microsoft Hyper-V Server 2016

A partir de Windows Server 2016, puede usar la asignación discreta de dispositivos (DDA) para pasar un dispositivo PCIe completo a una máquina virtual (VM). Esto permite el acceso de alto rendimiento a dispositivos como el almacenamiento NVMe o las tarjetas gráficas desde una máquina virtual al tiempo que se pueden aplicar los controladores nativos de los dispositivos. Para obtener más información sobre los dispositivos que funcionan y posibles implicaciones de seguridad, consulte Planear la implementación de dispositivos mediante la asignación de dispositivos discretos.

Importante

Aunque no es necesario, si la Virtualización de E/S de raíz única (SR-IOV) no está habilitada o no es compatible, es posible que encuentre problemas al usar DDA para implementar dispositivos gráficos.

Hay tres pasos para usar un dispositivo con DDA:

  1. Configurar la máquina virtual para DDA
  2. Desmontar el dispositivo de la partición de host
  3. Asignar el dispositivo a la máquina virtual invitada

Puede ejecutar todos los comandos en el host en una consola de Windows PowerShell como administrador.

Configuración de la máquina virtual para DDA

El primer paso de la solución es abordar las restricciones de DDA de las máquinas virtuales. Configure el Automatic Stop Action de una máquina virtual para habilitar TurnOff con el siguiente cmdlet de PowerShell:

Set-VM -Name VMName -AutomaticStopAction TurnOff

Preparación de máquinas virtuales para dispositivos gráficos

Cierto hardware funciona mejor si la máquina virtual está configurada de una determinada manera. Para obtener más información sobre si se necesitan las siguientes configuraciones para el hardware, póngase en contacto con el proveedor de hardware. Para obtener más información, consulte Planear la implementación de dispositivos mediante la asignación discreta de dispositivos en esta entrada de blog.

  1. Habilite Write-Combining en la CPU mediante el siguiente cmdlet:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configure el espacio MMIO de 32 bits mediante el siguiente cmdlet:

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Configure un espacio MMIO de más de 32 bits mediante el siguiente cmdlet:

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Sugerencia

    Los valores de espacio de MMIO que se muestran son valores razonables que se establecerán para experimentar con una sola GPU. Si después de iniciar la máquina virtual el dispositivo notifica un error relacionado con la insuficiencia de recursos, es probable que tenga que modificar estos valores. Para obtener más información sobre cómo calcular con precisión los requisitos de MMIO, consulte Planear la implementación de dispositivos mediante la asignación discreta de dispositivos.

Desmontar el dispositivo de la partición de host

Siga las instrucciones de esta sección para desmontar el dispositivo de la partición host.

Instalación del controlador de creación de particiones (opcional)

DDA ofrece a los proveedores de hardware la capacidad de proporcionar un controlador de mitigación de seguridad con sus dispositivos. Este controlador no es el mismo que el controlador de dispositivo instalado en la máquina virtual invitada. Depende del criterio del proveedor de hardware proporcionar este controlador. Pero si proporciona un controlador, instálelo antes de desmontar el dispositivo de la partición de host. Póngase en contacto con el proveedor de hardware para ver si tiene un controlador de mitigación.

Si no se proporciona ningún controlador de creación de particiones, durante el desmontaje debe usar la opción -Force para omitir la advertencia de seguridad. Para obtener más información sobre las implicaciones de seguridad, consulte Planear la implementación de dispositivos mediante la asignación discreta de dispositivos.

Búsqueda de la ruta de acceso de ubicación del dispositivo

La ruta de acceso de la ubicación PCI es necesaria para desmontar y montar el dispositivo desde el host. Una ruta de acceso de ubicación de ejemplo tiene el siguiente aspecto: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000). Para obtener más información sobre cómo localizar la ruta de acceso de ubicación, vea Planear la implementación de dispositivos mediante la asignación discreta de dispositivos.

Deshabilitar el dispositivo

Use el Administrador de dispositivos o PowerShell para asegurarse de que el dispositivo está Deshabilitado.

Desmontar el dispositivo

Dependiendo de si el proveedor proporcionó un controlador de mitigación, debe usar la opción -Force o no, como se muestra aquí:

  • Si se instaló un controlador de mitigación, use el siguiente cmdlet:

    Dismount-VMHostAssignableDevice -LocationPath $locationPath
    
  • Si no se instaló un controlador de mitigación, use el siguiente cmdlet:

    Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
    

Asignar el dispositivo a la máquina virtual invitada

El último paso es indicar a Hyper-V que una máquina virtual debe tener acceso al dispositivo. Especifique la ruta de acceso de ubicación y el nombre de la máquina virtual.

Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName

Completar tareas en la máquina virtual

Una vez que un dispositivo se haya montado correctamente en una máquina virtual, podrá iniciar esa máquina virtual e interactuar con el dispositivo como si se estuviera ejecutando en un sistema “bare metal”. Ahora puede instalar los controladores del proveedor de hardware en la máquina virtual y las aplicaciones pueden ver el hardware. Para comprobarlo, abra el Administrador de dispositivos en la máquina virtual invitada y vea que el hardware esté disponible.

Quitar un dispositivo y devolverlo al host

Si desea devolver el dispositivo a su estado original, debe detener la máquina virtual y emitir este comando:

# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath

A continuación, puede volver a habilitar el dispositivo en el Administrador de dispositivos y el sistema operativo host podrá interactuar de nuevo con el dispositivo.

Montaje de una GPU en una máquina virtual

Este ejemplo usa PowerShell para configurar una máquina virtual denominada ddatest1 para tomar la primera GPU disponible por el fabricante NVIDIA y asignarla a la máquina virtual.

# 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

Solución de problemas con el montaje de una GPU

Si ha pasado una GPU a una máquina virtual, pero Servicios de Escritorio remoto o una aplicación no reconocen la GPU, compruebe los siguientes problemas comunes:

  • Asegúrese de que ha instalado la versión más reciente del controlador compatible del proveedor de GPU y de que el controlador no notifica errores. Para ello, compruebe el estado del dispositivo en el Administrador de dispositivos.

  • Asegúrese de que el dispositivo tiene suficiente espacio de MMIO asignado en la máquina virtual. Para obtener más información, consulte Espacio MMIO.

  • Asegúrese de que usa una GPU cuya utilización admite el proveedor en esta configuración. Por ejemplo, algunos proveedores impiden que las tarjetas de sus consumidores funcionen cuando se pasan a una máquina virtual.

  • Asegúrese de que la aplicación admita la ejecución dentro de una máquina virtual y de que la aplicación admita tanto la GPU como sus controladores asociados. Algunas aplicaciones tienen listas de permitidos de GPU y entornos.

  • Si usa el rol Host de sesión de Escritorio remoto o Windows Multipoint Services en el invitado, debe asegurarse de que se ha establecido una entrada de directiva de grupo específica para permitir el uso de la GPU predeterminada. Use un objeto de directiva de grupo aplicado al invitado (o al Editor de directivas de grupo local en el invitado) para ir al siguiente elemento de directiva de grupo:

    Configuración del equipo\Plantillas de administrador\Componentes de Windows\Servicios de Escritorio remoto\Host de sesión de Escritorio remoto\Entorno de sesión remota\Usar adaptadores gráficos de hardware para todas las sesiones de Servicios de Escritorio remoto.

    Establezca el valor de la directiva de grupo en Habilitado y reinicie la máquina virtual una vez que se haya aplicado la directiva.