Gestión de espacio de memoria de intercambio (swap) en GNU/Linux.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2011 Joel Barrios Dueñas. Usted es libre de copiar, distribuir, y comunicar públicamente la obra, y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer, y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera, o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar, o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento, y los derivados de éste se proporcionan tal cual son, y los autores no asumirán responsabilidad alguna si el usuario, o lector, hace mal uso de éstos.

Introducción.

Algo de historia.

Hace muchos años, GNU/Linux, en los tiempos del núcleo versión 2.0, se encontraba limitado a utilizar una sola partición de memoria de intercambio de un máximo de 128 MB, siendo esto una de los principales argumentos utilizados por sus detractores. Por fortuna las cosas han cambiado, y hoy en día ya no existe dicho límite, y es posible además utilizar cuanta memoria de intercambio sea requerida para satisfacer las necesidades de cualquier sistema.

¿Qué es y como funciona el espacio de intercambio?

El espacio de memoria de intercambio o Swap, es lo que se conoce como memoria virtual. La diferencia entre la memoria real y la virtual es que está última utiliza espacio en el disco duro en lugar de un módulo de memoria. Cuando la memoria real se agota, el sistema copia parte del contenido de esta directamente en este espacio de memoria de intercambio a fin de poder realizar otras tareas.

Utilizar memoria virtual tiene como ventaja el proporcionar la memoria adicional necesaria cuando la memoria real se ha agotado y se tiene que realizar un proceso. El inconveniente radica en que, como consecuencia de utilizar espacio en el disco duro, la utilización de esta es mucho muy lenta. Uno puede percatarse de esto cuando el disco duro empieza a trabajar repentinamente hasta por varios minutos después de abrir varias aplicaciones.

¿Cuanto espacio para memoria de intercambio se debe asignar al sistema?

Menos de 1 GB RAMDoble de la cantidad total de memoria RAM.
Más de 1 GB RAMMisma cantidad del total de memoria RAM, más 2 GB.

Circunstancias en lasque se requiere aumentar la cantidad de memoria de intercambio.

Contar con mayor espacio para utilizar memoria virtual puede ser práctico en los siguientes casos:

Procedimientos.

Todos los procedimientos listados a continuación requieren hacerse como el usuario root o bien utilizando el mandato sudo.

Cambiar el tamaño de la partición.

Cambiar el tamaño de las particiones el disco duro y cambiar las dimensiones una partición de memoria de intercambio adicional es el método más efectivo.Sin embargo,ésto representa un riesgo, debido que podría ocurrir un error durante el procesos de repartición que podría desencadenar en pérdida de datos en un disco duro. Si se utiliza este método, es importante disponer de un respaldo de todos los datos importantes antes de comenzar el proceso.

Crear un archivo para memoria de intercambio.

Otro método más sencillo y sin riesgo alguno, consiste en utilizar un archivo de intercambio de forma similar a como se hace en otros sistemas operativos.

Ante todo, la mejor solución siempre será adquirir más RAM.

Procedimientos.

Activar una partición de intercambio adicional.

Si se cambio la tabla de particiones del disco duro y se ha creado una nueva partición de memoria de intercambio, se le da formato de la siguiente forma con el mandato mkswap, donde la opción -c indica se verifiquen sectores del disco duro buscando bloques dañados a fin de marcar estos, y evitar utilizarlos:

mkswap -c [dispositivo]

En el siguiente ejemplo se dará formato como partición de memoria de intercambio a la partición /dev/sda8, de aproximadamente 1 GB, verificando sectores en busca de bloques dañados:

mkswap -c /dev/sda8

Lo anterior puede devolver una salida similar a la siguiente:

Setting up swapspace version 1, size=1048576 bytes
no label, UUID=d2fea5ab-c677-8047-789a-e54ae19c506b

Para activar la partición y que sea utilizada inmediatamente por el sistema operativo, se ejecuta el mandato swapon de la siguiente forma:

swapon [dispositivo]

En el siguiente ejemplo se activa como partición de memoria de intercambio a la partición /dev/sda8:

swapon /dev/sda8

Para corroborar que la nueva partición de memoria de intercambio está siendo utilizada por el sistema operativo, se ejecuta el el mandato free, que puede devolver una salida similar a la siguiente:

             total       used       free     shared    buffers     cached
Mem:        321364     312576       8788          0        940      63428
-/+ buffers/cache:     248208      73156
Swap:      1426416           0   1426416

Para que esta partición se utilice como memoria de intercambio automáticamente en el siguiente arranque del sistema, se edita el archivo /etc/fstab:

vim /etc/fstab

La línea que se deba agregar, lleva el siguiente formato:

[partición]		swap	swap	defaults	0 0

De tal modo, en el siguiente ejemplo se definirá como partición de memoria de intercambio a la partición /dev/sda8:

/dev/sda8		swap	swap	defaults	0 0

Utilizar un archivo como memoria de intercambio.

Este método no requiere hacer cambios en la tabla de particiones del disco duro. Es idóneo para usuarios poco experimentados, para quienes desean evitar tomar riesgos al cambiar la tabla de particiones el disco duro, o bien para quienes requieren más de memoria de intercambio ocasional, o de manera circunstancial.

Considerando que el archivo de memoria de intercambio puede ser colocado en cualquier directorio del disco duro, se ejecuta el mandato dd, especificando que se escribirán ceros (if=/dev/zero) para crear el archivo /swap (of=/swap), en bloques de 1024 bytes (bs=1024) hasta completar una cantidad en bytes determinada (count=[cantidad multiplicada por el valor de bs]). En el siguiente ejemplo se realiza lo anterior hasta completar 524288000 bytes (1024 por ), que equivalen a 512 MB:

dd if=/dev/zero of=/swap bs=1024 count=512000

Para dar formato de memoria de intercambio al archivo creado, se ejecuta el mandato mkswap, del siguiente modo:

mkswap /swap

Lo anterior puede devolver una salida similar a la siguiente:

Setting up swapspace version 1, size = 511996 KiB
no label, UUID=fed2aba5-77c6-4780-9a78-4ae5e19c506b

Para activar la partición, y que sea utilizada inmediatamente por el sistema operativo, se ejecuta el mandato swapon. En el siguiente ejemplo se activa como partición de memoria de intercambio a el archivo /swap:

swapon /swap

Para corroborar que nuevo archivo de memoria de intercambio está siendo utilizada por el sistema operativo, se ejecuta el el mandato free, que puede devolver una salida similar a la siguiente:

             total       used       free     shared    buffers     cached
Mem:        321364     312576       8788          0        940      63428
-/+ buffers/cache:     248208      73156
Swap:      3145724          0    3145724

Para que este archivo se utilice como memoria de intercambio automáticamente en el siguiente arranque del sistema, se edita el /etc/fstab:

Y se agrega la línea correspondiente, del siguiente modo, donde en lugar de el dispositivo, se pone la ruta del archivo de memoria de intercambio creado:

vim /etc/fstab
/swap		swap	swap	defaults	0 0

Optimizando el sistema, cambiando el valor de /proc/sys/vm/swappiness

El núcleo de GNU/Linux permite cambiar con que frecuencia las aplicaciones y programas son movidas de la memoria física hacia la memoria de intercambio. El valor predeterminado es 60, como puede observarse al mirar el contenido de /proc/sys/vm/swappiness de la siguiente forma:

cat /proc/sys/vm/swappiness

Pueden establecerse valores entre 0 y 100, donde el valor más bajo establece que se utilice menos la memoria de intercambio, lo cual significa que se reclamará en su lugar el caché de la memoria. El valor predeterminado de 60, fue establecido teniendo en mente a quienes desarrollan el núcleo de Linux, con la finalidad de permitir realizar pruebas y diagnósticos.

Para la mayoría de los casos, conviene cambiar este valor por uno más bajo a fin de que el sistema utilice menos la memoria de intercambio, y utilice más la memoria cache. Ésta es una clase de memoria RAM estática de acceso aleatorio (SRAM o Static Random Access Memory). Se sitúa entre la Unidad Central de Procesamiento (CPU) y la memoria RAM y se presenta de forma temporal y automática para el usuario proporcionado acceso rápido a los datos de uso más frecuente.

Un valor apropiado y que funcionará para la mayoría de los sistemas en producción es 10. En el siguiente ejemplo se aplica el valor 10 para el archivo /proc/sys/vm/swappiness.

echo 10 > /proc/sys/vm/swappiness

Para lo anterior, también se puede ejecutar el mandato sysctl de la siguiente forma:

sysctl -w vm.swappiness=10

Lo anterior devuelve una salida similar a la siguiente, confirmando que se ha aplicado el cambio:

vm.swappiness = 10

Este cambio en las variables del sistema de forma aplica inmediata hasta el siguiente reinicio del sistema. Para hacer que el cambio sea permanente, se edita el archivo /etc/sysctl.conf.

vim /etc/sysctl.conf

Y se añade la siguiente línea:

vm.swappiness = 10


Alcance Libre
http://www.alcancelibre.org/staticpages/index.php/como-swap-linux

()