Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 o acesso de alto desempenho a dispositivos como armazenamento NVMe ou placas gráficas de dentro de uma VM, enquanto é capaz de aplicar os drivers nativos do dispositivo. Para obter mais informações sobre dispositivos que funcionam e possíveis implicações de segurança, consulte Planejar a implantação de dispositivos usando a atribuição de dispositivo discreto.
Este artigo apresenta as etapas para usar um dispositivo com DDA:
- Configurar a VM para DDA
- Desmonte o dispositivo da partição do host
- Atribuir o dispositivo à VM convidada
Pré-requisitos
Antes de poder 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.
Reveja o Plano de Implementação de Dispositivos Utilizando a Atribuição de Dispositivos Discretos para garantir que o seu hardware é compatível com 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 Discreto.
Direitos administrativos para o servidor Hyper-V.
(Opcional) Embora não seja necessária, 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 da solução é abordar as restrições de DDA para as VMs.
Entre no host Hyper-V como administrador.
Abra um prompt do PowerShell com permissões elevadas.
Configure o
Automatic Stop Action
de uma VM para habilitar o TurnOff com o seguinte cmdlet do PowerShell:Set-VM -Name VMName -AutomaticStopAction TurnOff
Preparação de VM para dispositivos gráficos
Alguns hardwares funcionam melhor se a VM estiver configurada de uma determinada maneira. Para obter detalhes sobre se você precisa das seguintes configurações para seu hardware, entre em contato com o fornecedor do hardware. Para obter mais informações, consulte Plan for Deploying Devices using Discrete Device Assignment (Planejar a implantação de dispositivos usando a atribuição de dispositivo discreto ) e nesta postagem de blog.
Habilite Write-Combining na CPU usando o seguinte cmdlet:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Configure o espaço de E/S mapeado de memória de 32 bits (MMIO) 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
Sugestão
Os valores de espaço MMIO mostrados são valores razoáveis para definir para experimentar com 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 Planejar a implantação de dispositivos usando a atribuição de dispositivo discreto.
Desmonte o dispositivo da partição do host
Siga as instruções nesta seção para desmontar o dispositivo da partição do host.
Instale o driver de particionamento (opcional)
O DDA dá 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. Fica a critério do fornecedor de hardware fornecer esse driver. Mas 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 -Force
opção para ignorar o aviso de segurança. Para obter mais informações sobre as implicações de segurança, consulte Planejar a implantação de dispositivos usando a atribuição de dispositivo discreto.
Localize o caminho de localização do dispositivo
O caminho de localização PCI é necessário para desmontar e montar o dispositivo a partir 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 do local, consulte Planejar a implantação de dispositivos usando a atribuição de dispositivo discreto.
Desativar 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 -Force
opção 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 é dizer aos 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 é montado com êxito em uma VM, agora você pode iniciar essa VM e interagir com o dispositivo como se estivesse sendo executado 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 verificá-lo abrindo o Gerenciador de Dispositivos na VM convidada e vendo se o hardware está disponível.
Remover um dispositivo e devolvê-lo ao host
Se você quiser retornar o dispositivo de volta ao seu estado original, você deve parar 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 reativar o dispositivo no Gerenciador de dispositivos e o sistema operacional host é capaz de interagir com o dispositivo novamente.
Exemplo - Monte uma GPU em uma VM
Este exemplo usa o PowerShell para configurar uma VM chamada ddatest1 para pegar 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 driver suportado pelo fornecedor da GPU e que o driver não está relatando erros. Pode fazê-lo verificando o estado do dispositivo no Gestor 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 que o fornecedor suporta ser usada nessa configuração. Por exemplo, alguns fornecedores impedem que seus cartões de consumidor funcionem quando passados para uma VM.
Verifique se o aplicativo suporta a execução dentro de uma VM e se o aplicativo suporta a GPU e seus 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 Multiponto do Windows no convidado, deverá certificar-se de que uma entrada específica da Diretiva de Grupo esteja definida para permitir o uso da GPU padrão. Utilize um objeto de diretivas de grupo aplicado ao sistema do convidado (ou o Editor de Diretivas de Grupo Local no sistema do convidado). Navegue até o seguinte item de Diretiva de Grupo:
Configuração do Computador\Modelos do Administrador\Componentes do Windows\Serviços de Área de Trabalho Remota\Host da Sessão da Á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 Ativado e reinicialize a VM depois de aplicar a política.