Por que o Windows sempre usa tanta memória virtual quanto RAM instalada?

Por que o Windows sempre usa tanta memória virtual quanto RAM instalada?

E por que quer ter no máximo o dobro desse valor? Meu sistema possui 32 GB de RAM e o Windows, por padrão, define um mínimo de 16 MB de memória virtual, aloca 32 GB (!) e recomenda 50 GB (!!). Pior ainda em um sistema de 64 GB de RAM, onde era recomendado alocar mais de 100 GB, embora "apenas" usasse novamente a mesma quantidade que estava disponível em RAM, 64 GB neste caso.

Pelo que entendi o conceito de arquivo de paginação é que o Windows só o expande quando necessário e começa com o valor mínimo, embora nunca o faça, sempre vai para o máximo absoluto. Isso é extremamente irritante porque desabilitar o arquivo de paginação ou não configurá-lo para a mesma quantidade de RAM instalada causa problemas em alguns programas que usam muita memória como o 7zip, eles apenas afirmam que não há memória suficiente para alocar, embora haja bastante memória suficiente de memória utilizável livre.

Esse comportamento diminui potencialmente a vida útil das minhas unidades (SSDs) tremendamente. Por que o Windows faz isso e como posso evitar isso ou, alternativamente, como posso desabilitar completamente o arquivo de paginação sem obter um comportamento estranho em alguns programas.

Responder1

Primeiro, é um grande erro (não seu) que a caixa de diálogo do Windows, aquela em que você define o tamanho do arquivo de paginação, iguale o arquivo de paginação à "memória virtual". O arquivo de paginação é apenas o armazenamento de apoio para uma categoria de espaço de endereço virtual, usado pela memória privada comprometida. Existe um espaço de endereço virtual que é apoiado por outros arquivos (arquivos mapeados) e existe um vas que é sempre não paginável e, portanto, permanece na RAM o tempo todo. Mas é tudo "memória virtual", pois pelo menos a tradução de endereços virtuais para endereços RAM está sempre funcionando.

Sua observação está correta: a alocação do tamanho do arquivo de paginação do Windows usa um cálculo simples de padrão = tamanho da RAM e máximo = duas vezes isso. (Costumava ser 1,5x e 3x.) Eles precisam definir algo, e esses fatores fornecem um resultado que quase sempre é suficiente. Ele também garante espaço suficiente no arquivo de paginação para capturar um despejo de memória se o sistema travar (supondo que você tenha habilitado o kernel ou despejos completos).

Pelo que entendi o conceito de arquivo de paginação é que o Windows só o expande quando necessário e começa com o valor mínimo, embora nunca o faça, sempre vai para o máximo absoluto.

Ah... começa pelo "tamanho inicial". Este NÃO é o "mínimo permitido". É por isso que você está vendo o tamanho da RAM, porque o Windows usa isso para o tamanho inicial.

Mas... você está dizendo que está vendo o tamanho real do arquivo de paginação atingir a configuração máxima? por exemplo, se estiver definido como 16 GB inicial, 32 GB no máximo, você verá o tamanho real ("atualmente alocado") em 32 GB? Ele deve sempre voltar ao tamanho inicial quando você reinicia, aliás.

Você vê pop-ups "o sistema está com pouca memória virtual"? porque você deveria, quando o sistema operacional expande o arquivo de paginação além do tamanho atual.

O sistema operacional não aumentará o arquivo de paginação, a menos que algo tenha realmente tentado alocar tanta memória privada comprometida que precise de espaço ampliado no arquivo de paginação para armazenar o material. Mas, talvez algo tenha acontecido. Dê uma olhada na guia Processos do Gerenciador de Tarefas. A coluna "Tamanho do commit" mostra isso para cada processo. Clique no título da coluna para ver quem é o porco. :)

Isso é extremamente irritante porque desabilitar o arquivo de paginação ou não configurá-lo para a mesma quantidade de RAM instalada causa problemas em alguns programas que usam muita memória como o 7zip, eles apenas afirmam que não há memória suficiente para alocar, embora haja bastante memória suficiente de memória utilizável livre.

Isso não tem a ver com a RAM disponível, mas com algo chamado "carga de confirmação" e "limite de confirmação". O "limite de confirmação" é a soma de (RAM - memória virtual não paginável) + tamanho atual do arquivo de paginação. (Não RAM livre, apenas RAM.) Portanto, um sistema com, digamos, 8 GB de RAM e 16 GB de arquivo de paginação atual teria um limite de confirmação de cerca de 24 GB ("cerca de" porque a RAM que contém conteúdo não paginável não conta para o limite de confirmação) .

A "taxa de confirmação" é quanto espaço de endereço privado existe atualmente no sistema. Isso deve ser menor que o limite de commit, caso contrário o sistema não poderá garantir que o material tenha um lugar para estar.

Na guia Desempenho do gerenciador de tarefas você pode ver esses dois números com a legenda "Commit (GB)". por exemplo, estou olhando para uma máquina que diz "Commit (GB) 1/15". Isso representa 1 GB de cobrança de confirmação atual do limite de 15 GB.

Se um programa como o 7zip tentar fazer, por exemplo, um VirtualAlloc de tamanho> (commitLimit - commitCharge), ou seja, maior que o limite de commit "restante", então se o sistema operacional não puder expandir o arquivo de paginação para tornar o limite de commit grande o suficiente, o solicitação de alocação falha. É isso que você está vendo acontecendo. (Na verdade, o Windows não tem nenhuma mensagem de erro para "pouca memória física", não para acesso no modo de usuário! Apenas para virtual.)

Não tem nada a ver comlivreRAM, já que toda RAM (menos a pequena parte que não pode ser paginada) conta para o limite de commit, esteja ela atualmente livre ou não.

É confuso porque quando você olha para o sistema após uma dessas falhas de alocação, aparentemente não há nada errado - você olha para o sistema, sua taxa de commit está bem abaixo do limite, você pode até ter muita RAM livre. Você teria que saber quanta memória privada comprometida o programa estava tentando alocar para ver qual era o problema. E a maioria dos programas não lhe dirá.

Parece-me que o 7zip está sendo muito agressivo ao tentar alocar vas, talvez esteja dimensionando suas solicitações com base no tamanho da RAM? Tem certeza de que não existe uma configuração de arquivo de paginação menor onde o 7zip ficaria feliz? Você está usando a versão de 32 ou 64 bits do 7-zip? Usar a versão de 32 bits resolveria isso, já que ela não pode usar mais de 2 ou talvez 3 GB de espaço de endereço virtual. É claro que pode não ser tão rápido em grandes conjuntos de dados.

Esse comportamento diminui potencialmente a vida útil das minhas unidades (SSDs) tremendamente.

Bem, não, na verdade não. Simplesmente colocar um arquivo de paginação de qualquer tamanho não significa que o sistema irá realmente gravar tanto no arquivo de paginação. (A menos que você tenha a opção definida como "limpar arquivo de paginação ao desligar", e mesmo assim eu não acho que ele escreva tudo; o Mm sabe quais blocos estão em uso e só deve escrevê-los... Nunca pensei disso antes; terei que verificar.)

Se você quiser ver quantas coisas realmente estão em seu arquivo de paginação, use o utilitário PerfMon. Existe um grupo de contadores para o arquivo de página e, é claro, você deseja o contador "% de uso". Interprete essa porcentagem de acordo com o tamanho real do arquivo (conforme mostrado no Explorer).

Ele usa muito espaço e como o espaço em um SSD é muito caro, isso é uma preocupação para a maioria de nós. Uma coisa que você pode tentar é colocar um arquivo de paginação de tamanho razoável, digamos 4 ou 8 GB, em seu SSD, anexar uma unidade giratória e colocar um arquivo de paginação grande nele. Ou se você quiser um SSD e nada mais para o seu arquivo de paginação, compre um pequeno e barato apenas para o segundo arquivo de paginação.

informação relacionada