Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Esta página descreve o modelo IoMmu introduzido no WDDM 2.0. Consulte Isolamento de GPU baseado em IOMMU e Remapeamento de DMA IOMMU para obter atualizações IOMMU mais recentes.
Visão geral
Uma unidade de gerenciamento de memória Input-Output (IOMMU) é um componente de hardware que conecta um barramento de E/S compatível com DMA à memória do sistema. Ele mapeia endereços virtuais visíveis do dispositivo para endereços físicos, tornando-o útil na virtualização.
No modelo WDDM 2.0 IoMmu, cada processo tem um único espaço de endereço virtual que é:
- Compartilhado entre a CPU e a GPU.
- Gerenciado pelo gerenciador de memória do sistema operacional.
Para acessar a memória, a GPU envia uma solicitação de dados para um IOMMU compatível. A solicitação inclui um endereço virtual compartilhado e um identificador de espaço de endereço de processo (PASID). A IOMMU realiza a conversão de endereços usando a tabela de páginas compartilhadas. Esta ação é ilustrada no diagrama a seguir.
O driver de exibição de modo kernel (KMD) expressa suporte para o modelo IoMmu definindo as capacidades DXGK_VIDMMCAPS::IoMmuSupported. Quando esse sinalizador é definido, o gerenciador de memória de vídeo (VidMm) registra automaticamente qualquer processo usando a GPU com a IOMMU e obtém um PASID para esse espaço de endereçamento do processo. O PASID é passado para o driver durante a criação do dispositivo.
O VidMm mapeia as alocações primárias no segmento de abertura antes de serem exibidas, garantindo que o controlador de exibição tenha acesso físico a essas alocações.
No modelo IoMmu, o driver de exibição de modo de usuário (UMD) continua a alocar memória de vídeo para a GPU usando o serviço Allocate do VidMm. Este processo permite à UMD:
- Siga o modelo de residência.
- Ofereça suporte ao modelo de compartilhamento de recursos DirectX.
- Certifique-se de que as superfícies primárias sejam visíveis para o kernel e mapeadas na abertura antes de serem exibidas.
O UMD gerencia inteiramente o primeiro nível de tradução (endereço de recurso de bloco para endereço de CPU/GPU compartilhado) no modo de usuário.