Por que minha tabela de páginas ocupa tanta memória?

8

Meu computador com Windows 7 de 64 bits é muito lento. Percebi no Gerenciador de Tarefas que meu uso de memória está próximo de 100% - no entanto, o uso relatado para cada processo não chega ao total de 6 GB (o Firefox mostra cerca de 500 MB, o restante é muito menor). Eu baixei o RAMMap e descobri que a Tabela de Páginas está ocupando um quantidade considerável de memória (2,5 GB).

Eupesquiseiissoenãochegueialugarnenhum-aparentementeatabeladepáginaspodeficarfragmentada.Obviamente,voureiniciaramáquinaeverseissoajuda.Masexisteumamaneiramelhordecorrigirisso?

EDIT:reinicializadoeatabeladepáginasestácom30MB.

EDIT2:Apósalgunsdiasdeatividade,ousodatabeladepáginasestásubindonovamente.Euseguiasinstruçõesdo@magicandre1981em esta resposta para encontrar a origem do uso da tabela de páginas. Infelizmente eu desenhei um espaço em branco - a tabela de páginas é usada por "Desconhecido"!

Alguém tem alguma ideia brilhante?

    
por benshepherd 14.07.2014 / 10:38

4 respostas

1

Perguntei ao meu departamento de TI sobre isso, e eles foram igualmente enganados. Acabei usando o DriverEasy para atualizar meus drivers. Os que pareciam fazer a diferença, estranhamente, eram os drivers do monitor. Anteriormente, eu tinha os drivers padrão do Windows "Generic PnP Monitor". Mas quando atualizei essas informações para a marca e o modelo corretos dos meus monitores, a questão pareceu desaparecer.

    
por 05.10.2014 / 20:55
4

Preciso comentar os comentários da pergunta, principalmente a confusão entre "tabela de páginas" e "arquivo de paginação". Isso não é uma resposta, mas não caberá no espaço permitido para comentários.

"Tabela de páginas" é de fato uma coisa muito diferente do arquivo de paginação. Ter n MB de RAM usado para tabelas de páginas não significa que você está usando n MB de espaço no arquivo de paginação. E, embora algumas entradas da tabela de páginas (PTEs, que são o que consistem de tabelas de páginas) se refiram ao conteúdo do arquivo de paginação, nem todas fazem isso.

As tabelas de páginas são estruturas na memória que são usadas pela MMU da CPU para executar tradução de endereços de endereços virtuais (novamente, não o arquivo de paginação) para endereços físicos e pelo SO para acompanhar espaço de endereço virtual e ajuda a resolver falhas de página. Tabelas de página consistem em entradas da tabela de páginas (PTEs). Cada PTE ocupa 8 bytes e define 4K bytes de espaço de endereço virtual - ou seja, uma página virtual. Há, aproximadamente, um PTE para cada página não-livre do espaço de endereço virtual.

A propósito, embora o arquivo de paginação possa experimentar tanto a fragmentação externa quanto a interna (o primeiro geralmente não é um grande problema; o último pode ser melhorado tornando-o cerca de quatro vezes maior do que o necessário), tabelas de páginas não podes. Eles são sempre fragmentados, e isso não importa nem um pouco.

Cada PTE tem um bit "válido". Para páginas "válidas", também conhecidas como "residentes", o PTE contém o número da página física que corresponde ao número da página virtual associado ao PTE; isso é usado diretamente pela MMU.

Para páginas "inválidas", a MMU gera uma falha de página e o PTE tem muitos formatos e interpretações possíveis.

Nota: Todas as opções acima se aplicam a qualquer sistema operacional que permita pager em x86 / x64. O seguinte é bastante específico para o Windows, mas muitos dos conceitos se aplicam a outros sistemas operacionais, com diferenças nos detalhes da implementação.

Para uma página no cache da página, o PTE ainda contém o número da página física. Para páginas que foram perdidas da RAM e gravadas no arquivo de paginação, o PTE contém o número do arquivo de paginação e o deslocamento no arquivo de paginação onde o conteúdo da página foi gravado. Outros conteúdos possíveis de PTEs são referências a descritores de endereço virtual , referências a "protótipos de PTEs", referências a páginas de demanda zero , etc., nas quais não vou entrar . Basta dizer que apenas alguns dos PTEs referem-se a locais em arquivos de paginação.

Eu menciono tudo isso principalmente para mostrar que o arquivo de paginação e as tabelas de páginas, embora relacionadas, definitivamente não são a mesma coisa.

As tabelas de páginas são organizadas em uma estrutura de árvore. Existe uma árvore diferente, ou uma coleção de tabelas de páginas, para cada processo - isto é o que permite que cada processo defina sua própria instância de espaço de endereço virtual. A tabela de páginas na raiz da árvore deve estar sempre em RAM. Os outros são pagináveis; eles são mesmo inexistentes onde corresponderiam a regiões grandes (mínimo de 2 MB) de espaço de endereço virtual indefinido ou livre.

As entradas da tabela de páginas nas tabelas nas "folhas" da árvore correspondem às páginas do espaço de endereço virtual. Os PTEs nas tabelas de nível superior - aqueles mais próximos da raiz (e da própria raiz) - informam onde estão as próximas tabelas de nível inferior (se elas existirem).

O número mostrado pelo RAMmap é a memória física (RAM) ocupada por todas as tabelas de páginas residentes (em RAM) para todos os processos mais o SO.

O que é importante aqui é que o sistema no OQ tinha 2.5 GB de RAM amarrados com tabelas de páginas. Isso significa que, no mínimo, há 2,5 GB de tabelas de páginas definidas. Como as tabelas de páginas são pagináveis, o tamanho virtual pode ser muito maior que o tamanho físico, o que é tudo que o RAMmap pode nos mostrar. Mas suponha que seja "apenas" 2,5 GB. Com oito bytes por PTE, são cerca de 320 milhões de PTEs. Como cada PTE define uma página - 4K bytes - de espaço de endereço virtual, isso significa que mais de 1,2 terabytes de espaço de endereço virtual são definidos por tabelas de páginas na memória .

Isso não é impossível, mas é bastante.

Para referência, no meu sistema atm, tenho cerca de 125 MB de RAM nas tabelas de páginas. Isso indicaria apenas cerca de 65 GB de espaço de endereço virtual. Meu uso virtual real é muito maior (125 TB apenas para processos), mas isso ocorre porque a maioria das tabelas de páginas não está na RAM. "Páginas grandes", outra coisa que eu não deveria entrar aqui, também pode ajudar a explicar as diferentes proporções entre o tamanho das tabelas de páginas e o tamanho do espaço de endereço virtual em uso.

Portanto: para encontrar o culpado, primeiro procuraria no Monitor de Desempenho, na categoria Processo, processos com um alto valor de contador "Bytes virtuais".

    
por 26.09.2015 / 09:01
3

Lenovo "RapidBoot Shield" foi o culpado por mim.

Após uma semana sem reiniciar, minha "Tabela de Páginas" estava usando 4 GB +. Descobriu-se que todo processo terminado ficava em torno de 20K de RAM (4K private, 16K Page Table) como mostrado na aba "Processos" do RamMap, e havia ~ 200.000 deles!

A reinicialização reduziu a lista, mas começou a crescer novamente. Foi reproduzível ao abrir o bloco de notas, matando-o e observando que ele permanece na lista de processos do RamMap.

Com base nas sugestões sobre este thread technet Eu desinstalei o" RapidBoot Sheild ", reiniciei a máquina e os processos não ficaram mais por aí quando foram mortos. Problema resolvido!

    
por 09.12.2014 / 11:08
3

No meu caso, eles eram Aksdf.sys e driver de filtro Hardlock.sys dos drivers Aladdin Knowledge Systems Aladdin . Eu consegui encontrar essa resposta usando o RAMMap também. Exibiu a memória, consumida pelo processo finalizado. Os processos foram removidos da lista de processos do Windows, mas persistiram no mapa de memória. Os drivers parecem impedir a finalização completa dos processos.

    
por 01.04.2015 / 11:54