Implantar dispositivos gráficos usando Atribuição Discreta de Dispositivo

Aplica-se a: Windows Server 2022, Windows Server 2019, Microsoft Hyper-V Server 2019, Windows Server 2016, Microsoft Hyper-V Server 2016

A partir do Windows Server 2016, você pode usar a DDA (Atribuição Discreta de Dispositivo) para passar um dispositivo PCIe inteiro para uma máquina virtual (VM). Isso permite acesso de alto desempenho a dispositivos como armazenamento NVMe ou placas gráficas de dentro de uma VM, ao mesmo tempo em que pode aplicar os drivers nativos do dispositivo. Para obter mais informações sobre dispositivos que funcionam e possíveis implicações de segurança, confira Planejar a implantação de dispositivos usando a Atribuição de Dispositivo Discreta.

Importante

Embora não seja necessário, se a Virtualização de E/S de Raiz Única (SR-IOV) não estiver habilitada ou tiver suporte, você poderá encontrar problemas ao usar o DDA para implantar dispositivos gráficos.

Há três etapas para usar um dispositivo com DDA:

  1. Configurar a VM para DDA
  2. Desmontar o dispositivo da partição do host
  3. Atribuir o dispositivo à VM convidada

Você pode executar todos os comandos no host em um console do Windows PowerShell como administrador.

Configurar a VM para DDA

A primeira etapa na solução é resolver as restrições de DDA para as VMs. Configure a Automatic Stop Action de uma VM para habilitar o TurnOff com o seguinte cmdlet do PowerShell:

Set-VM -Name VMName -AutomaticStopAction TurnOff

Preparação da VM para dispositivos gráficos

Alguns elementos de hardware têm um desempenho melhor se a VM estiver configurada de uma determinada maneira. Para obter detalhes sobre se você precisa das configurações a seguir para seu hardware, entre em contato com o fornecedor de hardware. Para obter mais informações, confira Planejar a implantação de dispositivos usando a Atribuição de Dispositivo Discreta e esta postagem no blob.

  1. Habilite a combinação de gravação na CPU usando o seguinte cmdlet:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configure o espaço MMIO de 32 bits usando o seguinte cmdlet:

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Configure um espaço MMIO maior que 32 bits usando o seguinte cmdlet:

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Dica

    Os valores de espaço MMIO mostrados são valores razoáveis a serem definidos para experimentar uma única GPU. Se depois de iniciar a VM, o dispositivo estiver relatando um erro relacionado a recursos insuficientes, você provavelmente precisará modificar esses valores. Para obter mais informações sobre como calcular com precisão os requisitos do MMIO, confira Planejar a implantação de dispositivos usando a Atribuição de Dispositivo Discreta.

Desmontar o dispositivo da partição do host

Siga as instruções nesta seção para desmontar o dispositivo da partição do host.

Instalar o driver de particionamento (opcional)

O DDA oferece aos fornecedores de hardware a capacidade de fornecer um driver de mitigação de segurança com seus dispositivos. Esse driver não é o mesmo que o driver de dispositivo instalado na VM convidada. Cabe ao fornecedor de hardware fornecer esse driver. No entanto, se ele fornecer um driver, instale-o antes de desmontar o dispositivo da partição do host. Entre em contato com o fornecedor de hardware para ver se ele tem um driver de mitigação.

Se nenhum driver de particionamento for fornecido, durante a desmontagem, você deverá usar a opção -Force para ignorar o aviso de segurança. Para obter mais informações sobre as implicações de segurança, confira Planejar a implantação de dispositivos usando a Atribuição de Dispositivo Discreta.

Localizar o caminho de localização do dispositivo

O caminho de localização do PCI é necessário para desmontar e montar o dispositivo do host. Um exemplo de caminho de localização se parece com o seguinte: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000). Para obter mais informações sobre como localizar o caminho de localização, confira Planejar a implantação de dispositivos usando a Atribuição de Dispositivo Discreta.

Desabilitar o dispositivo

Use o Gerenciador de Dispositivos ou o PowerShell para garantir que o dispositivo esteja desabilitado.

Desmontar o dispositivo

Dependendo se o fornecedor forneceu um driver de mitigação, você deve usar a opção -Force ou não, conforme mostrado aqui:

  • Se um driver de mitigação tiver sido instalado, use o seguinte cmdlet:

    Dismount-VMHostAssignableDevice -LocationPath $locationPath
    
  • Se um driver de mitigação não tiver sido instalado, use o seguinte cmdlet:

    Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
    

Atribuir o dispositivo à VM convidada

A etapa final é informar ao Hyper-V que uma VM deve ter acesso ao dispositivo. Especifique o caminho de localização e o nome da VM.

Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName

Concluir tarefas na VM

Depois que um dispositivo for montado com êxito em uma VM, agora você poderá iniciar essa VM e interagir com o dispositivo como se estivesse em execução em um sistema bare-metal. Agora você pode instalar os drivers do fornecedor de hardware na VM e os aplicativos podem ver o hardware. Você pode verificar isso abrindo o Gerenciador de Dispositivos na VM convidada e vendo que o hardware está disponível.

Remover um dispositivo e devolvê-lo ao host

Se você quiser retornar o dispositivo de volta ao estado original, deverá interromper a VM e 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

Em seguida, você pode reabilitar o dispositivo no Gerenciador de Dispositivos e o sistema operacional do host poderá interagir com o dispositivo novamente.

Montar uma GPU em uma VM

Este exemplo usa o PowerShell para configurar uma VM chamada ddatest1 para usar a primeira GPU disponível pelo fabricante NVIDIA e atribuí-la à 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

Solucionar problemas com a montagem de uma GPU

Se você passou uma GPU para uma VM, mas os Serviços de Área de Trabalho Remota ou um aplicativo não está reconhecendo a GPU, verifique os seguintes problemas comuns:

  • Verifique se você instalou a versão mais recente do driver com suporte do fornecedor de GPU e se o driver não está relatando erros. Você pode fazer isso verificando o estado do dispositivo no Gerenciador de Dispositivos.

  • Verifique se o dispositivo tem espaço MMIO suficiente alocado na VM. Para obter mais informações, confira Espaço MMIO.

  • Certifique-se de usar uma GPU cujo uso tenha suporte do fornecedor nesta configuração. Por exemplo, alguns fornecedores impedem que seus cartões de consumidor funcionem quando passados para uma VM.

  • Verifique se o aplicativo dá suporte à execução dentro de uma VM e se o aplicativo dá suporte à GPU e aos drivers associados. Alguns aplicativos têm listas de permissões de GPUs e ambientes.

  • Se você usar a função Host da Sessão da Área de Trabalho Remota ou os Serviços Multipontos do Windows no convidado, verifique se uma entrada de Política de Grupo específica está definida para permitir o uso da GPU padrão. Use um objeto de política de grupo aplicado ao convidado (ou ao Editor de Política de Grupo Local no convidado) para navegar até o seguinte item de Política de Grupo:

    Configuração do Computador\Modelos de Administrador\Componentes do Windows\Serviços de Área de Trabalho Remota\Host de Sessão da Área de Trabalho Remota\Ambiente de Sessão Remota\Usar adaptadores de elementos gráficos de hardware para todas as sessões dos Serviços de Área de Trabalho Remota.

    Defina o valor da Política de Grupo como Habilitado e reinicialize a VM depois que a política tiver sido aplicada.