Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como usar a DDA (Atribuição de Dispositivo Discrete) para passar um dispositivo PCIe inteiro para uma VM (máquina virtual) 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 leva você pelas etapas para usar um dispositivo com o DDA:
- Configurar a VM para DDA
- Desmontar o dispositivo da partição do host
- 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.
Examine o Plano de Implantação de Dispositivos usando a Atribuição de Dispositivo Discreta para garantir que seu hardware seja compatível com o DDA.
- Execute o SurveyDDA.ps1. Script do PowerShell para identificar se o servidor está configurado corretamente. O script também exibe quais dispositivos podem ser passados usando a Atribuição de Dispositivo Discrete.
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 tiver suporte, 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.
Entre no host Hyper-V como administrador.
Abra um prompt do PowerShell com privilégios elevados.
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 hardwares 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 blog.
Habilite Write-Combining na CPU usando o seguinte cmdlet:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Configure o espaço de E/S mapeada em memória (MMIO) de 32 bits usando o seguinte cmdlet:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
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, consulte Plan for Deploying Devices using Discrete Device Assignment.
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 eles fornecerem 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, consulte Planejamento para Implantação de Dispositivos usando Atribuição de Dispositivo Discreto.
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 tem esta aparência: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
. Para obter mais informações sobre como localizar o caminho, consulte Plano para Implantação de Dispositivos usando Atribuição Discreta de Dispositivo.
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 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 habilitar novamente o dispositivo no Gerenciador de Dispositivos, e o sistema operacional hospedeiro 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 se há problemas comuns a seguir.
Certifique-se de instalar a versão mais recente do driver compatível com o fornecedor de GPU e de que 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, consulte Espaço MMIO.
Certifique-se de usar uma GPU à qual o fornecedor dá suporte ao uso 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 GPO aplicado ao convidado (ou o Editor de Objeto de Política de Grupo no convidado). Navegue até o seguinte item de Política de Grupo:
Configuração do Computador\Modelos Administrativos\Componentes do Windows\Serviços de Área de Trabalho Remota\Host de Sessão de Área de Trabalho Remota\Ambiente de Sessão Remota\Usar adaptadores 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.