Pular para o conteúdo

Gerenciador de Memória e cache do sistema do 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 arquivos. 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 operação.

DisablePageCombining desativa a combinação de páginas em segundo plano: o gerenciador de memória deixa de executar esse trabalho, mas o consumo de RAM pode aumentar. DisablePagingExecutive mantém o código paginável de drivers na memória física; o benefício geralmente é pequeno. Os demais parâmetros se aplicam apenas a tarefas específicas do kernel ou de unidades de armazenamento, ou já têm valores padrão adequados no 25H2.

Para cada valor, foram verificados:

  1. o caminho exato no Registro e o tipo;
  2. o valor padrão 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 de sua execução;
  5. as restrições de faixa, 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, verificamos onde o parâmetro é aplicado, quais consequências sua alteração tem e em quais cenários ela 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 de sua aplicação no Memory Manager e no Cache Manager.
  • Os acessos durante a execução foram verificados por rastreamento de sistema do Registro. As leituras na fase 0 e no início da fase 1 podem estar ausentes em um rastreamento de inicialização comum: o driver de rastreamento começa a gravar mais tarde.
  • Para processos de usuário, a leitura do valor foi verificada separadamente em ntdll.dll. Para HeapDeCommitFreeBlockThreshold no 25H2, foi encontrada a leitura no kernel, mas os heaps de processos de usuário não usam esse parâmetro.
  • A análise estática de componentes do sistema não substitui a repetição em um PC físico, em outro build ou em outro tipo de unidade de armazenamento.
Registry path Value Type Default Windows 11 25H2 Применение
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management DisablePagingExecutive REG_DWORD 0 Paginação de código paginável de drivers de sistema
тот же путь DisablePageCombining REG_DWORD 0 Combinação em segundo plano de páginas físicas idênticas
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager HeapDeCommitFreeBlockThreshold REG_DWORD 0x1000 (4 KB) para kernel heap Limite de decommit de blocos livres do kernel-mode heap
тот же путь ModifiedWriteMaximum REG_DWORD 1 unidade = 1 MB Limite superior do modified page writer após o clamp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management EnableAsyncLazywrite REG_DWORD 2 Modo assíncrono do Cache Manager
тот же путь 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 gerenciador de memória do Windows pode paginar para o armazenamento de reserva as seções de código de sistema e de drivers que permitem isso. Com 1, o código paginável de drivers de sistema é mantido na memória física.

O código de leitura foi encontrado em ntoskrnl.exe em um estágio inicial da inicialização do kernel. O valor é usado em MmResetDriverPaging, MmPageEntireDriver e ao carregar imagens de sistema. Ele é aplicado antes de começar o rastreamento comum de Registro de processos de usuário. Para aplicar o novo estado, é necessário reiniciar.

  • 0: estado padrão do Windows, a paginação é permitida.
  • 1: as seções pagináveis de drivers de sistema são mantidas na RAM.
  • A configuração consome RAM para reduzir carregamentos posteriores de código de sistema de volta à memória; o disco em si não fica mais rápido.

A configuração impede a paginação e o carregamento posteriores dessas seções de drivers. Ela não desativa nenhum thread de CPU verificador permanente separado. Em um sistema moderno com RAM suficiente, o benefício geralmente é muito pequeno: o código pode permanecer na memória por muito tempo mesmo sem a configuração. Em caso de falta de RAM, mantê-lo à força agrava a escassez de memória.

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

Com 0, o gerenciador de memória inicia uma tarefa em segundo plano que procura e combina páginas físicas idênticas. Com 1, essa 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: a combinação de páginas é permitida, estado padrão do Windows.
  • 1: a combinação está desativada.
  • A desativação reduz o trabalho em segundo plano do gerenciador 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 perceptível e o sistema tiver RAM livre. Normalmente, essa tarefa é pouco ativa, portanto o efeito é muito pequeno. Com volume de memória limitado, a economia de RAM proporcionada pela combinação é mais útil do que o tempo de processador economizado.

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 trade-off entre trabalho de processador e economia de RAM.

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

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

  • Valor padrão no código para o heap do kernel: 0x1000 (4 KB).
  • 0x40000 (256 KB) é um limite válido para o heap do kernel.
  • Documentos históricos da Microsoft descreviam um cenário user-mode de mesmo nome de versões antigas do Windows, portanto ele não pode ser transferido automaticamente para o Windows 11 25H2.

Para aplicativos comuns, praticamente não há benefício: seus heaps não usam esse valor. O parâmetro pode alterar a frequência de liberação de memória apenas no heap do kernel. Sem um problema medido especificamente nesse heap, o efeito esperado é muito pequeno.

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

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

Normalização no Windows 11 25H2:

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

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

Com um limite maior, mais páginas modificadas se acumulam antes do início da gravação ativa. A gravação pode ser iniciada com menos frequência, mas o volume de dados ainda não salvos e o tamanho da próxima leva de gravação aumentam. Se não houver um problema específico de gravação, mantenha o valor padrão. O limite efetivo é restrito a 64 MB.

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

EnableAsyncLazywrite controla a gravação assíncrona adiada do Cache Manager. No código do 25H2, está definido o valor padrão 2: esse modo já está ativado.

Valores relacionados do mesmo subsistema:

Value Default 25H2 Роль
EnableAsyncLazywrite 2 Modo geral de async lazy-write
EnableAsyncLazywriteMulti 2 Modo multi-volume adjacente
EnablePerVolumeLazyWriter 2 Lazy writer por volume

0 desativa a gravação assíncrona adiada. Para 1, é necessário o modo de um manipulador separado de gravação adiada em cada volume. 2 ativa o modo assíncrono sem esse requisito. O Cache Manager relê os valores ao trabalhar com a configuração de volumes.

A gravação explícita de 2 repete a configuração padrão do Windows 11 25H2 e não melhora nada adicionalmente. A configuração é adequada principalmente para diagnóstico: o valor 0 permite desativar o mecanismo que funciona por padrão.

A leitura foi observada no rastreamento de sistema e confirmada em ntoskrnl.exe. O valor padrão 2 foi confirmado pelo código e por uma descrição independente dos parâmetros de Registro, elaborada com base em resultados de engenharia reversa.

O parâmetro define a distância em megabytes após a qual o Cache Manager libera as exibições em cache que ficaram para trás da posição atual da leitura sequencial.

O código de leitura e aplicação do parâmetro está em ntoskrnl.exe e é chamado ao mapear e ler o cache. O parâmetro se refere à leitura sequencial de arquivos grandes; ele não desativa todo o cache de arquivos.

  • 0 ou um valor maior que 128 é substituído pelo código por 8.
  • Faixa de operação: 1..128 MB.
  • Default no código: 8 MB.
  • As unidades do Registry value são MB, e não bytes.

O parâmetro só faz sentido para tarefas especializadas de leitura sequencial de arquivos grandes. Com uma janela maior, o mapeamento do cache atrás da posição atual é mantido por mais tempo; com uma menor, é liberado mais cedo. Para o uso comum, o valor padrão 8 MB é adequado; o benefício do ajuste manual geralmente é pequeno.

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

Com 0, a API de descrição da topologia de cache retorna 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 está em ntoskrnl.exe. O parâmetro é usado ao processar a relação RelationCache em KeQueryLogicalProcessorRelationship.

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

  • 0: valor padrão.
  • 1: separar as entradas de topologia por grupos de processadores.
  • O efeito prático é possível principalmente em sistemas com vários grupos de processadores, geralmente com mais de 64 processadores lógicos.
  • Em um sistema comum de um único grupo, não há efeito.

O parâmetro é necessário apenas para programas que solicitam a topologia de cache em uma máquina com vários grupos de processadores. Ele não altera o funcionamento do cache nem a alocação de memória. Para um computador desktop comum, não há benefício.

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

Параметр Avaliação prática
DisablePagingExecutive Geralmente oferece benefício muito pequeno, mantendo mais código na RAM
DisablePageCombining Útil com carga confirmada de combinação de páginas em segundo plano e grande reserva de RAM
HeapDeCommitFreeBlockThreshold Atua apenas no kernel; para aplicativos comuns, não há benefício prático
ModifiedWriteMaximum Altera as condições de gravação de páginas modificadas; sem um problema identificado, mantenha o valor padrão
EnableAsyncLazywrite O valor padrão 2 já ativa o mecanismo; gravá-lo novamente não melhora nada
CacheUnmapBehindLengthInMB Ajuste de leitura sequencial; os 8 MB padrão são adequados para o uso comum
SplitLargeCaches Altera a descrição da topologia para vários grupos de processadores; em um sistema comum, não há efeito

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

Para saber como repetir a parte dinâmica das observações, consulte Como verificar por conta própria.

Para reverter, restaure os valores padrão dos parâmetros ou exclua as entradas opcionais. Parte dos valores é aplicada na próxima inicialização do Windows.

A pesquisa e as ferramentas usadas nela pertencem ao desenvolvedor do BoosterX, portanto 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 dados abertos e as fontes públicas listadas abaixo.

As afirmações sobre o código foram verificadas por análise estática de componentes do sistema do Windows 11 25H2. Código descompilado, offsets, rastreamentos originais e materiais internos não são publicados.

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

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