Estaba el otro día aburrido, y me puse a ver la administración de memoria en GNU-Linux, pues bien para ver la memoria tenemos los siguientes comandos
free
vmstat
cat /proc/meminfo
Todos ellos nos dan información de la memoria, asignación, ocupación, capacidad, etc.., pero vamos a ver como se hace.
root@test:~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
root@test:~$ free
total used free shared buffers cached
Mem: 16451724 2614744 13836980 10748 3124 199532
-/+ buffers/cache: 2412088 14039636
Swap: 6291452 0 6291452
Creamos un fichero de 2G
root@test:~$ dd if=/dev/zero of=bigfile bs=1M count=2000
2000+0 registros leídos
2000+0 registros escritos
2097152000 bytes (2,1 GB) copiados, 1,37838 s, 1,5 GB/s
root@test:~$ ls -lh bigfile
-rw-r--r-- 1 root root 2,0G jun 8 19:47 bigfile
Veamos el tiempo que tarda en leer el fichero
root@test:~$ time cat bigfile > /dev/null
real 0m0.484s
user 0m0.008s
sys 0m0.440s
Impresionante 0m0.484s
Vaciamos cache
root@test:~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
root@test:~$ time cat bigfile > /dev/null
real 0m6.350s
user 0m0.000s
sys 0m1.412s
Ahora el tiempo a sido muy superior, motivo al crear el fichero este se ha mantenido en la cache por eso el tiempo de lectura anterior ha sido muy inferior a cuando ya no esta en cache.
Realicemos la prueba de nuevo
root@test:~$ free
total used free shared buffers cached
Mem: 16451724 4809540 11642184 10748 2872 2261648
-/+ buffers/cache: 2545020 13906704
Swap: 6291452 0 6291452
root@test:~$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
root@test:~$ free
total used free shared buffers cached
Mem: 16451724 2732288 13719436 10748 2052 189256
-/+ buffers/cache: 2540980 13910744
Swap: 6291452 0 6291452
root@test:~$ time cat bigfile > /dev/null
real 0m5.695s
user 0m0.000s
sys 0m1.428s
Al haber vaciado de nuevo la cache el tiempo ha sido parecido a la ultima comprobación
root@test:~$ free
total used free shared buffers cached
Mem: 16451724 4787704 11664020 10748 2068 2240832
-/+ buffers/cache: 2544804 13906920
Swap: 6291452 0 6291452
Con vmstat podemos ver los incrementos y decrementos de la cache
root@test:~$ vmstat 2 50
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 10829564 17152 3039636 0 0 26 47 225 80 3 1 96 0 0
0 0 0 10828916 17152 3039956 0 0 0 0 1419 2800 1 0 98 0 0
0 0 0 10828668 17152 3039956 0 0 0 58 1433 2802 1 0 98 0 0
0 0 0 10828944 17160 3039956 0 0 0 6 1659 3176 3 1 96 0 0
0 0 0 10829152 17160 3039956 0 0 0 0 1417 2778 1 0 98 0 0
1 0 0 10829176 17160 3039956 0 0 0 0 1446 2810 1 1 98 0 0
1 0 0 10829084 17168 3039956 0 0 0 12 1574 2982 1 3 95 0 0
0 0 0 10828928 17168 3039956 0 0 0 0 1457 2859 1 0 98 0 0
0 0 0 10829012 17168 3039956 0 0 0 0 1415 2755 1 0 98 0 0
0 0 0 10828740 17176 3039952 0 0 0 6 1384 2743 2 0 98 0 0
1 0 0 10828724 17176 3039956 0 0 0 0 1454 2842 1 0 98 0 0
1 0 0 10828616 17176 3039960 0 0 0 174 1472 2936 1 0 98 0 0
1 0 0 10818828 17184 3039956 0 0 0 10 1621 2955 2 0 97 0 0
1 0 0 10811636 17324 3039928 0 0 160 30 2493 4586 4 1 94 1 0
0 0 0 10809884 17324 3040296 0 0 0 0 1400 2753 1 0 98 0 0
0 0 0 10810916 17324 3040296 0 0 0 4 1406 2750 2 0 98 0 0
1 0 0 10810664 17332 3040296 0 0 0 24 1510 2904 1 0 98 0 0
0 0 0 13680144 1840 196360 0 0 946 6 1825 3230 2 3 93 3 0
0 1 0 13679912 1992 196292 0 0 106 22 1448 2793 1 1 98 0 0
0 1 0 13679904 2108 196196 0 0 58 0 1381 2728 1 1 98 0 0
0 0 0 13679516 2368 196312 0 0 130 28 1406 2675 1 0 98 0 0
0 1 0 13680168 2376 196304 0 0 0 6 1441 2824 1 1 98 0 0
0 1 0 13634428 3080 241296 0 0 1278 4 1735 3290 1 1 95 3 0
0 1 0 13307392 3080 567280 0 0 5918 0 3345 6744 1 7 80 11 0
0 2 0 12319736 3084 1550136 0 0 16114 8 4718 9655 1 17 74 8 0
0 0 0 11621012 3224 2247928 0 0 11568 2 3736 7671 2 13 76 9 0
0 0 0 11619364 3224 2249256 0 0 0 0 1411 2771 1 1 98 0 0
1 0 0 11619240 3224 2249256 0 0 0 0 1380 2710 2 0 98 0 0
0 0 0 11612668 3236 2257220 0 0 968 4614 1746 3412 1 1 96 2 0
0 0 0 11612536 3240 2257204 0 0 4 0 1395 2753 1 0 99 0 0
0 0 0 11612692 3252 2257200 0 0 2 10 1665 3239 2 1 98 0 0
1 0 0 11612552 3252 2257372 0 0 80 1408 1810 3665 1 0 98 0 0
0 0 0 11612272 3252 2257372 0 0 0 8 1660 3201 1 0 98 0 0
0 1 0 11612008 3260 2257364 0 0 0 8 1630 3163 1 0 98 0 0
0 0 0 11611644 3260 2257372 0 0 10 0 1722 3237 3 1 96 0 0
0 0 0 11617736 3260 2257484 0 0 0 4 1396 2731 1 1 98 0 0
0 0 0 13687388 2000 193544 0 0 1606 10 2080 3535 2 2 91 4 0
0 0 0 13687412 2000 193824 0 0 2 0 1569 3068 1 1 98 0 0
0 0 0 13686672 2964 193840 0 0 540 0 1657 3046 1 0 98 1 0
0 0 0 13686552 2972 193932 0 0 0 18 1417 2787 1 0 98 0 0
0 0 0 13686428 2972 193940 0 0 0 18 1364 2655 1 0 99 0 0
1 0 0 13686808 2972 193940 0 0 0 0 1444 2854 1 0 98 0 0
2 0 0 13686544 2980 193936 0 0 0 10 1549 3021 1 0 98 0 0
0 0 0 13687156 2980 193940 0 0 0 0 1408 2768 1 0 98 0 0
0 0 0 13686924 2980 193940 0 0 0 0 1363 2705 1 0 99 0 0
1 1 0 13686940 2988 193940 0 0 8 10 1382 2708 1 0 98 0 0
0 0 0 13681608 2988 200004 0 0 600 4020 1943 3768 1 1 97 1 0
0 0 0 13681624 2988 200004 0 0 0 0 1687 3283 1 0 98 0 0
0 0 0 13681608 2996 199996 0 0 0 6 1662 3227 1 0 98 0 0
0 0 0 13681360 2996 200004 0 0 0 0 1407 2789 1 0 98 0 0
Si queréis hacer pruebas con algunos scripts para ver mas a fondo la administración de memoria en GNU-Linux lo podéis en este enlace.
https://www.linuxatemyram.com/play.html