Espacio de Intercambio (SWAP) en Linux
Cuando un computador necesita ejecutar un programa que ocupa más espacio que la memoria física disponible, los sistemas operativos modernos usan una técnica llamada intercambio (swapping), la cual almacena temporalmente fragmentos de memoria en el disco duro mientras otros datos son movidos al espacio de memoria física. Aquí vamos a mostrar algunas técnicas que pueden ayudarle a manejar de mejor manera la memoria de intercambio en sistemas Linux y así obtener un mejor rendimiento del subsistema de intercambio de Linux.
Linux divide la memoria RAM (random access memory | memoria de acceso aleatorio) en fragmentos de memoria llamadas páginas. El intercambio es el proceso donde una página de memoria es copiada a un espacio predefinido en el disco duro, llamado espacio de intercambio, para así liberar ese espacio de memoria. La combinación de los tamaños de la memoria física y del espacio de intercambio es la cantidad de memoria virtual disponible.
El intercambio es necesario por dos importantes razones. Primero, cuando el sistema requiere más memoria que la disponible físicamente, entonces el kernel intercambia las páginas menos usadas y obtiene memoria para la aplicación o proceso que la necesita inmediatamente. Segundo, un número significativo de páginas usadas por una aplicación durante su fase de arranque pudiera ser usadas sólo en su inicialización y no volver a ser utilizadas otra vez. El sistema puede intercambiar esas páginas y liberar memoria para otras aplicaciones o para el cache de disco.
Ahora bien, el intercambio tiene una desventaja. Comparado con la memoria física, el disco es mucha más lento. La velocidad de la memoria puede ser medida en nanosegundos, mientras que la del disco es medida en milisegundos, así el acceso al disco es 10 mil veces más lento que el acceso a la memoria física. Mientras más intercambio ocurra, más lenta será la respuesta del sistema. Algunas veces el excesivo intercambio ocurre porque una página es intercambiada y luego es requerida por la aplicación en un tiempo muy corto para luego ser intercambiada otra vez y así sucesivamente. En esta situación el sistema esta en dificultad para encontrar memoria libre y mantener las aplicaciones corriendo al mismo tiempo. En este caso sólo añadiendo más memoria RAM puede ayudarlo.
Linux tiene dos formas de espacio de intercambio : la partición de intercambio y el archivo de intercambio. La partición de intercambio es una sección independiente del disco duro usada solamente para el intercambio; ningún archivo puede ser colocado allí. El archivo de intercambio es un archivo especial que reside en el sistema con los otros archivos de datos.
Para ver cuanto espacio de intercambio se tiene, se utiliza el comando swapon -s. La salida del comando luce de la siguiente forma:
Filename Type Size Used Priority
/dev/sda5 partition 859436 0 -1
En cada línea se lista el espacio de intercambio que está siendo usado por el sistema. Aquí, el campo Type indica si el espacio de intercambio es una partición en lugar de un archivo, y en el campo Filename vemos que esta en el dispositivo sda5. El campo Size lista en kilobyte su tamaño y el campo Used nos indica cuanto espacio en kilobytes ha sido usado (en este caso ninguno). El campo Priority le indica a Linux cual espacio de intercambio debe usar primero. Algo interezante del subsitema de intercambio de Linux es que se puede usar dos (o más) espacios de intercambio (preferiblemente en dos dispositivos diferentes) con la misma prioridad, Linux compartirá la actividad de intercambio entre ellos, lo cual incrementará el rendimiento del proceso de intercambio.Partición de Intercambio
Para añadir una partición de intercambio al sistema se requiere una preparación previa. Primero hay que asegurarse que la partición está marcada como una partición de intercambio y segundo hay que agregarla al sistema de archivos (filesystem). Para chequear que la partición está marcada como de intercambio, debemos correr como el usuario root lo siguiente :
fdisk -l /dev/hdb
Reemplazando /dev/hdb por el dispositivo o disco duro del sistema en donde está la partición de intercambio. Deberiamos ver una salida similar a la siguente :
Device Boot Start End Blocks Id System
/dev/hdb1 2328 2434 859446 82 Linux swap / Solaris
Si la partición no está marcada como de intercambio es necesario alterarla ejecutando fdisk y usar la opcion t del menu de opciones. Hay que ser cuidadosos al trabajar con las particiones ya que no queremos borrar particiones importantes por error o cambiar el id de una partición del sistema operativo. Todos los datos en la partición de intercambio serán borrados, así que hay que chequear varias veces cada cambio realizado. Hay que indicar que Solaris usa para sus particiones el mismo id que usa Linux para las particiones de intercambio, así que hay que tener cuidado de no eliminar las particiones de Solaris por error.
Luego de marcar la partición como de intercambio, hay que prepararla usando el siguiente comando como root :
mkswap /dev/hdb1
Si no aparecen errores, entonces el espacio de intercambio esta listo para ser usado. Para activarlo ejecute :
swapon /dev/hdb1
Se puede verificar que el espacio esta siendo utilizado ejecutando swapon -s. Para montar el espacio de intercambio automáticamente al inicar el sistema operativo, se debe añadir un línea en el archivo /etc/fstab, el cual contiene la lista de los sistemas de archivos y espacio de intercambio que necesitan ser montados al iniciarse el sistema. El formato de cada línes es el siguiente :
<file system> <mount point> <type> <options> <dump> <pass>
El espacio de intercambio es un tipo de sistema de archivo especial, muchos de esos parámetros no le son aplicables. Para añadir el espacio de intercambio agregue la siguiente línea:
/dev/hdb1 none swap sw 0 0
Donde /dev/hdb1 es la partición de intercambio. Éste no tiene un punto de montura específico. Su tipo es swap con opción sw y los dos último parámetros no son usados por eso se han colocado 0 (ceros) en su lugar.
Para verificar que el espacio de intecambio es montado automáticamente al arrancar el sistema sin tener que reiniciarlo, ejecutamos el comando swapoff -a (el cual deshabilita los espacios de intercambio) y luego ejecutar swapon -a (para montar todos los espacio de intercambio listado en el archivo /etc/fstab) y luego chequear con el comando swapon -s.
Archivo de Intercambio
Adicional a una partición de intercambio, Linux permite crear un espacio de intercambio alojado en un archivo, de forma similar a una partición de intercambio. La ventaja de usar un archivo de intercambio es que no se necesita contar con una partición vacia o no se tiene que reparticionar el disco para añadir un espacio de intercambio adicional.
Para crear un archivo de intercambio se usa el comando dd para crear un archivo vacío. Para crear un archivo de 1GB escribimos :
dd if=/dev/zero of=/swapfile bs=1024 count=1048576
donde /swapfile es el nombre del archivo de intercambio y count es el tamaño en KB (i.e. 1GB).
Para preparar el archivo de intercambio usamos el comando mkswap, de la siguiente forma :
mkswap /swapfile
De igual forma, para montar el espacio de inercambio utilizamos el comando swapon:
swapon /swapfile
La entrada en el archivo /etc/fstab sería similar a la siguiente:
/swapfile none swap sw 0 0
¿De que tamaño debería ser el espacio de intercambio?
Es posible ejecutar un sistema Linux sin espacio de intercambio, y el sistema corre bien si tiene una gran cantidad de memoria física, pero al momento de ejecutarse algo fuera de la memoria física habría un caída del mismo, así que es recomendable tener un espacio de intercambio.
¿Pero de que tamaño debe ser el espacio de intercambio? Antiguas versiones de sistemas operativos de estilo Unix (como Sun OS y Ultrix) demandaban un espacio de intercambio de dos a tres veces el tamaño de la memoria física. Modernas implementaciones (como Linux) no requieren de tanto espacio, pero ellos lo pueden usar si así usted lo configura. Una regla básica es la siguiente:
- Para un sistema de escritorio usar un espacio de intercambio del doble de la memoria del sistema, lo que le permitirá ejecutar un gran número de aplicaciones (muchas de las cuales estarían en reposo y serían fácilmente intercambiables), entregando más memoria física a las aplicaciones activas.
- Para un servidor, tenga un espacio de intercambio pequeño (la mitad de la memoria física) así tendrá mas flexibilidad de intercambiar cuando sea requerido, pero debe monitorear la cantidad de espacio de intercambio usado y aumentar la memoria física si es necesario.
- Para equipos antiguos (con 128MB de memoria física), use un espacio de intercambio con el mayor tamaño posible, hasta 1GB.
En la version 2.6 del kernel de Linux se agregó un parámetro denominado swappiness para administrar la forma en que el sistema operativo realiza el proceso de intercambio. Éste es un número entre 0 y 100. En escencia, valores altos permiten que más páginas sean intercambiadas y, valores más pequeños hacen que las aplicaciones sean mantenidas en memoria, así ellas estén en reposo. El mantenedor del kernel Andrew Morton dice que el corre sus equipos de escritorio con un swappiness de 100, argumentando que "Mi punto es que decrementar la tendencia del kernel a realizar intercambios es errado. Usted realmente no quiere tener cientos de megabytes de memoria reservadas a aplicaciones en reposo. Coloquelas en el espacio de intercambio y use la memoria física para algo útil".
Una desventaja de la idea de Morton es que si la memoria es intercambiada muy rápido entonces el tiempo de respuesta de la aplicación decae, porque cuando la ventana de la aplicación es seleccionada, entonces el sistema tiene que restaurarla en la memoria física, lo cual hace al sistema lento.
El valor predeterminado para swappiness es 60. Usted puede alterarlo temporalmente de la siguiente forma (requiere ser root):
echo 50 > /proc/sys/vm/swappiness
Si quiere alterarlo permanentemente es necesario cambiar el parámetro vm.swappiness en el archivo /etc/sysctl.conf.
Conclusión
Administrar el espacio de intercambio es un aspecto escencial de la administración de sistemas. Con una buena planificación y un apropiado uso del espacio de intercambio se pueden obtener muchos beneficios. No tenga miedo de experimentar, y siempre supervise su sistema para asegurarse de que está obteniendo los resultados que usted desea.
Texto Original :All about Linux swap space
December 03, 2007
By: Gary Sims