Abrindo arquivos de tamanho maiores que a RAM, nenhuma troca usada.

2

Eu me peguei fazendo essa pergunta enquanto fazia pequenos experimentos e lia como a memória é gerenciada no Linux.

Eu tenho uma máquina Centos 6.5 de 64 bits com 512M de RAM e 1G de SWAP. Eu criei um arquivo de 1GB '/ mytest' (usando dd ) e abri o arquivo com vi . Uma vez que o arquivo foi completamente aberto, abri outro terminal para ver o uso da memória. Como esperado, o vi apareceu no topo quando a saída top é ordenada pelo uso de memória. Então eu verifiquei free -m esperando ver o uso do swap subir, mas para minha surpresa, o uso do SWAP é NIL. Como o tamanho do arquivo aberto é duas vezes o tamanho da RAM, onde está o arquivo mantido na memória?

[root@server ~]# ps aux | grep mytest
root     18940  8.5 53.3 287880 267156 pts/0   S+   09:25   0:28 vi /mytest
root     18976  0.0  0.0    364   144 pts/1    R+   09:31   0:00 grep mytest

[root@server ~]# ll -h /mytest
-rw-r--r-- 1 root root 1000M Oct 24 09:25 /mytest

[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           489        481          7          0          2        140
-/+ buffers/cache:        337        151
Swap:         1023          0       1023

O Swappiness está ativado e está no valor padrão 60. E na saída top , o uso da memória em VIRT e RES não está somando em torno do 1G como eu esperava.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18940 root      20   0  281m 260m 1172 S  0.0 53.3   0:28.85 vi /mytest

Eu até mesmo rolei pelo arquivo 1G aberto para ver se o uso da troca está subindo apenas quando estou rolando (usei sleep no outro terminal), mas ainda assim o uso da troca foi nulo. Agora parece que todo o meu entendimento de como funciona a memória e a troca está incorreto. Alguém pode esclarecer como esse enorme arquivo é retido na memória quando o tamanho do arquivo é o dobro do tamanho da memória?

    
por Sree 24.10.2014 / 11:46

1 resposta

1

O mais provável é que você precise usar um editor "burro" para usar a memória RAM e acho que é o VI que "troca" por você. Normalmente Vi usa um arquivo para enforcar seu buffer.

Você pode procurar outras respostas neste site. Por exemplo.: O que acontece se eu usar o vi em arquivos grandes?

    
por 24.10.2014 / 13:39