Skip to main content
No Windows e no Microsoft Game Development Kit (GDK), a memória do kernel existe como um único pool compartilhado pelo kernel e por todos os drivers. A memória do kernel é sempre alocada a partir da partição do sistema. A maior parte dos requisitos de memória do kernel é responsabilidade da plataforma e, portanto, não é cobrada do orçamento de memória do título. No entanto, a lista a seguir mostra quando o código do jogo é diretamente responsável pelo uso de memória do kernel.
  • Estruturas de rastreamento para cada reserva de memória virtual
  • Manipulação de arquivos, eventos e objetos de sincronização de threads
  • Rede
Espera-se que os títulos forneçam memória para o uso do kernel pelo qual são diretamente responsáveis. Como a memória do kernel existe como um único pool, as alocações não são “divisíveis” da mesma forma que o uso da plataforma e do título é dividido para binários e heaps. Em vez disso, um mecanismo diferente é usado para permitir que os desenvolvedores forneçam a memória necessária de forma determinística. O sistema operacional aloca quase toda a memória do kernel que consome como parte da sequência de inicialização do sistema operacional do Microsoft Game Development Kit (GDK). Após a inicialização, as variações típicas do uso da plataforma ficam em torno de 1 a 2 MB. Quando um processo de título é iniciado, o consumo atual de memória do kernel é consultado e um “piso de ruído” é estabelecido 16 MB acima do consumo atual de memória do kernel. O valor é estabelecido para que, quando o limite for ultrapassado, isso seja resultado direto do comportamento do título, e não da variação normal do sistema operacional. O monitoramento é implementado por meio da instrumentação das seguintes APIs, que sabidamente resultam em alocações de memória do kernel.
  • CreateFile
  • CreateEvent
  • CreateSemaphore
Se uma chamada a uma dessas APIs ocorrer enquanto o uso de memória do kernel estiver se aproximando do limite ou já o tiver excedido, informações adicionais serão fornecidas por meio de XError e do fluxo de depuração. Se o uso de memória do kernel tiver excedido o limite, a chamada à API falhará com um valor de GetLastError() igual a ERROR\_NOT\_ENOUGH\_MEMORY. A saída de diagnóstico pode ser visualizada em um depurador anexado, no xbwatson.exe e no xbdbgmon.exe.

Aviso (em 14 MB)

A saída a seguir aparece quando um aviso é disparado em 14 MB.

Erro (em 16 MB)

A saída a seguir aparece quando um erro é disparado em 16 MB.
A tabela a seguir mostra o formato da marca de pool (Pool Tag). O erro a seguir também aparece.
Todas as alocações de memória do kernel recebem uma marca (semelhante à marcação com XMEM\_MAKE\_TAG e XMemVirtualAlloc) para indicar o uso da memória. A marca pode ajudar a determinar a origem do uso de memória. A tabela a seguir mostra as marcas de “alta utilização” mais comuns relacionadas ao uso pelo título. A memória do kernel é dividida em duas categorias amplas chamadas “Non Paged” (não paginada) e “Paged” (paginada). No Microsoft Game Development Kit (GDK), não há diferença funcional entre essas categorias, e elas podem ser tratadas como sinônimos.

Custos comuns de memória do kernel

As tabelas a seguir mostram os custos esperados de memória do kernel de cada ação listada.

Aumentar o limite

Títulos menores podem ter um uso de memória que cabe nos limites existentes. No entanto, títulos maiores precisam receber memória para dar suporte ao seu uso de memória do kernel. A API XMemTransferMemory é usada para fornecer a memória necessária.

Criar perfil do uso do pool do kernel

O suporte no PIX para monitorar o uso do pool do kernel não está disponível. É possível monitorar o consumo usando o xperf e o Windows Performance Analyzer (WPA). Use as etapas a seguir para criar o perfil da memória do kernel.
  1. Insira o comando xbrun /x/title xperf -start -on PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree -f d:\krnl.etl
  2. Execute o cenário do título.
  3. Insira o comando xbrun /x/title xperf -stop -d d:\krnl.merged.etl
  4. Insira o comando xbcp xd:\krnl.merged.etl %TEMP%\pool_usage.etl
  5. Abra o arquivo pool_usage.etl no WPA e conduza a análise conforme mostrado na figura 1.
Figura 1. Mostra a análise do pool de memória do kernel no WPA. Captura de tela da análise do pool de memória do kernel no WPA
Last modified on October 6, 2026