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?