enchufado
   RSS
#
Tunear el subsistema de memoria virtual del kernel Linux (GNU/Linux) 2009-12-16 16:37:08

En este enlace tenemos la interesante documentación del subsistema de memoria virtual del kernel Linux que no he encontrado (miré por Documentation/vm y Documentation/filesystems).

Un par de ejemplos:

  • Un echo 1 > /proc/sys/vm/block_dump activaría el volcado de los procesos que estan escribiendo a disco en el dmesg. Con esto podemos identificar qué procesos consumen más, cuál se quedó pajarito leyendo/escribiendo a disco, hacer un poco de profiling con visos a deshacernos de aplicaciones tragonas para ahorrar recursos o prevenir la descarga temprana de la batería de un portátil.
  • Haciendo un echo (del valor 1, 2 y 3) a /proc/sys/vm/drop_caches, hace que el kernel libere caché limpia (la caché sucia, la podemos liberar con un sync ;). El 1 respode a la pagecache, el 2 a dentries e inodos, y 3 a ambas opciones. Debe usarse cuando es necesario en situaciones atípicas (cuando la actuación del kernel al respecto no es la deseada), dado que en el resto de ocasiones, el kernel toma la decisión adecuada acerca de cómo manejar las cachés. Sobre el tema de las cachés, recomiendo leer este artículo de BULMA para enterarse un poco del tema.
  • Modificando el valor (en bytes) de /proc/sys/vm/min_free_kbytes, lo que hacemos es redefinir el espacio de memoria libre de que dispone el kernel cuando kswapd tiene que ponerse a trabajar (para obtener memoria libre para, p.ej., una aplicación). Podemos ver una ligera explicación y recomendaciones aquí.
  • El valor /proc/sys/vm/overcommit_memory es un flag que habilita/deshabilita que se pueda usar más memoria que la física disponible. El valor 0 (por defecto) realiza una estimación de memoria que rechaza peticiones de memoria claramente sobredimensionadas, a pesar de que permite el uso de toda la memoria física a bien de evitar swapear. El valor 1 supone que siempre se permite sobrepasar esa limitación, y el 2 no lo permite. En este último modo, se usa el porcentage especificado en overcomit_ratio + la swap para asignar memoria, y es recomendable para cuando no nos podemos fiar de las estimaciones del modo por defecto, ciñiéndonos a la que disponemos.
  • Podemos querer cambiar el valor de /proc/sys/vm/page-cluster ampliándolo, si tenemos un sistema que tira mucho de swap. Este valor define la cantidad de páginas escritas en swap de una vez.
  • Y por último y no por ello peor, el conocido /proc/sys/vm/swapiness determina cuándo una máquina tiene que swapear. El porcentaje por defecto es 60, y el swapeo es mayor cuándo mayor es el porcentaje, y viceversa.

Comentar que existe un modo más elegante de cambiar estos valores (y esto es extensible para todo /proc/sys/) que no es a base de echo's (y ya de paso, para que así también tengamos los valores consistentemente definidos tras un reinicio): el mastodóntico sysctl. Mastodóntico en el sentido de que, para quien no lo conozca, permite cambiar muchos parámetros de diversas partes del sistema (filesystem, kernel, subsistema de memoria...) en caliente. Y aquí lo dejamos, porque quién quiera hacer deberes, sabe que puede hacerlos (buscando acerca de sysctl bien por Internet, bien en los fuentes del kernel -que tocan brevemente lo que hemos tratado en Documentation/sysctl/vm.txt-), o puede esperar a que caiga algún post por estos lares :)


Comentarios (6)


Volver al indice

login, admin, form, register