I found myself asking this question while doing small experiments and reading upon how memory is managed in Linux.
I have a 64-bit Centos 6.5 machine with 512M RAM and 1G SWAP. I created a 1GB file '/mytest' (using dd
) and opened the file with vi
. Once the file was completely opened, I opened another terminal to look at the memory usage. As expected, the vi
showed up at the top when the top
output is ordered by memory usage. So I checked free -m
expecting to see the swap usage going up, but to my surprise, the SWAP usage is NIL. Since the size of the file opened is twice the size of RAM, where is the file being held in memory?
[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
Swappiness is turned ON and is at the default value 60. And in the top
output, memory usage under VIRT and RES is not adding upto around the 1G as I was expecting.
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
I even scrolled through the opened 1G file to see if the swap usage is going up only when I am scrolling (used sleep
in the other terminal), but still the swap usage was nil. It now looks like my whole understanding of how memory and swap works is incorrect. Can someone throw light to how this huge file is held up in the memory when the size of the file is twice the memory size?
vi
does this, or what all the ways of doing this are? There are a few different ways a file can be opened/modified without loading the entire thing.vi
. I know of other methods to view the contents if the filesize is huge. I was doing various tests to learn how linux manages memory and had this question.@Patrick
so they are notified.