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


10

Meu PC com Windows 7 de 64 bits é muito lento. Percebi no Gerenciador de Tarefas que meu uso de memória é próximo de 100% - no entanto, o uso relatado para cada processo não totaliza 6 GB (o Firefox mostra cerca de 500 MB, o restante muito menos). Fiz o download do RAMMap e descobri que a tabela de páginas está ocupando uma quantidade considerável de memória (2,5 GB).

Captura de tela de RAMMap

Pesquisei isso no Google e não cheguei a lugar nenhum - aparentemente a tabela de páginas pode ficar fragmentada. Obviamente vou reiniciar a máquina e ver se isso ajuda. Mas existe uma maneira melhor de corrigi-lo?

EDIT: reiniciado e a tabela de páginas está reduzida a 30 MB.

EDIT 2: Após alguns dias de atividade, o uso da tabela de páginas está subindo novamente. Segui as instruções de @ magicandre1981 nesta resposta para encontrar a fonte do uso da tabela de páginas. Infelizmente, desenhei um espaço em branco - a tabela de páginas é usada por "Desconhecido"!

Captura de tela WPA

Alguém tem alguma idéia brilhante?


Você precisa determinar o que está usando seu arquivo de paginação para entender o motivo pelo qual o uso do arquivo de paginação (ou seja, sua memória virtual) é alto.
Ramhound 14/07

1
Não, acho que isso é memória física em uso, não virtual. Eu pensei que a tabela de páginas era algum tipo de referência para o gerenciador de memória?
Bens161

2
Como eu disse na pergunta, não há nenhum processo que esteja usando memória. Fiquei com a impressão de que a tabela da página era uma coisa diferente do arquivo da página .
Bens161


1
A tabela de páginas É uma coisa muito diferente do arquivo de páginas. Veja minha resposta abaixo. Além disso, enquanto o arquivo de paginação pode ficar fragmentado, as tabelas de páginas ... bem, elas sempre estão fragmentadas (como as espalhadas pela RAM) e isso não importa nem um pouco.
21715 Jamie Hanrahan

Respostas:


5

Eu preciso comentar os comentários da pergunta, particularmente a confusão entre "tabela de páginas" e "arquivo de página". Esta não é uma resposta, mas não cabe no espaço permitido para comentários.

"Tabela da página" é realmente 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 constituídas por tabelas de páginas) se refiram ao conteúdo do arquivo de paginação, nem todas.

As tabelas de páginas são estruturas na memória usadas pela MMU da CPU para executar a conversão de endereços de endereços virtuais (novamente, não o arquivo de paginação) para endereços físicos, e pelo sistema operacional para rastrear o espaço de endereço virtual e ajudar a resolver falhas de página. As tabelas de páginas 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 de espaço de endereço virtual.

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

Cada PTE possui 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 paginação em x86 / x64. O seguinte é amplamente específico para Windows, mas muitos dos conceitos se aplicam a outros sistemas operacionais, com diferenças nos detalhes de 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 em que o conteúdo da página foi gravado. Outros conteúdos possíveis de PTE são referências a descritores de endereços virtuais , referências a "protótipos de PTEs", referências a exigir zero páginas, etc., nas quais não vou entrar. Basta dizer que apenas alguns dos PTEs se referem a locais nos arquivos de paginação.

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 em árvore. Há uma árvore ou coleção de tabelas de páginas diferente para cada processo - é isso que permite que cada processo defina sua própria instância do espaço de endereço virtual. A tabela de páginas na raiz da árvore deve estar na RAM o tempo todo. Os outros são pagináveis; eles ainda não existem, 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 - os mais próximos da raiz (e a 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) de todos os processos, além do SO.

O 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, existem 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 o que o RAMmap pode nos mostrar. Mas suponha que seja "apenas" 2,5 GB. A oito bytes por PTE, isso é 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 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 não devo abordar aqui, também pode ajudar a explicar 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, eu primeiro procuraria no Monitor de Desempenho, na categoria Processo, processos com um alto valor de contador "Bytes Virtuais".


4

O Lenovo "RapidBoot Shield" foi o culpado por mim.

Depois de uma semana sem reiniciar, minha "Tabela de páginas" estava usando 4 GB +. Aconteceu que todos os processos terminados permaneceram usando 20K RAM (4K privado, 16K Page Table), como mostrado na guia "Processos" do RamMap, e havia ~ 200.000 deles!

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

Com base nas sugestões desse segmento de tecnologia, eu desinstalei o "RapidBoot Sheild", reiniciei a máquina e, em seguida, os processos não ficaram mais por perto quando mortos. Problema resolvido!



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 "Generic PnP Monitor" padrão do Windows. Mas quando os atualizei para a marca e modelo corretos dos meus monitores, o problema pareceu desaparecer.


1

Abra a guia "Processos" no RamMap e classifique por nome. Procure um número alto suspeito do mesmo processo. Na minha máquina, "SynTPEnh.exe" foi o culpado (parte do driver do touchpad). Após uma semana de atividade, acumulou dezenas de milhares de entradas na tabela de páginas, cada uma com 32kb de tamanho.

O tamanho da tabela da minha página era de 1 GB, após uma reinicialização, é de apenas 50 MB.

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.