Axioma 3: No sirve de nada usar una agenda para acordarse de las cosas, si después no recuerdas que usas una agenda para recordar las cosas.
La memoria es uno de los elementos más importantes de un sistema, ya que afecta directamente al rendimiento del equipo. A modo de ejemplo, puedes pensar que una memoria RAM es 100 veces más rápida que un disco duro. Un vistazo a la wikipedia puede dotarte de contexto(1)
En rigor, un sistema operativo trata con
procesos(2). Un proceso no es más que una colección de instrucciones que forma parte de un programa y una información accesoria para que el sistema operativo de turno sepa qué hacer con él. Entre esa información, figura la localización en memoria de los datos con los que deba de trabajar. Otra información puede ser por ejemplo el usuario de dicho proceso, la lista de recursos que necesita, etc.
La
Memoria Virtual es un mecanismo que permite extender la memoria principal (RAM) de un computador. En el hilo
Micro Manual de Linux I: gestión de memoria en Linux se describen brevemente los principales aspectos del uso de memoria principal. A efectos de este documento, lo importante es el concepto de
swap como un espacio de disco utilizado para extender la memoria principal del sistema y que el computador debe disponer de una memoria total suficiente para ejecutar los procesos que necesite ejecutar, disponiendo de los datos que necesiten tales procesos en la propia memoria. El funcionamiento se puede describir así:
- el sistema operativo carga en memoria el proceso a ejecutar.
- cuando le corresponde ejecutarse, el proceso busca los datos en memoria.
- si encuentra los datos, se ejecuta el proceso.
- si no encuentra los datos en memoria, los busca en la memoria virtual.
- si hay espacio en memoria, se cargan los datos y se ejecuta el punto 3.
- si no hay espacio en memoria, el sistema operativo debe de descargar algún proceso para hacer sitio.
- si consigue espacio suficiente, ejecuta el punto 3.
- si no consigue hacer espacio, falla.
En este octavo punto, lo más habitual es que se pare el sistema. Así que tener RAM suficiente para ejecutar todos los procesos que deban ser ejecutados en cada momento dado es importante, como también lo es tener swap suficiente para poder
mover los procesos entre RAM y disco cuando sea necesario: el sistema busca en memoria o en swap; si no tiene espacio en ninguno de los dos para cargar un proceso o sus datos, fallará igualmente.
Esta cuestión es, como se ve, tan importante que han corrido ríos de tinta sobre ella. GNU/Linux, sin embargo, proporciona a los usuarios experimentados recursos que pueden facilitar en gran medida la gestión de su sistema. En particular, puedes crear swaps
en caliente y añadirlas al sistema cuando se requiera.
Esto no es mucho consuelo para un usuario sin experiencia en GNU/Linux, ya que sólo desplaza la cuestión. Uno podría, legítimamente, pensar "¿y cómo demonios sé yo cuándo necesito más swap?" Esto tiene una respuesta fácil que en principio puede no ser del agrado de tal usuario:
experiencia.
¿Cómo se consigue experiencia? En este caso, lo suyo es disponer de memoria swap suficiente y monitorizar su uso de vez en cuando. Cuando ya llevamos unos meses trabajando con el sistema y tenemos una idea bien clara del uso que le damos, podremos hacer una estimación de nuestras necesidades.
Por ejemplo, si renderizamos una escena 3D o resolvemos ecuaciones complejas, o compilamos aplicaciones un poco grandes, con toda probabilidad necesitaremos bastante swap en dichos momentos. Así que, mientras hacemos dichas tareas, podemos observar el consumo de recursos (memoria y swap) e ir estableciendo unos límites. Por supuesto, la swap no sustituye a la RAM: si el uso de la swap es muy continuado y elevado, lo que necesitamos es aumentar la RAM disponible.
Hay muchas
sugerencias para tratar de encontrar un buen tamaño para una swap al primer intento. Por ejemplo, la documentación de Red Hat de 2011 para rhel indicaba:
hasta 4 GB - al menos 2 GB
4 hasta 16 - al menos 4 GB
16 hasta 64 - al menos 8 GB
64 hasta 256 - al menos 16 GB
Pero no os dejéis llevar por los números, sean estas u otras recomendaciones. Yo en 2011 tenía un equipo con 1 GB RAM y una swap de 1,5... y la swap raramente llegaba al 15%... ¡lo que necesitaba realmente, para que fuera más rápido, era más RAM!!!!!
(3) Hoy los equipos más habituales a la venta tienen un mínimo de 8 GiB que para la mayoría de usuarios serán suficientes y no requieren usar swap.
No puedo menos que recalcar que el término
memoria virtual a veces es un pelín engañoso: la swap no actúa como una
extensión de la memoria principal, como se dice en muchos lugares; en su lugar, la swap es más bien una suerte de "memoria intermedia". El procesador
no puede, en ningún caso, acceder
directamente a la swap: lo que necesite utilizarse, ha de ser copiado necesariamente a la memoria principal. En la swap se guardan, eso sí, los procesos y datos ya de la misma forma que estarían almacenados en memoria. Esto significa que usar swap en GNU/Linux significa intercambiar
páginas entre la memoria principal y la memoria virtual, donde cada página contiene un proceso o una parte de él.
(1) https://es.wikipedia.org/wiki/Memori...m%C3%A1tica%29
(2) https://es.wikipedia.org/wiki/Proces...m%C3%A1tica%29
(3) A menos que necesites hibernar el sistema, que por definición se hará en la partición swap y habrá entonces de contener al menos todo el contenido de la memoria RAM.
Marcadores