Planejar a implantação de dispositivos usando Atribuição de Dispositivo Distinto

A Atribuição de Dispositivo Distinto permite que o hardware físico PCIe (Peripheral Component Interconnect Express) fique diretamente acessível a uma VM (máquina virtual). Este artigo discute os tipos de dispositivos que podem ser usados, os requisitos do sistema host, as limitações impostas às VMs e as implicações de segurança.

Para atribuição discreta de dispositivo, a Microsoft dá suporte a duas classes de dispositivo: adaptadores gráficos e dispositivos de armazenamento NVMe. É provável que outros dispositivos funcionem e os fornecedores de hardware possam oferecer instruções de suporte para eles. Em caso de outros dispositivos, entre em contato com os fornecedores de hardware específicos para obter suporte.

Para saber mais sobre outros métodos de virtualização de GPU, confira Planejar a aceleração de GPU no Windows Server. Se você quiser experimentar a Atribuição de Dispositivo Distinto, acesse Como implantar dispositivos gráficos usando a Atribuição de Dispositivo Distinto ou Como implantar dispositivos de armazenamento usando a Atribuição de Dispositivo Distinto.

VMs e sistemas operacionais convidados com suporte

A Atribuição de Dispositivo Discreto tem suporte para VMs de Geração 1 ou 2. Os convidados com suporte incluem:

Para obter mais informações, confira Máquinas virtuais do Linux e do FreeBSD para Hyper-V no Windows Server e no Windows.

Requisitos de sistema

O sistema precisa atender aos Requisitos de hardware para Windows Server e aos Requisitos do sistema para Hyper-V no Windows Server. A Atribuição de Dispositivo Distinto também exige um hardware de classe de servidor capaz de conceder ao sistema operacional o controle sobre a configuração da malha da PCIe (Native PCI Express Control). Além disso, o PCIe Root Complex precisa dar suporte ao ACS (Serviço de Controle de Acesso), que permite que o Hyper-V force todo o tráfego da PCIe por meio da unidade de gerenciamento de memória de entrada e saída.

Esses recursos geralmente não são expostos diretamente no BIOS do servidor e geralmente ficam ocultos atrás de outras configurações. Se as mesmas funcionalidades forem necessárias para dar suporte a SR-IOV e, no BIOS, defina "Habilitar SR-IOV". Entre em contato com o fornecedor do sistema se você não conseguir identificar a configuração correta no BIOS.

Para verificar se o hardware tem capacidade de Atribuição de Dispositivo Distinto, execute o Script de perfil do computador em um host habilitado para Hyper-V. O script testa se o servidor está configurado corretamente e quais dispositivos são capazes de fazer a atribuição discreta de dispositivo.

Requisitos do dispositivo

Nem todos os dispositivos PCIe podem ser usados com Atribuição de Dispositivo Discreto. Não há suporte para dispositivos mais antigos que usam Interrupções PCI (INTx) herdadas. Para obter mais informações, confira Atribuição de Dispositivo Distinto – Computadores e dispositivos. Você também pode executar o Script de perfil do computador para exibir quais dispositivos são capazes de serem usados para atribuição discreta de dispositivo.

Os fabricantes de dispositivos podem entrar em contato com o representante da Microsoft para obter mais detalhes.

Driver de dispositivo

A Atribuição de Dispositivo Distinto passa o dispositivo PCIe inteiro para a VM convidada. Não é necessário instalar um driver de host antes da montagem do dispositivo na VM. O único requisito no host é que seja possível determinar o Caminho de Localização PCIe do dispositivo. O driver de dispositivo pode ser instalado para ajudar na identificação do dispositivo. Uma GPU sem o driver de dispositivo instalado no host pode aparecer como um dispositivo de renderização básica da Microsoft. Se o driver de dispositivo estiver instalado, o fabricante e o modelo provavelmente serão exibidos.

Depois que o dispositivo é montado no convidado, o driver de dispositivo do fabricante pode ser instalado na máquina virtual convidada como de costume.

Limitações da VM

Devido à natureza da implementação da Atribuição de Dispositivo Distinto, alguns recursos da VM ficam restritos enquanto um dispositivo é anexado. Os seguintes recursos não estão disponíveis:

  • Salvar/restaurar VM
  • Migração dinâmica de uma VM
  • O uso da memória dinâmica
  • Como adicionar a VM a um cluster de HA (alta disponibilidade)

Segurança

A Atribuição de Dispositivo Discreta passa todo o dispositivo para a VM. Isso significa que todas as funcionalidades desse dispositivo podem ser acessadas pelo sistema operacional convidado. Algumas funcionalidades, como a atualização de firmware, podem prejudicar a estabilidade do sistema. Vários avisos são apresentados ao administrador enquanto o dispositivo é desmontado do host. Você só deve usar a Atribuição de Dispositivo Distinto quando os locatários das VMs são confiáveis.

Se o administrador quiser usar um dispositivo com um locatário não confiável, os fabricantes de dispositivos poderão criar um driver de mitigação de dispositivo a ser instalado no host. Entre em contato com o fabricante do dispositivo para saber se ele fornece um driver de mitigação de dispositivo.

Se você quiser ignorar as verificações de segurança de um dispositivo que não tem um driver de mitigação de dispositivo, passe o parâmetro -Force para o cmdlet Dismount-VMHostAssignableDevice. Ao fazer essa passagem, você alterou o perfil de segurança desse sistema. Você só deve fazer essa alteração durante a criação de protótipos ou em ambientes confiáveis.

Caminho do local da PCIe

O caminho do local da PCIe é necessário para desmontar e montar o dispositivo do host. Um caminho de local de exemplo é PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000). O script de perfil do computador também retorna o caminho do local do dispositivo PCIe.

Obter o caminho do local usando o Gerenciador de Dispositivos

Captura de tela do Gerenciador de Dispositivos, mostrando as seleções para encontrar um caminho de dispositivo.

  1. Abra Gerenciador de Dispositivos e localize o dispositivo.
  2. Clique com o botão direito do mouse no dispositivo e escolha Propriedades.
  3. Navegue até a guia Detalhes, expanda o menu suspenso Propriedade e selecione Caminhos de Local.
  4. Clique com o botão direito do mouse na entrada que começa com PCIROOT e selecione Copiar para obter o caminho de local desse dispositivo.

Espaço MMIO

Alguns dispositivos, principalmente GPUs, exigem espaço de MMIO adicional para serem alocados à VM, deixando acessível a memória desse dispositivo. Por padrão, cada VM começa com 128 MB de espaço de MMIO baixo e 512 MB de espaço de MMIO alto alocados. No entanto, um dispositivo pode exigir mais espaço MMIO ou vários dispositivos podem ser passados fazendo com que os requisitos combinados excedam esses valores. A alteração do espaço MMIO é fácil e pode ser executada no PowerShell usando os seguintes comandos:

Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm

A maneira mais fácil de determinar quanto espaço MMIO alocar é usar o Script de Perfil de Computador. Para baixar e executar o script de perfil do computador, execute os seguintes comandos em um console do PowerShell:

curl -o SurveyDDA.ps1 https://raw.githubusercontent.com/MicrosoftDocs/Virtualization-Documentation/live/hyperv-tools/DiscreteDeviceAssignment/SurveyDDA.ps1
.\SurveyDDA.ps1

Para dispositivos que podem ser atribuídos, o script exibe os requisitos de MMIO de um determinado dispositivo. A seguinte saída de script é um exemplo:

NVIDIA GRID K520
Express Endpoint -- more secure.
    ...
    And it requires at least: 176 MB of MMIO gap space
...

O espaço MMIO baixo é usado apenas por sistemas operacionais de 32 bits e dispositivos que usam endereços de 32 bits. Na maioria das circunstâncias, é suficiente definir o espaço alto de MMIO de uma VM, pois as configurações de 32 bits não são muito comuns.

Importante

Ao atribuir um espaço MMIO a uma VM, especifique um tamanho suficiente. O espaço MMIO deve ser a soma do espaço MMIO exigido por todos os dispositivos atribuídos desejados além de um buffer para outros dispositivos virtuais que exigem alguns MBs de espaço MMIO. Use os valores de MMIO padrão já descritos como o buffer para MMIO baixo e alto (128 MB e 512 MB, respectivamente).

Considere o exemplo anterior. Se você atribuir uma só GPU K520, defina o espaço MMIO da VM como o valor emitido pelo script do perfil de computador, mais um buffer: 176 MB + 512 MB. Se você atribuir três GPUs K520, defina o espaço MMIO como três vezes o volume base de 176 MB, mais um buffer, ou 528 MB + 512 MB.

Para obter uma visão mais detalhada do espaço MMIO, confira Atribuição de Dispositivo Distinto – GPUs no blog Tech Community.

Script do perfil de computador

Para identificar se o servidor está configurado corretamente e quais dispositivos podem ser passados usando a Atribuição de Dispositivo Distinto, execute o script SurveyDDA.ps1. do PowerShell.

Antes de usar o script, verifique se a função Hyper-V está instalada e execute o script em uma janela de comando do PowerShell com privilégios de administrador.

Se o sistema estiver configurado incorretamente para dar suporte à Atribuição de Dispositivo Distinto, a ferramenta exibirá uma mensagem de erro com os detalhes do problema. Se o sistema estiver configurado corretamente, a ferramenta vai enumerar todos os dispositivos localizados no barramento PCIe.

Para cada dispositivo encontrado, a ferramenta exibirá se pode ser usada com a atribuição discreta de dispositivo. Se um dispositivo for identificado como incompatível com a Atribuição de Dispositivo Discreto, o script fornecerá um motivo. Quando um dispositivo for identificado como compatível, o caminho de localização do dispositivo será exibido. Além disso, se esse dispositivo exigir espaço de MMIO, isso também será exibido.

Captura de tela dos requisitos exibidos no SurveyDDA.ps1.