Pular para o conteúdo

Gestor de Memória e cache do sistema Windows: paging, page combining e lazy write

Nesta página

Nesta série foram verificados sete parâmetros de paginação, combinação de páginas idênticas, heaps do kernel e cache de ficheiros. No Windows 11 25H2 foi encontrado o código de leitura de cada um deles. O benefício prático depende do parâmetro e das condições de funcionamento.

DisablePageCombining desativa a combinação de páginas em segundo plano: o gestor de memória deixa de realizar este trabalho, mas o consumo de RAM pode aumentar. DisablePagingExecutive mantém o código paginável dos controladores na memória física; o benefício é geralmente reduzido. Os restantes parâmetros aplicam-se apenas a tarefas específicas do kernel ou dos dispositivos de armazenamento, ou já têm valores predefinidos adequados no 25H2.

Para cada valor foram verificados:

  1. o caminho exato no Registry e o tipo;
  2. o valor predefinido definido pelo código do Windows 11 25H2;
  3. os valores relacionados do mesmo subsistema;
  4. o código de sistema de leitura e o momento da sua execução;
  5. as restrições de intervalo, a conversão de valores e as unidades de medida;
  6. o efeito direto e os limites de aplicabilidade.

Além do código de leitura, verificámos onde o parâmetro é aplicado, que consequências tem a sua alteração e em que cenários pode ser útil. A mera existência do parâmetro não é suficiente para uma recomendação.

  • Windows 11 25H2 x64, build 26200.9168.
  • Os parâmetros do kernel foram comparados com a tabela principal de configuração ntoskrnl.exe e com o código da sua aplicação no Memory Manager e no Cache Manager.
  • Os acessos durante o funcionamento foram verificados com a traçagem de sistema do Registry. As leituras na fase 0 e no início da fase 1 podem estar ausentes numa traçagem de arranque normal: o controlador de traçagem começa a gravar mais tarde.
  • Para os processos de utilizador foi verificada separadamente a leitura do valor em ntdll.dll. Para HeapDeCommitFreeBlockThreshold no 25H2 foi encontrada a leitura no kernel, mas os heaps dos processos de utilizador não utilizam este parâmetro.
  • A análise estática dos componentes do sistema não substitui a repetição num PC físico, noutra build ou noutro tipo de dispositivo de armazenamento.
Registry path Value Type Default Windows 11 25H2 Aplicação
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management DisablePagingExecutive REG_DWORD 0 Paginação de código paginável dos controladores de sistema
o mesmo caminho DisablePageCombining REG_DWORD 0 Combinação de páginas físicas idênticas em segundo plano
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager HeapDeCommitFreeBlockThreshold REG_DWORD 0x1000 (4 KB) para kernel heap Limiar de decommit de blocos livres do kernel-mode heap
o mesmo caminho ModifiedWriteMaximum REG_DWORD 1 unidade = 1 MB Limite superior do modified page writer após clamp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management EnableAsyncLazywrite REG_DWORD 2 Modo assíncrono do Cache Manager
o mesmo caminho CacheUnmapBehindLengthInMB REG_DWORD 8 MB Janela de unmap atrás da leitura sequencial
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel SplitLargeCaches REG_DWORD 0 Representação da cache topology entre processor groups

Com 0, o gestor de memória do Windows pode paginar para armazenamento de reserva as secções de código de sistema e de controladores que o permitam. Com 1, o código paginável dos controladores de sistema é mantido na memória física.

O código de leitura foi encontrado em ntoskrnl.exe numa fase inicial da inicialização do kernel. O valor é utilizado em MmResetDriverPaging, MmPageEntireDriver e ao carregar imagens de sistema. É aplicado antes de começar a traçagem normal do Registry pelo utilizador. Para aplicar o novo estado é necessário reiniciar.

  • 0: estado normal do Windows, paginação permitida.
  • 1: as secções pagináveis dos controladores de sistema são mantidas na RAM.
  • A definição consome RAM para reduzir os carregamentos subsequentes de código de sistema de volta para a memória; o disco em si não fica mais rápido.

A definição impede a paginação e o carregamento subsequentes dessas secções dos controladores. Não desativa nenhum thread de CPU permanente de verificação. Num sistema moderno com RAM suficiente, o benefício é geralmente muito reduzido: o código pode permanecer muito tempo na memória mesmo sem a definição. Com RAM insuficiente, a sua retenção forçada agrava a escassez de memória.

A leitura do parâmetro e a direção do efeito de sistema foram confirmadas pelo código ntoskrnl.exe.

Com 0, o gestor de memória inicia uma tarefa em segundo plano que procura e combina páginas físicas idênticas. Com 1, esta tarefa não realiza a combinação.

Em ntoskrnl.exe foi encontrado o código de combinação de páginas em segundo plano com a pool tag MmCb, o que confirma a existência do mecanismo.

  • 0: combinação de páginas permitida, estado normal do Windows.
  • 1: combinação desativada.
  • A desativação reduz o trabalho em segundo plano do gestor de memória, mas pode aumentar o consumo de RAM.

A desativação é útil se a combinação de páginas criar uma carga em segundo plano notória e o sistema tiver RAM livre. Normalmente esta tarefa é pouco ativa, pelo que o efeito é muito reduzido. Com volume de memória limitado, a poupança de RAM da combinação é mais útil do que o tempo de processador poupado.

O código de leitura e da tarefa em segundo plano foi confirmado em ntoskrnl.exe. A Microsoft descreve a combinação de páginas e o compromisso entre trabalho do processador e poupança de RAM.

O valor define o limiar de libertação de memória alocada (decommit) para um bloco livre do heap do kernel. Com um limiar maior, estas operações para blocos livres grandes ocorrem com menos frequência.

No Windows 11 25H2, o código de leitura encontra-se em ntoskrnl.exe, e a aplicação do parâmetro está associada à função de kernel RtlCreateHeap. Em ntdll.dll não foi encontrado o código de leitura correspondente para os heaps dos processos normais.

  • Valor predefinido no código para o heap do kernel: 0x1000 (4 KB).
  • 0x40000 (256 KB) é um limiar admissível para o heap do kernel.
  • Documentos históricos da Microsoft descreviam um cenário user-mode com o mesmo nome de versões antigas do Windows, pelo que não pode ser automaticamente transposto para o Windows 11 25H2.

Para as aplicações normais, praticamente não há benefício: os seus heaps não utilizam este valor. O parâmetro só pode alterar a frequência de libertação de memória no heap do kernel. Sem um problema medido precisamente nesse heap, o efeito esperado é muito reduzido.

A leitura em modo kernel foi confirmada em ntoskrnl.exe. O efeito para os processos de utilizador no 25H2 não foi confirmado.

O parâmetro define o limite superior para o mecanismo de escrita de páginas modificadas (modified page writer). No código são utilizadas unidades de 256 páginas, ou seja, uma unidade é igual a 1 MB.

Normalização no Windows 11 25H2:

  • 0 é convertido em 1 unidade, ou seja, 1 MB;
  • os valores superiores a 0x40 são limitados a 0x40;
  • o limite efetivo máximo é de 64 MB, ou 16 384 páginas.

O mecanismo começa a escrita ativa aproximadamente ao atingir um quarto do limite definido. Aumentar o limite altera o momento de início da escrita e o volume de páginas modificadas acumuladas. A velocidade do próprio disco não aumenta com isso.

Com um limite maior, acumulam-se mais páginas modificadas antes do início da escrita ativa. A escrita pode iniciar-se com menos frequência, mas o volume de dados ainda não guardados e o tamanho da porção seguinte de escrita aumentam. Se não houver um problema concreto com a escrita, mantenha o valor predefinido. O limite efetivo está restringido a 64 MB.

O código de leitura, as unidades de medida e a restrição de intervalo foram confirmados em ntoskrnl.exe. O parâmetro com o mesmo nome dos documentos antigos da Microsoft sobre o BitLocker pertence a outro subsistema; esses documentos não são utilizados aqui como fonte.

EnableAsyncLazywrite controla a escrita assíncrona diferida do Cache Manager. No código do 25H2 está definido o valor predefinido 2: este modo já está ativado.

Valores relacionados do mesmo subsistema:

Value Default 25H2 Papel
EnableAsyncLazywrite 2 Modo geral async lazy-write
EnableAsyncLazywriteMulti 2 Modo multi-volume adjacente
EnablePerVolumeLazyWriter 2 Per-volume lazy writer

0 desativa a escrita assíncrona diferida. Para 1 é necessário o modo de processador de escrita diferida separado em cada volume. 2 ativa o modo assíncrono sem este requisito. O Cache Manager relê os valores ao trabalhar com a configuração de volumes.

A escrita explícita de 2 repete a configuração normal do Windows 11 25H2 e não melhora nada adicionalmente. A definição é adequada sobretudo para diagnóstico: o valor 0 permite desativar o mecanismo ativo por predefinição.

A leitura foi observada na traçagem de sistema e confirmada em ntoskrnl.exe. O valor predefinido 2 foi confirmado pelo código e por uma descrição independente dos parâmetros do Registry, elaborada com base em resultados de engenharia inversa.

O parâmetro define a distância em megabytes após a qual o Cache Manager liberta as vistas em cache que ficaram atrás da posição atual de leitura sequencial.

O código de leitura e de aplicação do parâmetro encontra-se em ntoskrnl.exe e é chamado ao mapear e ler a cache. O parâmetro refere-se à leitura sequencial de ficheiros grandes; não desativa toda a cache de ficheiros.

  • 0 ou um valor superior a 128 é substituído pelo código por 8.
  • Intervalo de funcionamento: 1..128 MB.
  • Default no código: 8 MB.
  • As unidades do Registry value são precisamente MB, e não bytes.

O parâmetro só faz sentido para tarefas especializadas de leitura sequencial de ficheiros grandes. Com uma janela maior, o mapeamento da cache atrás da posição atual mantém-se durante mais tempo; com uma janela menor, é libertado mais cedo. Para o funcionamento normal, o valor predefinido 8 MB é adequado; o benefício da definição manual é geralmente reduzido.

O código de leitura, de aplicação e de restrição de intervalo foi confirmado em ntoskrnl.exe. Não foi encontrada documentação pública moderna da Microsoft para este parâmetro interno.

Com 0, a API de descrição da topologia de cache devolve uma única entrada para a estrutura correspondente que abrange vários grupos de processadores. Com 1, as entradas são separadas por grupos de processadores.

O código de leitura encontra-se em ntoskrnl.exe. O parâmetro é utilizado no processamento da relação RelationCache em KeQueryLogicalProcessorRelationship.

Apenas muda a descrição da topologia que a API de sistema devolve. Os blocos físicos de memória alocados não são separados, e a probabilidade de escassez de um bloco contíguo não diminui por si só.

  • 0: valor predefinido.
  • 1: separar as entradas de topologia por grupos de processadores.
  • O efeito prático é possível sobretudo em sistemas com vários grupos de processadores, normalmente com mais de 64 processadores lógicos.
  • Num sistema normal de um único grupo, o efeito está ausente.

O parâmetro só é necessário para programas que consultam a topologia de cache numa máquina com vários grupos de processadores. Não altera o funcionamento da cache nem a alocação de memória. Para um computador de secretária normal, não há benefício.

O código de leitura e de aplicação foi confirmado em ntoskrnl.exe. O valor e a finalidade foram verificados com a descrição pública de engenharia inversa KiSplitLargeCaches.

Parâmetro Avaliação prática
DisablePagingExecutive Geralmente dá um benefício muito reduzido, mantendo mais código na RAM
DisablePageCombining Útil com uma carga confirmada de combinação de páginas em segundo plano e uma grande reserva de RAM
HeapDeCommitFreeBlockThreshold Atua apenas no kernel; para as aplicações normais não há benefício prático
ModifiedWriteMaximum Altera as condições de escrita das páginas modificadas; sem um problema identificado, mantenha o valor predefinido
EnableAsyncLazywrite O valor predefinido 2 já ativa o mecanismo; a escrita repetida não melhora nada
CacheUnmapBehindLengthInMB Definição de leitura sequencial; os 8 MB predefinidos são adequados para o funcionamento normal
SplitLargeCaches Altera a descrição da topologia para vários grupos de processadores; num sistema normal não há efeito

Foram confirmados os caminhos, tipos, valores predefinidos, código e momento de leitura dos parâmetros acima indicados, bem como as restrições de intervalos. Os resultados referem-se ao Windows 11 25H2 build 26200.9168. O comportamento pode ser diferente com outra atualização do Windows, volume de RAM, tipo de dispositivo de armazenamento ou topologia de CPU.

Para saber como repetir a parte dinâmica das observações — consulte Como verificar por si mesmo.

Para reverter, reponha os valores predefinidos dos parâmetros ou elimine as entradas opcionais. Alguns valores são aplicados no arranque seguinte do Windows.

O estudo e as ferramentas nele utilizadas pertencem ao desenvolvedor do BoosterX, pelo que o desenvolvedor tem um interesse direto nos resultados. A metodologia e os limites de aplicabilidade estão descritos neste artigo; as conclusões podem ser verificadas com os dados abertos e as fontes públicas indicadas abaixo.

As afirmações sobre o código foram verificadas por análise estática dos componentes do sistema do Windows 11 25H2. O código descompilado, os deslocamentos, as traçagens originais e os materiais internos não são publicados.

Fontes públicas verificadas: 2026-09-02.

  • 2026-09-20: adicionado o aviso de conflito de interesses e a ligação para a verificação autónoma das observações dinâmicas na metodologia.
  • 2026-09-02: primeira publicação; confirmados os caminhos, defaults, clamps e o código de leitura dos parâmetros, adicionados os limites do benefício prático.