¿Qué es la Swap?¿Cuánta Swap necesito?

Descripción

La mayoría de los sistemas operativos modernos poseen un mecanismo llamado memoria virtual, que permite hacer creer a los programas que tienen más memoria que la disponible realmente; por ejemplo, 4 Gb en un ordenador de 32 bits. Como en realidad no se tiene físicamente toda esa memoria, algunos procesos no podrán ser ubicados en la memoria RAM.

En este caso es cuando es útil el espacio de intercambio: el sistema operativo puede buscar un proceso poco activo, y moverlo al área de intercambio (el disco duro) y de esa forma liberar la memoria principal para cargar otros procesos. Mientras no haga falta, el proceso extraído de memoria puede quedarse en el disco, ya que ahí no gasta memoria física. Cuando sea necesario, el sistema vuelve a hacer un intercambio, pasándolo del disco a memoria RAM. Es un proceso lento (comparado con usar sólo la memoria RAM), pero permite dar la impresión de que hay más memoria disponible.

Implementación

En realidad, puede ser que no toda la imagen del proceso se lleve al disco. De esta forma, se mantienen algunas partes en memoria principal, mientras que otras permanecen en el almacenamiento secundario.

Si los algoritmos utilizados en el intercambio de páginas están mal diseñados o hay poca memoria disponible, se puede dar un problema conocido como hiperpaginación, o en inglés thrashing. Los síntomas son un atasco y sobrecarga en el sistema, y la causa es que los procesos continuamente están siendo pasados de memoria física a área de intercambio (porque hace falta memoria para correr otro proceso) y luego otra vez a memoria (porque han de ejecutarse).

Posibles ubicaciones

En los sistemas operativos se puede usar como área de intercambio un fichero o una partición (los dos son en realidad parte de un disco duro o almacenamiento secundario).

Fichero de intercambio

Un fichero en blanco puede prepararse para ser usado como área de intercambio. Esto tiene una gran ventaja:

Es fácil de crear, borrar, ampliar o reducir, según se crea necesario (a diferencia de una partición)

Pero también alguna desventaja:

* le afecta la fragmentación, ya que se encuentra dentro de un sistema de ficheros

El problema de la fragmentación no es grave, ya que el espacio de intercambio no siempre es accedido de forma secuencial, sino directa (en oposición a la secuencial).

Partición de intercambio

También se puede dedicar una partición entera del disco duro (o el disco completo) como área de intercambio. Ventajas:

Se puede conseguir mejor rendimiento si se coloca la partición en la zona más rápida del disco, que es al principio (los cilindros exteriores del disco, por donde pasan más datos a cada vuelta;

No hay problemas de fragmentación
No hay que usar ningún sistema de ficheros en concreto

Tiene pocas desventajas:

Crear una partición es un proceso algo difícil; de todas formas, si se elige bien el tamaño de la partición, no hará falta ningún cambio en el futuro
La partición siempre ocupará el mismo espacio, aunque no se esté usando al 100%

Otros dispositivos

Las tarjetas de vídeo incluyen una memoria, que en los modelos actuales puede ser de cientos de megabytes; además, es muy rápida, y no se está usando siempre.

Por eso no es extraño que ya se haya intentado usar esta memoria como dispositivo de intercambio (y como almacenamiento genérico). En Linux se puede hacer esto mediante MTD ("Memory Technology Device").

También se ha hecho con la memoria de una tarjeta de sonido, usando un controlador específico que la convierte en un dispositivo de bloque.

Uso en sistemas operativos

Cada sistema operativo gestiona la memoria virtual de forma distinta; por tanto el intercambio depende de la implementación de los algoritmos de intercambio.

En Linux

Linux se suele usar con una partición de intercambio, aunque también permite usar ficheros de intercambio.

Se pueden asignar varios dispositivos de intercambio, incluso de diferentes tipos, y asignar a cada uno una prioridad. Si la prioridad es la misma en varios, las páginas de memoria se distribuirán como en un RAID de nivel 0. Esto permite que los dispositivos de swap se usen en paralelo, cosa que puede aumentar la eficacia, sobre todo si están en discos independientes.

Programas

Para crear un área de intercambio, se usa el comando mkswap nombre, donde nombre puede ser un fichero o la ruta a un dispositivo de disco (por ejemplo /dev/hda1). Esto prepara el dispositivo y le pone la cabecera apropiada.

Si lo que se está usando es un fichero swap, el contenido puede ser cualquiera (se destruirá), y lo que importa es el tamaño. Pero además, mkswap tiene un requisito especial: el fichero no ha de tener agujeros. Quiere decir que los bytes del fichero han de estar realmente en el disco. Esto no pasa siempre: si se usa cp /dev/zero nuevo, el sistema de ficheros probablemente vea que se trata de un fichero disperso (tiene regiones muy grandes todas con nulos), y no lo grabará realmente en el disco. Al usar algo como dd if=/dev/zero of=nuevo bs=1024 count=65536 se le fuerza a que escriba todos los bloques, sin agujeros.

El dispositivo de intercambio se activa con el comando swapon nombre y se desactiva con swapoff nombre. En el fichero /proc/swaps se muestra una lista de los dispositivos de intercambio activos, y en /etc/fstab se suelen añadir las particiones swap que se activan al inicio del sistema.

Con el programa free se puede ver, además de cuánta RAM queda libre, el tamaño total de las áreas de intercambio, cuán de llenas están, y cuánta memoria (RAM) se está usando como caché.

¿Hace falta swap?

La memoria de intercambio sirve como RAM adicional. Entonces, en un ordenador que ya tenga mucha memoria RAM, ¿hace falta swap?

Aunque puede funcionar bien sin tener ningún área de intercambio, es muy recomendable crearla. La razón es que siempre es bueno quitar de la memoria los procesos poco usados, ya que eso permite usar la RAM para otras tareas, como por ejemplo la memoria caché de las operaciones de entrada/salida, como el acceso al disco.

Un ejemplo: supongamos que un usuario abre en un programa una imagen muy grande, que le consume el 80% de la memoria RAM, y después, sin cerrarla, se pone a hacer varias búsquedas de ficheros por su disco duro. Si no se puede llevar a disco ese proceso grande, quiere decir que ha de mantenerse en memoria física; por tanto, las búsquedas sólo tendrán menos del 20% de la memoria RAM para hacer de caché, y por eso serán poco eficientes. Con swap, se podría llevar a disco el proceso grande (o al menos una parte), hacer esas búsquedas usando toda la RAM como caché, y luego restaurar el proceso, si hace falta.

Hay algunos procesos que, debido a la función que realizan, están poco activos, y puede ser recomendable que estén en el área de intercambio para liberar un poco la memoria RAM. Por ejemplo, un servidor SSH (mecanismo de control remoto del ordenador) tiene que estar siempre activo para atender las posibles peticiones, pero sólo empezará a trabajar de verdad cuando un usuario se conecte.

Tamaño del espacio de intercambio

Ésta es una discusión típica entre los administradores de sistemas, y una duda común que sale durante la instalación de un sistema Linux (o cualquier UNIX).

Hay una regla muy conocida que dice que "la swap ha de ser el doble de la memoria RAM instalada", pero esto ya no es válido hoy en día. Esta regla funcionaba bien antes, cuando siempre se compraba menos RAM de la que realmente se necesitaba, porque era muy cara. Tener 3 veces más memoria que la física iba bien para la mayoría de usuarios. Pero en un ordenador nuevo que tenga 1 Gb de RAM, no será necesario gastar 2 Gb en una partición de swap, porque probablemente no se usará.

La regla habitual usada para decidir el tamaño del área de intercambio es "pensar en cuánto querrías tener y en cuánto tienes, y poner como swap la diferencia". Por ejemplo, si un usuario necesita abrir ficheros de hasta 700 Mb, pero sólo tiene 256 Mb de RAM, entonces lo que le falta (aprox. 500 Mb) se ha de poner como swap, como mínimo. Más swap puede ir bien, pero no será muy usada.

Si el ordenador ha de soportar mucha carga, la partición ha de ser mínimamente grande; se recomienda algo más de 128 Mb (en [5] hay más ejemplos sobre esto).

Seguridad

El espacio de intercambio sirve para guardar, aproximadamente, las mismas cosas que la memoria RAM. Esto incluye información privada, contraseñas, documentos abiertos (aunque no se hayan grabado), etc. Pero con una diferencia: la memoria RAM se pierde al apagar el ordenador; en cambio, la swap no (porque está dentro del disco duro).

Esto hace sea necesaria una política de borrado de swaps en algunos sistemas donde la privacidad sea importante. Borrar una partición de swap es muy fácil (sólo hay que escribirla con ceros mediante dd), pero hacerlo manualmente puede ser tedioso, sobre todo porque antes hay que desmontarla y luego volverla a montar.

Otra opción es escribir un código que se ejecute al apagar el ordenador para que haga esto cada vez, cosa que puede ser algo lenta. Existen programas que automatizan estas tareas en varios sistemas operativos.

De todas formas, borrar la swap al apagar no asegura los datos mientras el ordenador está encendido, ya que en el disco habrá información que supuestamente sólo debía estar en memoria RAM. Por eso, en algunos casos se usa un dispositivo de intercambio cifrado, que ofrece más protección, pero como contrapartida, es mucho más lento. Eso afecta al rendimiento general del sistema, y hace que esta solución sea prohibitiva en el caso general.

Naturalmente, también es necesario controlar los permisos de los dispositivos de intercambio, para evitar que usuarios no autorizados puedan leer un fichero de swap, y por tanto la memoria.

Tomado de la Wikipedia