Autor: Joel Barrios Dueñas
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.
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.
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 RAM | Doble de la cantidad total de memoria RAM. |
| Más de 1 GB RAM | Misma cantidad del total de memoria RAM, más 2 GB. |
Contar con mayor espacio para utilizar memoria virtual puede ser práctico en los siguientes casos:
Todos los procedimientos listados a continuación requieren hacerse como el usuario root o bien utilizando el mandato sudo.
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.
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.
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 |
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 |
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 |
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 |
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
()