Visualização de pagetable para um processo

3

Eu quero ver o pagetable que o kernel gerencia para um dos meus processos. No meu caso, o PID 4680 é mapeado para dhclient . Então, para ver a tabela de páginas, tentei o seguinte:

sudo cat /proc/4680/pagemap 

No entanto, este comando apenas trava no meu Ubuntu 14.04 sem qualquer saída. Eu tentei esperar 2 minutos e depois tenho que matá-lo.

Existe uma maneira melhor de fazer isso?

    
por sshekhar1980 04.06.2017 / 21:04

2 respostas

5

De acordo com a documentação , /proc/PID/pagemap contém um valor de 64 bits para cada virtual página.

Com páginas de 4096 bytes e um espaço de endereço virtual de 64 bits, há 2**52 páginas. Portanto, o arquivo pagemap completo será 2**52 de entradas de 8 bytes cada. Esse é um arquivo muito grande. Catting a coisa toda vai demorar muito tempo. Não 2 minutos. Muito tempo. Um teste de velocidade no meu computador sugere cerca de 21 anos.

E, na maioria das vezes, ele será preenchido com zeros (para todos os endereços virtuais que não estão mapeados no processo). Um monte de saída de /proc/PID/maps para um terminal não causa nenhum efeito visível. Não está pendurado, está fazendo o que você pediu.

Não é um arquivo de texto, portanto, as entradas que não são zero provavelmente não ficarão bem no seu terminal.

O jeito certo de usar o arquivo pagemap é saber qual endereço virtual você está procurando, procurar e ler 8 bytes. Ou se você quiser informações para um intervalo, leia um múltiplo de 8 bytes. Se você quiser todas as entradas diferentes de zero, primeiro leia %code% para descobrir quais intervalos são mapeados.

    
por 05.06.2017 / 01:58
0

Eu suspeito que você esteja procurando por /proc/<pid>/maps . Você pode ver o mapa do programa e suas bibliotecas. Se você quiser acessar o conteúdo de cada uma dessas áreas, poderá acessar o diretório /proc/<pid>map_files , onde cada nome de arquivo é definido pelo intervalo de memória de cada bloco.

Mais informações sobre isso no homem proc , procure /proc/[pid]/map_files/ e parágrafos seguintes.

Aqui está um exemplo de (parte) dos blocos de uso de memória de um programa baseado em X11:

    
por 04.06.2017 / 22:16