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?