Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aprenda a usar la asignación discreta de dispositivos (DDA) para pasar un dispositivo PCIe completo a una máquina virtual (VM) con PowerShell. Esto permite el acceso de alto rendimiento a dispositivos como el almacenamiento NVMe o las tarjetas gráficas desde una máquina virtual mientras se pueden aplicar los controladores nativos del dispositivo. 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.
En este artículo se describen los pasos para usar un dispositivo con DDA:
- Configuración de la máquina virtual para DDA
- Desmontar el dispositivo de la partición del host
- Asignación del dispositivo a la máquina virtual invitada
Prerrequisitos
Para poder usar DDA para implementar dispositivos gráficos, debe tener lo siguiente.
Un host de Hyper-V que ejecuta Windows Server 2016 o posterior.
Una máquina virtual que ejecuta uno de los siguientes sistemas operativos:
Windows Server 2016 o posterior.
Windows 10 o posterior.
Revise el Plan para la implementación de dispositivos mediante la asignación discreta de dispositivos para asegurarse de que su hardware sea compatible con la DDA.
- Ejecute el SurveyDDA.ps1. Script de PowerShell para identificar si el servidor está configurado correctamente. El script también muestra qué dispositivos se pueden transferir utilizando Asignación Discreta de Dispositivos.
Derechos administrativos para el host Hyper-V.
(Opcional) Aunque no es necesario, si la virtualización de E/S raíz única (SR-IOV) no está habilitada o compatible, es posible que encuentre problemas al usar DDA para implementar dispositivos gráficos.
Configuración de la máquina virtual para DDA
El primer paso de la solución es abordar las restricciones de DDA a las máquinas virtuales.
Inicie sesión en el host de Hyper-V como administrador.
Abra PowerShell con permisos elevados.
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
Algunos hardware funcionan mejor si la máquina virtual está configurada de una manera determinada. Para más información sobre si necesita 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 y en esta entrada de blog.
Habilite Write-Combining en la CPU mediante el siguiente cmdlet:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Configure el espacio MMIO (E/S asignada a la memoria) de 32 bits mediante el siguiente cmdlet:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
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 MMIO mostrados son valores razonables que se establecen para experimentar con una sola GPU. Si después de iniciar la máquina virtual, el dispositivo notifica un error relacionado con recursos insuficientes, 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 del 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 de la discreción del proveedor de hardware proporcionar este controlador. Pero si proporcionan un controlador, instálelo antes de desmontar el dispositivo de la partición 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 -Force
opción 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.
Localizar la trayectoria 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 ubicación de ejemplo tiene este aspecto: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
. Para obtener más información sobre la ruta de acceso, 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 -Force
opción 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
Asignación del 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 ha montado correctamente en una máquina virtual, ahora puede iniciar esa máquina virtual e interactuar con el dispositivo como si estuviera ejecutando en un sistema sin sistema operativo. 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 puede interactuar de nuevo con el dispositivo.
Ejemplo: Montaje de una GPU en una máquina virtual
En este ejemplo se 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 pasa una GPU a una máquina virtual, pero los Servicios de Escritorio remoto o una aplicación no reconocen la GPU, compruebe los siguientes problemas comunes.
Asegúrese de instalar 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 MMIO asignado dentro de la máquina virtual. Para obtener más información, vea Espacio MMIO.
Asegúrese de usar una GPU que admita el proveedor en esta configuración. Por ejemplo, algunos proveedores impiden que sus tarjetas de consumidor funcionen cuando se pasan a una máquina virtual.
Asegúrese de que la aplicación admite 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 aceptación 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 GPO aplicado al invitado (o al Editor de directivas de grupo local en el invitado). Vaya 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 de gráficos de hardware para todas las sesiones de Servicios de Escritorio remoto.
Establezca el valor de directiva de grupo en Habilitado y reinicie la máquina virtual después de aplicar la directiva.