Compartilhar via


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

Saiba como usar a Atribuição de Dispositivo Discreto (DDA) para passar um dispositivo PCIe inteiro para uma máquina virtual (VM) com o PowerShell. 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.

Este artigo orienta você pelas 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

Pré-requisitos

Antes de usar o DDA para implantar dispositivos gráficos, você precisa ter o seguinte.

  • Um host Hyper-V executando o Windows Server 2016 ou posterior.

  • Uma VM executando um dos seguintes sistemas operacionais:

    • Windows Server 2016 ou posterior.

    • Windows 10 ou posterior.

  • Revise o Plano de implantação de dispositivos usando atribuição de dispositivo discreto para garantir que seu hardware seja compatível com DDA.

    • Execute o Script do PowerShell SurveyDDA.ps1. para identificar se o servidor está configurado corretamente. O script também exibe quais dispositivos podem ser passados usando a Atribuição de Dispositivo Discreto.
  • Direitos administrativos para o host Hyper-V.

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

Configurar a VM para DDA

A primeira etapa na solução é resolver as restrições de DDA para as VMs.

  1. Entre no site do host Hyper-V como administrador.

  2. Abra um prompt do PowerShell elevado.

  3. 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 de E/S mapeada de memória de 32 bits (MMIO) 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. Mas se eles fornecerem um driver, instale-o antes de desmontar o dispositivo da partição 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.

Exemplo - 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ê passar uma GPU para uma VM, mas os Serviços de Área de Trabalho Remota ou um aplicativo não estiver reconhecendo a GPU, verifique os seguintes problemas comuns.

  • Certifique-se de instalar a versão mais recente do controlador suportado pelo fornecedor da GPU e de que o controlador não está comunicando 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 o Editor de Política de Grupo Local no convidado). Navegue 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 de aplicar a política.