Por que o Windows 7 usa o arquivo de paginação quando há RAM física gratuita?

43

Estou usando o Windows 7 de 64 bits com 8G de RAM. Depois de algum uso, sinto que o Windows está ficando lento. A unidade está se debatendo. Quando olho para o monitor de recursos e a atividade do disco, vejo algumas instâncias de uso do arquivo de paginação (c: \ pagefile.sys). Verifico a memória física e vejo cerca de 2.3G de memória disponível e 700M de memória livre.

Por que o Windows não usa mais memória livre e menos arquivo de paginação? Precisa deixar uma quantidade x de RAM livre, quanto isso seria? É uma porcentagem de RAM física?

Meu plano é obter mais RAM e um SSD para a unidade principal. Enquanto isso, estou sofrendo de desempenho lento.

Tony_Henrich
fonte
1
Só porque está gravando / lendo no arquivo de paginação não significa que estamos usando, ele pode estar apenas atualizando-o para que possa descarregar a memória mais rapidamente se houver uma demanda repentina. Eu recomendo executar o monitor de desempenho ou fazer um diagnóstico profundo e ver o que está causando a lentidão.
22412 Scott Scott
Ter mais de 8 GB de RAM não aumentará o desempenho em 99. (9)% dos casos. Você encheu seu mobo com chips de RAM baratos de baixa frequência / alta latência? Substituí-los seria uma ideia melhor do que adicionar mais.
precisa saber é
3
@kotekzot Isso depende. Geralmente, considero a latência da RAM um pouco insignificante na maioria dos gargalos. Se ele tiver memória suficiente para não precisar esperar que os aplicativos sejam acessados ​​ao percorrer todas elas com a tecla Alt, então o próximo maior gargalo de várias ordens de magnitude é quase sempre o disco rígido, e um SSD corrigirá esse problema acima.
Darth Android
@se eu tiver mais memória ram, posso colocar o arquivo de paginação em um ramdisk muito mais rápido que o acesso ao HD. É um nível de estação de trabalho laptop Dell, então eu tenho certeza que os componentes não são baratos. Estou ciente de que os laptops têm discos rígidos e E / S mais lentos do que os desktops.
Tony_Henrich
1
Por favor, não coloque seu arquivo de paginação em um disco RAM. Isso fará com que o sistema sofra mais falhas de página. Sim, se estiverem no disco de arquivo de paginação em RAM, eles serão resolvidos mais rapidamente do que se tivessem ido para um disco real, mas não tê-los ainda é muito mais rápido; Além disso, muitas das falhas de página aumentadas serão nos arquivos mapeados e essas não serão ajudadas pelo disco RAM.
Jamie Hanrahan

Respostas:

33

Primeiro, não coloque seu arquivo de paginação em um SSD. Embora os SSDs tenham melhorado com o nivelamento de desgaste, o arquivo de paginação é gravado com freqüência e degradará seu SSD muito mais rápido que o uso geral.

O que muitas pessoas não entendem é que o Windows nunca tem realmente memória livre. Existem alguns MBs que são mantidos livres para demandas de intermitência, mas, caso contrário, a diferença entre a memória ativa do aplicativo em uso e a memória total é geralmente consumida pelo que é conhecido como memória "em espera".

Memoria do sistema

Essas são páginas de memória que podem ser despejadas, se necessário (a memória em espera é um grande e grande cache); portanto, do ponto de vista do aplicativo, ela está disponível, mas elas não estão sendo usadas de forma alguma. Geralmente, eles funcionam como cache de disco ou cache de arquivo de paginação.

O objetivo do Windows é manter os dados com maior probabilidade de serem usados ​​nesse cache em espera, com base nos padrões de uso. Para usar um exemplo artificial, vamos comparar o valor relativo da memória privada de um programa como o Windows Update (geralmente configurado para ser executado uma vez por semana), com o armazenamento em cache do conteúdo da área de trabalho nessa memória em espera:

Na maior parte do tempo, o Windows Update está em suspensão. Ele mantém a memória e, na maioria das vezes, não faz absolutamente nada de valor enquanto aguarda a programação chegar. O conteúdo da pasta da área de trabalho, por outro lado, pode ser consultado constantemente, especialmente se você deseja salvar arquivos nela.

Nesse caso, o que o Windows fará é paginar a memória alocada para o Windows Update (mesmo que a memória não esteja "cheia" e usar o espaço disponibilizado na RAM para armazenar em cache o conteúdo da área de trabalho. Isso resulta em melhor desempenho para você.

O Windows está tomando milhares dessas decisões e gerenciando um cache de disco para centenas de arquivos sendo gravados constantemente pelos serviços em segundo plano, enquanto tenta equilibrar isso com as demandas de memória dos aplicativos ativos. Às vezes, isso fica errado por um momento, e talvez tenhamos que esperar para que os dados sejam devolvidos à memória quando alternamos para um aplicativo que dorme em segundo plano há um tempo. Mas o que você precisa pensar é que, se ele mantivesse esse aplicativo completamente na memória, quantos outros aplicativos estariam atolados, aguardando a conclusão de gravações e leituras de disco ou seriam forçados a paginar? E se esses fossem os aplicativos que você estava usando nesse meio tempo?


Os aplicativos frequentemente alocam páginas de memória usadas muito raramente, como código de inicialização (usado uma vez e depois não é necessário), código de desligamento (usado uma vez e depois não é necessário) ou código de atualização. Não é prático manter tudo isso na memória quando houver usos muito mais importantes; portanto, uma vez que o Windows identifique seções de código que não foram necessárias para a operação atual de um aplicativo, ele pagina essas seções para o arquivo de paginação, mesmo que tecnicamente poderia retê-los na memória.

(E, na verdade, dependendo dos aplicativos, os sistemas frequentemente alocam mais memória do que realmente têm, esperando que a maior parte acabe sendo paginada. Se você estiver vendo uma quebra de memória detalhada, a cobrança "Confirmar" ou "Confirmar" é a quantidade de memória que o Windows alocou para vários aplicativos. O arquivo de paginação é usado para fornecer garantias para essa memória, mesmo que ela não tenha RAM física suficiente para cobri-la.)


Acabei de notar que você fez uma distinção entre memória disponível e livre na sua pergunta; Peço desculpas se você se sente lecionado e já sabia a diferença. Idealmente, a memória livre é sempre 0. No entanto, enquanto a memória em espera é a memória que pode ser liberada, nem sempre é a memória que pode ser liberada rapidamente. Se eu tentar gravar um arquivo de 1 GB no disco, o Windows o colará em um cache de disco na memória, se puder, e depois gravá-lo lentamente no disco rígido em segundo plano. Se um aplicativo precisar solicitar 50 MB de memória adicional, mas nenhum estiver disponível porque esse enorme cache de disco ainda está sendo liberado, o aplicativo será interrompido até que esteja disponível. Manter um pequeno buffer disponível permite que o sistema resolva esse problema com um atraso mínimo do ponto de vista do usuário.

Darth Android
fonte
6
@FrankComputer Veja a captura de tela que publiquei para o meu sistema de trabalho de 8 GB: 6300 MB em uso, 1700 MB em disco / cache em espera, 42 MB grátis. Olhando para o meu sistema doméstico (32 GB de memória), você está realmente correto, mas com o limite errado: 9,2 GB em uso, 14,5 GB de cache em disco, 8,6 GB grátis. Você terá memória livre se o Windows simplesmente ficar sem espaço para armazenar em cache, mas esse limite é bastante alto. O Windows não está constantemente trocando porque o cache do disco não está trocando espaço - é armazenado em cache passivamente quando os arquivos são solicitados e não estão no cache. Você não percebe os horários em que ele extrai do cache e não há atividade no disco rígido.
Darth Android
8
@ FrankComputer: Se o seu sistema está funcionando bem, não é por causa da memória livre. Memória livre é a memória que o sistema não está usando e não pode ter mais efeito no desempenho do que a memória em sua mesa. A única maneira de melhorar o desempenho com a memória é usá- lo; portanto, se estiver livre, não está sendo usado para melhorar o desempenho. Tornar mais memória livre significa usar menos, piorando o desempenho.
David Schwartz
1
@Tony_Henrich Desativar o arquivo de paginação está incorreto. Muito mal. (Mover o arquivo de paginação para um ramdisk é efetivamente o mesmo que desabilitá-lo. O Windows não consegue mover dados que não precisam imediatamente de memória). Muitos programas solicitam memória que eles não precisam imediatamente, mas que podem precisar no futuro. Normalmente, o Windows aloca essa memória no arquivo de paginação e não faz nada. Por exemplo. O servidor MSSQL aloca 8 GB de RAM quando é inicializado. Mesmo para 0 bancos de dados. Só porque. Se você colocar o seu arquivo de paginação em um disco RAM, você vai perder uma quantidade considerável de RAM que poderiam ser usados para o cache
Darth Android
1
@Tony_Henrich Atualmente, o Windows está gerenciando de maneira ideal seu arquivo de paginação e sua RAM, considerando como você usa seu sistema. As únicas melhorias que você pode fazer são: Adicione mais memória ou mova seu sistema operacional para um SSD. Mexer com o seu arquivo de paginação prejudicará, na melhor das hipóteses, o desempenho geral do sistema ou afetará, na pior das hipóteses, a estabilidade do sistema.
Darth Android
1
Você está explicando o que o Windows faz com a memória. Se eu tiver muita memória livre, o Windows deve usá-la, independentemente de um aplicativo estar dormindo ou não fazer nada. Qual é o mal em mantê-lo na memória quando a memória está disponível. Depois que a memória fica baixa, o Windows pode fazer uso do arquivo de paginação. O uso do arquivo de paginação está causando desgaste na unidade. Não há nenhum desgaste no uso da memória. Segundo, eu uso um SSD para o meu arquivo de paginação. Embora a vida útil dos SSDs seja menor que os discos rígidos e ainda haja desgaste com muitas gravações, isso ainda não ocorre em alguns meses. Ainda está em anos.
Tony_Henrich
4

Isso se chama planejamento antecipado.

Gravar páginas de memória no arquivo de paginação quando ainda há bastante RAM é uma coisa boa. Assim que um programa solicitar mais memória do que o disponível, o sistema operacional poderá começar a limpar o espaço o mais rápido possível. Melhor preparar agora que mais tarde.

Se o sistema operacional tiver que esperar, você terá um gargalo de desempenho. Se um programa solicitar mais memória do que o disponível, agora é necessário aguardar até o sistema operacional gravar o bloco de memória alterado e liberá-lo.

surfasb
fonte
Com 16G + e com programas leves, os horários em que um programa solicita mais memória do que o que é gratuito são muito menores que o uso frequente do arquivo de paginação. Portanto, nesses casos, é melhor usar parte da memória livre e menos do arquivo de paginação. Não existe uma solução que se adapte a todos os casos.
Tony_Henrich
1
Eu não acho que você entendeu. Não precisa ser um ou outro. O Windows pode gravar para liberar memória e gravar no arquivo de paginação. Não é como escrever no arquivo de paginação ou na memória.
Surfasb
1
Mas, tentando planejar com antecedência, o Windows não está potencialmente preenchendo o cache no chip do HDD / SDD - tornando as operações simultâneas de gravação / carregamento de arquivos mais lentas? Essa pré-troca de RAM parece uma boa ideia, mas parece que, aliás, carrega o sistema em momentos ruins.
binki
1
@binki: Sim, isso interfere nos tempos de leitura / gravação do disco, mas se bem me lembro, eles estão usando uma prioridade mais baixa, então outras leituras e gravações devem ocorrer primeiro em geral.
Mooing Duck
2

Eu tenho o arquivo de paginação desativado nos últimos 7 anos. Na verdade, é a primeira coisa que faço após a instalação nova. Nunca tive nenhum problema com isso. (Na verdade, eu tive um jogo chamado "titan quest" realizado uma verificação muito estúpida na inicialização, então criei um arquivo de paginação de 4 MB apenas para fazê-lo feliz e desliguei o PF mais tarde). Quanto à pergunta original. O Windows usa nossa RAM para cache de E / S de disco. Por alguma razão, ele acha que o cache do disco é igualmente importante para o código e os dados dos programas ativos. E não há como limitar o tamanho do cache do disco. Está lá por design e não podemos fazer nada sobre isso ... Oh, espere! Nós podemos! Apenas desative o arquivo de paginação. Executando aplicativos pesados ​​na RAM? Compre mais RAM ou feche um aplicativo antes de iniciar outro. Você pode usar o Process Explorer para ver quanta memória é usada em um determinado momento.

Anton Duzenko
fonte
1
Livrar-se do arquivo de paginação não desativará o cache do disco.
Jamie Hanrahan
1
Você escreveu: "[O cache de disco] existe por design e não podemos fazer nada a respeito. Ah, espere! Podemos! Basta desativar o arquivo de paginação." Bem, desativar o arquivo de paginação não faz nada sobre o cache de disco, então o que você está dizendo? É uma idéia estúpida de qualquer maneira, pois força o sistema operacional a manter todos os commit privados na RAM para sempre, uma vez tocado. Isso deixa menos espaço para a memória virtual mapeada (como código), para que o material precise ser paginado mais. O cache de disco proativo (super busca) usa o que resta depois de tudo o que foi dito acima, para não aumentar a paginação.
Jamie Hanrahan
1
Eu nunca disse (ou pensei) que desligar o arquivo de paginação era sua ideia, então não estava dizendo nada sobre "sua idéia". Ah, enquanto eu estou aqui: "Por alguma razão [o Windows] acha que o cache do disco é igualmente importante para o código e os dados dos programas ativos" está completamente errado. O Superfetch usa apenas páginas que estão na lista de espera e, portanto, já fazem parte de " disponível" RAM; ele não leva páginas de programas de código e dados e essas páginas. permanecem código e dados, mesmo depois que eles contêm dados armazenados em cache a partir de arquivos disponíveis, ou seja, imediatamente disponível para programas.
Jamie Hanrahan
1
Não estou dizendo nada disso. (Onde você está conseguindo isso?) Estou dizendo, porém, que o Windows nunca pagina nada para abrir espaço para o cache do disco. Pelo contrário, o cache usa páginas que atualmente não fazem parte dos processos e, portanto, seriam desperdiçadas. Tais restos de RAM imediatamente disponíveis para o código e os dados que precisa dele para paginação coisas em , por isso não é "consumida" pelo cache, apenas "emprestado". Portanto, o cache não reduz a quantidade de código e dados que podem ser paginados ou mantidos na RAM. Ref: Windows Internals de Solomon, Russinovich e Ionescu.
Jamie Hanrahan
1
Eu já respondi na resposta do DA. Mas o que você acabou de dizer não é o que ele disse. Ele disse que o Windows paginará os processos inativos há muito tempo (verdadeiro). E ele também disse que o cache do disco pode usar as páginas liberadas assim (também é verdade). Mas isso não significa que o cache do disco esteja necessariamente tendo precedência. O cache do disco usa essas páginas apenas se nada mais de alta prioridade precisar delas. Uma enorme quantidade de testes demonstrou que essa é uma boa desvantagem.
Jamie Hanrahan
1

Os argumentos ( aqui e aqui ) para manter e usar o arquivo de paginação, mesmo que haja RAM suficiente, são:

  • Mesmo se houver memória livre agora, a máquina pode ficar sem memória mais tarde. Melhor colocar poucas partes de memória usadas em disco com antecedência.
  • Também há memória "em espera" que aparece como livre, mas é realmente usada para cache de disco. Também é importante para o desempenho, melhor ter alguns.
  • Se você ficar sem memória RAM com o arquivo de paginação desativado, é uma falha grave.
  • Embora 2, 4, 16 ou qualquer outro número de Gb de RAM pareça "muito", isso pode não ser tão verdadeiro quanto você pensa. Você precisa criar um perfil.

Com o monitor de recursos do Windows, é possível ver quanta RAM é usada para armazenamento em cache (mostrado como "Em espera").

Se você perceber que sua RAM está realmente em uso ou em espera, o arquivo de paginação é útil para você. Se a combinação de tarefas e RAM disponível for de tal forma que uma parte significativa da memória apareça como não utilizada ("Livre"), acho que não há necessidade de triturar o disco rígido apenas em relação a alguém que "conhece melhor e disse isso aqui" "

h22
fonte
-2

Todos esses comentários e a resposta correta estão ausentes. Desligue seu arquivo de paginação. Não é necessário com 8 GB de RAM e, se você precisar de mais RAM, compre. bem simples mesmo.

a2552308
fonte
4
O Windows é bastante inteligente para determinar o que (não) colocar no arquivo de paginação. Com exceção de alguns cenários quase puramente teóricos, desativá-lo prejudicará o desempenho, mesmo com 8 GB de RAM. Mesmo que a resposta correta estivesse faltando, certamente não é isso.
Marcks Thomas
4
Tem alguma evidência para fazer backup de sua reivindicação de "desempenho prejudicial"? Apresento um artigo da Microsoft support.microsoft.com/kb/889654
a2552308 18/12/12
6
Simplificando: os arquivos de paginação só podem aumentar a atividade do disco ... e o Windows não é inteligente o suficiente para não usá-lo se tiver muita RAM. Em um sistema SSD, isso pode não ser muito perceptível; em um sistema de eixo, isso pode afetar muito o desempenho do aplicativo. Consulte o cartaz original.
a2552308
2
Seção relevante do artigo da MS: "No entanto, à medida que mais RAM é adicionada ao computador, a necessidade de um arquivo de paginação diminui. Se você possui RAM suficiente instalada no computador, pode não ser necessário um arquivo de paginação, a menos que seja necessário. por uma aplicação específica ". Não consegui encontrar as seções relevantes dos muitos artigos que você vinculou, talvez você possa citar as seções relevantes?
a2552308
2
Parece bom em teoria, mas não o que observei na prática.
a2552308