Implementación de dispositivos de gráficos mediante la asignación discreta de dispositivosDeploy graphics devices using Discrete Device Assignment

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

A partir de Windows Server 2016, puede usar la asignación discreta de dispositivos, o DDA, para pasar un dispositivo PCIe completo en una máquina virtual.Starting with Windows Server 2016, you can use Discrete Device Assignment, or DDA, to pass an entire PCIe Device into a VM. Esto permitirá el acceso de alto rendimiento a dispositivos como el almacenamiento de NVMe o tarjetas de gráficos desde una máquina virtual mientras se pueden aprovechar los controladores nativos de los dispositivos.This will allow high performance access to devices like NVMe storage or Graphics Cards from within a VM while being able to leverage the devices native drivers. Visite el plan para la implementación de dispositivos mediante la asignación discreta de dispositivos para obtener más detalles sobre qué dispositivos funcionan, cuáles son las posibles implicaciones de seguridad, etc.Please visit the Plan for Deploying Devices using Discrete Device Assignment for more details on which devices work, what are the possible security implications, etc.

Hay tres pasos para usar un dispositivo con asignación discreta de dispositivos:There are three steps to using a device with Discrete Device Assignment:

  • Configuración de la máquina virtual para la asignación discreta de dispositivosConfigure the VM for Discrete Device Assignment
  • Desmontar el dispositivo de la partición de hostDismount the Device from the Host Partition
  • Asignación del dispositivo a la máquina virtual invitadaAssigning the Device to the Guest VM

El comando All puede ejecutarse en el host de una consola de Windows PowerShell como administrador.All command can be executed on the Host on a Windows PowerShell console as an Administrator.

Configuración de la máquina virtual para DDAConfigure the VM for DDA

La asignación discreta de dispositivos impone algunas restricciones a las máquinas virtuales y es necesario realizar el siguiente paso.Discrete Device Assignment imposes some restrictions to the VMs and the following step needs to be taken.

  1. Configurar la "acción de detención automática" de una máquina virtual para que se ejecuteConfigure the “Automatic Stop Action” of a VM to TurnOff by executing
Set-VM -Name VMName -AutomaticStopAction TurnOff

Se requiere una preparación adicional de la máquina virtual para los dispositivos gráficosSome Additional VM preparation is required for Graphics Devices

Cierto hardware funciona mejor si la máquina virtual está configurada de una manera determinada.Some hardware performs better if the VM in configured in a certain way. Para obtener más información sobre si necesita o no las siguientes configuraciones para el hardware, póngase en contacto con el proveedor de hardware.For details on whether or not you need the following configurations for your hardware, please reach out to the hardware vendor. Encontrará más detalles en el plan para la implementación de dispositivos mediante la asignación discreta de dispositivos y en esta entrada de blog.Additional details can be found on Plan for Deploying Devices using Discrete Device Assignment and on this blog post.

  1. Habilitar la combinación de escritura en la CPUEnable Write-Combining on the CPU
    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configurar el espacio MMIO de 32 bitsConfigure the 32 bit MMIO space
    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Configurar un espacio de enmmio de más de 32 bitsConfigure greater than 32 bit MMIO space
    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Sugerencia

    Los valores de espacio MMIO anteriores son valores razonables que se establecen para experimentar con una sola GPU.The MMIO space values above are reasonable values to set for experimenting with a single GPU. Si después de iniciar la máquina virtual, el dispositivo informa de un error relacionado con no hay suficientes recursos, es probable que tenga que modificar estos valores.If after starting the VM, the device is reporting an error relating to not enough resources, you'll likely need to modify these values. Consulte planeación de la implementación de dispositivos mediante la asignación discreta de dispositivos para obtener información sobre cómo calcular con precisión los requisitos de MMIO.Consult Plan for Deploying Devices using Discrete Device Assignment to learn how to precisely calculate MMIO requirements.

Desmontar el dispositivo de la partición de hostDismount the Device from the Host Partition

Opcional: instalar el controlador de particionamientoOptional - Install the Partitioning Driver

La asignación discreta de dispositivos proporciona a los expendedores de hardware la capacidad de proporcionar un controlador de mitigación de seguridad con sus dispositivos.Discrete Device Assignment provide hardware venders the ability to provide a security mitigation driver with their devices. Tenga en cuenta que este controlador no es el mismo que el controlador de dispositivo que se instalará en la máquina virtual invitada.Note that this driver is not the same as the device driver that will be installed in the guest VM. Es responsabilidad del proveedor de hardware proporcionar este controlador; sin embargo, si lo proporcionan, instálelo antes de desmontar el dispositivo de la partición del host...It's up to the hardware vendor's discretion to provide this driver, however, if they do provide it, please install it prior to dismounting the device from the host partition. Póngase en contacto con el proveedor de hardware para obtener más información sobre si tienen un controlador de mitigación.Please reach out to the hardware vendor for more information on if they have a mitigation driver

Si no se proporciona ningún controlador de particionamiento, durante el desmontaje debe utilizar la -force opción para omitir la advertencia de seguridad.If no Partitioning driver is provided, during dismount you must use the -force option to bypass the security warning. Lea más sobre las implicaciones de seguridad de hacerlo en planear la implementación de dispositivos mediante la asignación discreta de dispositivos.Please read more about the security implications of doing this on Plan for Deploying Devices using Discrete Device Assignment.

Buscar la ruta de acceso de la ubicación del dispositivoLocating the Device's Location Path

La ruta de acceso de la ubicación de PCI es necesaria para desmontar y montar el dispositivo del host.The PCI Location path is required to dismount and mount the device from the Host. Una ruta de acceso de ubicación de ejemplo tiene el siguiente aspecto: "PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)" .An example location path looks like the following: "PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)". Aquí encontrará más detalles sobre cómo encontrar la ruta de acceso de Ubicación: planear la implementación de dispositivos mediante la asignación discreta de dispositivos.More details on located the Location Path can be found here: Plan for Deploying Devices using Discrete Device Assignment.

Deshabilitar el dispositivoDisable the Device

Con Device Manager o PowerShell, asegúrese de que el dispositivo está "deshabilitado".Using Device Manager or PowerShell, ensure the device is “disabled.”

Desmontar el dispositivoDismount the Device

Dependiendo de si el proveedor proporcionó un controlador de mitigación, deberá usar la opción "-Force" o no.Depending on if the vendor provided a mitigation driver, you'll either need to use the “-force” option or not.

  • Si se instaló un controlador de mitigaciónIf a Mitigation Driver was installed
    Dismount-VMHostAssignableDevice -LocationPath $locationPath
    
  • Si no se instaló un controlador de mitigaciónIf a Mitigation Driver was not installed
    Dismount-VMHostAssignableDevice -force -LocationPath $locationPath
    

Asignación del dispositivo a la máquina virtual invitadaAssigning the Device to the Guest VM

El paso final consiste en indicar a Hyper-V que una máquina virtual debe tener acceso al dispositivo.The final step is to tell Hyper-V that a VM should have access to the device. Además de la ruta de acceso de ubicación que se encuentra arriba, deberá conocer el nombre de la máquina virtual.In addition to the location path found above, you'll need to know the name of the vm.

Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName

Pasos siguientesWhat's Next

Una vez que un dispositivo se monta correctamente en una máquina virtual, ahora puede iniciar la máquina virtual e interactuar con el dispositivo como lo haría normalmente si estuviera ejecutando en un sistema sin sistema operativo.After a device is successfully mounted in a VM, you're now able to start that VM and interact with the device as you normally would if you were running on a bare metal system. Esto significa que ahora puede instalar los controladores del proveedor de hardware en la máquina virtual y las aplicaciones podrán ver que el hardware está presente.This means that you're now able to install the Hardware Vendor's drivers in the VM and applications will be able to see that hardware present. Para comprobarlo, abra el administrador de dispositivos en la máquina virtual invitada y vea que el hardware se muestra ahora.You can verify this by opening device manager in the Guest VM and seeing that the hardware now shows up.

Quitar un dispositivo y devolverlo al hostRemoving a Device and Returning it to the Host

Si desea devolver el dispositivo a su estado original, tendrá que detener la máquina virtual y emitir lo siguiente:If you want to return he device back to its original state, you will need to stop the VM and issue the following:

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

Después, puede volver a habilitar el dispositivo en el administrador de dispositivos y el sistema operativo host podrá interactuar con el dispositivo de nuevo.You can then re-enable the device in device manager and the host operating system will be able to interact with the device again.

EjemploExample

Montaje de una GPU en una máquina virtualMounting a GPU to a VM

En este ejemplo, se usa PowerShell para configurar una máquina virtual denominada "ddatest1" para que la primera GPU esté disponible por el fabricante NVIDIA y asignarla a la máquina virtual.In this example we use PowerShell to configure a VM named “ddatest1” to take the first GPU available by the manufacturer NVIDIA and assign it into the VM.

#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 problemasTroubleshooting

Si ha pasado una GPU a una máquina virtual pero Escritorio remoto o una aplicación no reconoce la GPU, busque los siguientes problemas comunes:If you've passed a GPU into a VM but Remote Desktop or an application isn't recognizing the GPU, check for the following common issues:

  • Asegúrese de que ha instalado la versión más reciente del controlador compatible con el proveedor de GPU y que el controlador no informa de los errores comprobando el estado del dispositivo en Device Manager.Make sure you've installed the most recent version of the GPU vendor's supported driver and that the driver isn't reporting errors by checking the device state in Device Manager.
  • Asegúrese de que el dispositivo tiene suficiente espacio MMIO asignado dentro de la máquina virtual.Make sure your device has enough MMIO space allocated within the VM. Para obtener más información, vea espacio de MMIO.To learn more, see MMIO Space.
  • Asegúrese de que está usando una GPU que el proveedor admite en esta configuración.Make sure you're using a GPU that the vendor supports being used in this configuration. Por ejemplo, algunos proveedores impiden que sus tarjetas de consumidor funcionen cuando pasan a una máquina virtual.For example, some vendors prevent their consumer cards from working when passed through to a VM.
  • Asegúrese de que la aplicación que se ejecuta admite la ejecución dentro de una máquina virtual y que la aplicación admite tanto la GPU como sus controladores asociados.Make sure the application being run supports running inside a VM, and that both the GPU and its associated drivers are supported by the application. Algunas aplicaciones tienen listas de permitidos de GPU y entornos.Some applications have allow-lists of GPUs and environments.
  • Si usa el rol host de sesión de Escritorio remoto o Windows MultiPoint Services en el invitado, deberá asegurarse de que una entrada de directiva de grupo específica está establecida para permitir el uso de la GPU predeterminada.If you're using the Remote Desktop Session Host role or Windows Multipoint Services on the guest, you will need to make sure that a specific Group Policy entry is set to allow use of the default GPU. Con un objeto de directiva de grupo aplicado al invitado (o al editor de directivas de grupo local en el invitado), navegue hasta el siguiente directiva de grupo elemento: configuración del equipo > plantillas de administrador > componentes de Windows > servicios de escritorio remoto > escritorio remoto > entorno de sesión remota > del host de sesión use el adaptador de gráficos predeterminado de hardware para todas las sesiones de servicios de escritorio remoto.Using a Group Policy Object applied to the guest (or the Local Group Policy Editor on the guest), navigate to the following Group Policy item: Computer Configuration > Administrator Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Remote Session Environment > Use the hardware default graphics adapter for all Remote Desktop Services sessions. Establezca este valor en habilitado y, a continuación, reinicie la máquina virtual una vez que se haya aplicado la Directiva.Set this value to Enabled, then reboot the VM once the policy has been applied.