Administración de memoria en GNU-Linux

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.

http://www.linuxatemyram.com/play.html