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.
O acesso da GPU (Unidade de Processamento Gráfico) à memória física é abstraído na DDI (Interface do Driver de Dispositivo) por um modelo de segmentação. O driver do modo kernel expressa os recursos de memória física disponíveis para uma GPU enumerando um conjunto de segmentos, que são gerenciados pelo gerenciador de memória de vídeo.
Há três tipos de segmentos no Modelo de Driver de Exibição do Windows (WDDM) v2:
Segmento de Memória
Um segmento de memória representa a memória, dedicada a uma GPU. Isso pode ser VRAM em uma MEMÓRIA reservada discreta de GPU ou firmware/driver em uma GPU integrada. Pode haver vários segmentos de memória enumerados.
Novo no WDDM v2, um segmento de memória é gerenciado como um pool de páginas físicas que têm 4KB ou 64 KB de tamanho. Os dados do Surface são copiados para dentro e para fora de um segmento de memória usando as operações de paginação Fill/Transfer/TransferVirtual//TransferVirtual.
A CPU pode acessar o conteúdo de um segmento de memória de duas maneiras. Primeiro, um segmento de memória pode estar visível no espaço de endereço físico da CPU, nesse caso, o gerenciador de memória de vídeo simplesmente mapeia endereços virtuais da CPU diretamente para alocações dentro do segmento. Introduzido no WDDM v2, o gerenciador de memória de vídeo também dá suporte ao acesso ao conteúdo de um segmento de memória por meio de uma abertura de host de CPU programável associada a esse segmento.
Segmento de abertura
Um segmento de abertura é uma tabela de página global usada para fazer páginas de memória descontinuadas do sistema parecer contíguas da perspectiva de um mecanismo de GPU.
No WDDM v2, um único segmento de abertura deve ser relatado.
Segmento de Memória do Sistema
O segmento de memória do sistema é um segmento implícito que representa referências de memória do sistema (ou seja, um endereço físico convidado). O segmento de memória do sistema não é enumerado diretamente pelo driver do modo kernel. Ele é enumerado implicitamente pelo gerenciador de memória de vídeo e sempre recebe a atribuição SegmentId==0
de . Para colocar uma alocação no segmento de memória do sistema, o driver do modo kernel precisa usar a ID do segmento de abertura.
Referência de memória física
Na DDI, as referências de memória física sempre assumem a forma de um par de deslocamento de segmento ID-segment.
Acessando alocações por endereço físico
Os mecanismos de GPU, que não dão suporte ao endereçamento virtual de GPU, precisam acessar alocações por meio de seus endereços físicos. Isso tem implicação sobre como uma alocação recebe recursos atribuídos de um segmento. As referências físicas implicam que uma alocação deve ser alocada contíguamente em um segmento de memória ou ocupar um intervalo contíguo no segmento de abertura.
Para evitar alocações contíguas desnecessárias e caras, o driver do modo kernel deve identificar explicitamente as alocações, que precisam ser acessadas fisicamente por um mecanismo de renderização, definindo o novo sinalizador DXGK_ALLOCATIONINFOFLAGS2::AccessedPhysically durante a criação da alocação.
Essas alocações serão mapeadas para o segmento de abertura quando residentes na memória do sistema. As alocações serão contíguas quando residentes em um segmento de memória. As alocações, criadas dessa forma, podem ser referenciadas por meio da lista de alocação em mecanismos, operando no modo de endereçamento físico.
As alocações, que não têm esses sinalizadores definidos, serão alocadas como um conjunto de páginas em um segmento de memória ou um conjunto de páginas na memória do sistema, que são acessadas por meio de endereços virtuais de GPU. As alocações criadas dessa maneira não podem ser referenciadas por meio da lista de alocação. Qualquer envio de buffer de comando que referenciar a alocação dessa forma será rejeitado.
Entende-se que as superfícies primárias são acessadas fisicamente pelo controlador de exibição e serão alocadas contíguamente em um segmento de memória ou mapeadas para o segmento de abertura quando exibidas. O driver do modo kernel só deve definir os sinalizadores AccessedPhysically quando um mecanismo de renderização acessar a alocação fisicamente. A distinção entre o acesso físico implícito na superfície primária e os sinalizadores explícitos é quando a alocação será mapeada para a abertura. Quando os sinalizadores AccessedPhysically estiverem definidos , a alocação será mapeada para a abertura sempre que for residente. As superfícies primárias, que não têm esses sinalizadores definidos, serão mapeadas para a abertura somente quando forem exibidas. Isso ajuda a remover a pressão sobre o segmento de abertura, pois normalmente há apenas algumas superfícies primárias sendo exibidas ativamente, enquanto pode haver um número muito grande deles existentes e sendo renderizados para (ou seja, todos os swapchains FlipEx são criados como superfícies primárias e potencialmente exibíveis em cenáriosiFlip dFlip/).
AccessedPhysically==0 | AccessedPhysically==1 | && Primário AccessedPhysically==0 | |
Segmento de Memória | Conjunto de páginas Somente o acesso virtual de GPU é permitido. |
Contíguo O acesso físico da GPU é permitido |
Contíguo Somente o acesso virtual de GPU é permitido por mecanismos de renderização. |
Segmento de abertura | Não mapeado Páginas de memória do sistema, mapeadas apenas por tabelas de página de GPU, não para o segmento de abertura. Somente o acesso virtual de GPU é permitido. |
Mapeado quando residente O acesso físico da GPU é permitido. |
Mapeado quando exibido Somente o acesso virtual de GPU é permitido por mecanismos de renderização. |