Keep Walking

Linux Swapping for dummies

Posted in Linux, Sistemas, software by Martín on diciembre 7, 2007

Cuando tu computadora necesita correr programas que son más grandes que tu memoria física disponible, los sistemas operativos modernos usan una técnica llamada swapping, en la cual fragmentos de memoria son temporalmente almacenados en el disco rígido mientras otros datos son movidos al espacio de memoria física. Aquí tenemos algunas técnicas que te pueden ayudar a administrar mejor el swapping en linux y obtener el mejor rendimiento del subsistema de swapping.

Linux divide la RAM (memoria de acceso aleatorio) en fragmentos de memoria llamados páginas. Swapping es el proceso mediante el cual una página de memoria es copiada a un espacio preconfigurado en el disco, llamado swap space, para liberar justamente una página de memoria. Los tamaños combinados de la memoria física y el swap space determinan la cantidad de memoria virtual disponible.

El swapping es necesario por dos importantes razones. La primera, cuando el sistema requiere más memoria de la que está físicamente disponible, el kernel quita por medio del swapping las páginas menos utilizadas y otorga memoria a las aplicaciones (los porcesos) que actualmente la necesitan de forma inmediata. La segunda, un número significativo de páginas utilizado por las aplicaciones durante su fase de inicio es utilizado pura y exclusivamente para su inicialización y luego no se utiliza más. El sistema puede entonces mover estas páginas y liberar memoria para otras aplicaciones o incluso para el caché de disco.

Aún así, el swapping tiene su lado negativo. Comparados con la memoria RAM, los discos son muy lentos. La velocidad de la memoria puede medirse en nanosegundos, mientras que la de los discos se mide en milisegundos, de modo que acceder al disco puede ser decenas de miles de veces más lento que acceder a la memoria física. Cuanto más swapping se produzca, más lento funcionará tu sistema. A veces ocurre un swapping excesivo (también llamado trashing) cuando una página es movida al disco e inmediatamente movida hacia la memoria nuevamente para luego ser swapeada a disco y así sucesivamente. En situaciones como esta el sistema está luchando por encontrar memoria libre y mantener las aplicaciones corriendo al mismo tiempo. En ese caso, agregar memoria RAM es lo único que podrá ayudarte.

Linux tiene dos formas de swap space: la partición de swap y el archivo de swap. La partición de swap es una sección independiente del disco rígido usada en forma aislada y exclusiva para realizar swapping; ningún otro archivo puede residir en esta partición. El archivo de swap es un archivo especial en el filesystem que reside entre los archivos de datos y del sistema.

Para ver qué tipo de swap space tenés, usá el comando swapon -s. La salida debería verse más o menos así:

Cada línea lista un swap space diferente de los que está utilizando el sistema. Aquí, el campo tipo (type) indica que el swap space es una partición y no un archivo, y en el campo nombre de archivo (filename) vemos que se encuentra en el disco sda2. El tamaño (size) es listado en kilobytes, y el campo utilizado (used) nos dice cuántos kilobytes del swap space están siendo ocupados (en este caso, cero). La prioridad le dice a linux qué swap space utilizar primero. Un aspecto interesante del subsistema de paginado de linux es que si montás dos (o más) swap spaces (preferiblemente en dos dispositivos diferentes), con la misma prioridad, linux alternará el swapping entre ambos, lo que puede incrementar considerablemente su desempeño.

Para agregar una partición de swap extra a tu sistema, primero deberás prepararla. El primer paso es asegurarse que la partición está marcada para swap, y el segundo es crear el swap filesystem. Para corroborar que la partición está marcada como swap space, corré como root el siguiente comando:

fdisk -l /dev/sda

Reemplazá /dev/sda con el dispositivo que corresponda al disco en el que se encuentra la partición de swap. Deberías ver algo como ésto:
Photo Sharing and Video Hosting at Photobucket
Si la partición no está marcada como swap, deberás alterarla corriendo el comando fdisk con la opción -t. Hay que tener cuidado cuando se trabaja con particiones, no querrás borrar particiones importantes o cambiar la id del filesystem de tu sistema a swap por error. Todos los datos en la partición de swap se perderán, así que chequea dos veces cada cambio que hagas. Fijate, también, que Solaris usa el mismo id que el swap space de Linux para sus particiones, así que tené cuidado de no asesinar tus particiones Solaris por error.

Una vez que una partición está marcada como swap, necesitás prepararla usando el comando mkswap (make swap) como root:

mkswap /dev/sda2

Si no saltan errores, tu swap space está listo para usarse. Para activarlo inmediatamente, tipeá:

swapon /dev/sda2

Podés verificar si está siendo utilizado con swapon -s. Para montar automáticamente el swap space al momento de bootear, debes agregar una entrada en el archivo /etc/fstab, que contiene una lista de los filesystems y los swap space que deben montarse durante el booteo. El formato de cada línea es:

<file system> <mount point> <type> <options> <dump> <pass>

Como el espacio de paginado es un tipo especial de sistema de archivos, muchos de estos parámetros no son aplicables. Para el swap space sólo agrega:

/dev/sda2 none swap sw 0 0

Donde /dev/sda2 es la partición de swap. No tiene un punto específico de montaje, de modo que se pone none. Es del tipo swap, la única opción es sw, y los últimos dos parámetros no son utilizados así que ingresamos 0 (cero) para cada uno.

Para chequear que tu swap space está siendo automáticamente montado, sin reiniciar, podés correr el comando swapoff -a (que deshabilita todos los swap spaces) y luego swapon -a (que onta todos los swap spaces listados en el archivo /etc/fstab) y luego verifica que están con swapon -s.

Archivo de Swap

Linux también soporta archivos de swap que podés crear, preparar y montar de manera similar a las particiones de swap. La ventaja de un archivo de swap es que no necesitás ubicar una partición vacía o reparticionar el disco para añadir un swap space.

Para crear un archivo de swap, usá el comando dd y creá un archivo vacío. Por ejemplo, para crear un archivo de 1 GB tipeá:

dd if=/dev/zero of=/swapfile bs=1024 count=1048576

/swapfile es el nombre del archivo de swap, y count es el tamaño en kilobytes.

Prepará el archivo de swap usando mkswap exactamente como lo harías con una partición, pero esta vez usá el nombre del archivo de swap:

mkswap /swapfile

Y de forma similar, montá el archivo utilizando el comando swapon: swapon /swapfile.

En el archivo /etc/fstab deberías agregar una línea más o menos así:

/swapfile none swap sw 0 0

¿Cuán grande debería ser el espacio de paginado?

Es posible correr Linux sin un swap space, y el sistema funcionará bien si se cuenta con una gran cantidad de memoria; pero en cuanto el sistema se quede sin memoria física colapsará, como si no tuviera nada más que hacer, así que es aconsejable disponer de un swap space, especialmente ahora que el espacio en disco es relativamente barato.

La pregunta clave es ¿Cuánto? Versiones viejas de sistemas operativos Unix-like (como SUN OS y Ultrix) demandaban un swap space de dos o tres veces el tamaño de la memoria física disponible. Implementaciones más modernas (como Linux) no requieren tanto, pero pueden usarlo si los configuras para ello. Una regla a tener en cuenta, podría ser así: 1) Para un sistema de escritorio, usá un swap space del doble del tamaño de la memoria, esto te va a permitir correr un número más grande de aplicaciones (muchas de las cuales estarán inactivas y serán fácilmente swapeadas dejando más RAM disponible para las aplicaciones activas); 2) para un servidor, usá un swap space más pequeño (digamos de la mitad del tamaño de la memoria física) así disponés de cierta flexibilidad para swapear cuando sea necesario, pero monitoreá la cantidad de swap space utilizado y aumentá la cantidad de RAM si es necesario; 3) para máquinas de escritorio viejas (con, digamos, unos 128 MB de memoria) usá tanto swap space como sea posible, incluso de 1GB o más.

El kernel 2.6 de Linux dispone de un nuevo parámetro llamado swappiness para permitir a los administradores modificar la manera en la que Linux swapea. Es un número que va de cero a cien. En esencia, los valores más altos llevan a que un número más grande de páginas sean swapeadas, y los valores más bajos hacen que más aplicaciones sean mantenidas en memoria, incluso si están inactivas. Uno de los hombres encargados de mantener el Kernel, Andrew Morton, ha dicho que corre sus máquinas de escritorio con un swappiness de 100, sentenciando que “Mi punto es que disminuyendo la tendencia del kernel a swapear es erróneo. Realmente no quieres cientos de megabytes de memoria sin tocar de aplicaciones que no se utilizan flotando en la máquina. Muévelas al disco, usa la memoria para algo útil”.

El lado negativo de la idea de Morton es que si la memoria es swapeada muy rápido el tiempo de respuesta de las aplicaiones decae (aumenta), porque cuando se clickea sobre la ventana de la aplicación el sistema tiene que swapear para traer la aplicación de vuelta a la memoria, lo que hará que se sienta bastante lento.

El valor por defecto de swappiness es de 60. Puedes alterarlo temporalmente (hasta el próximo booteo) tipeando como root:

echo 50 > /proc/sys/vm/swappiness

Si lo que quieres es alterarlo de forma permanente necesitarás cambiar el parámetro vm.swappiness en el archivo /etc/sysctl.conf.

Conclusión

Administrar el swap space es un aspecto esencial de la administración de sistemas. Con una buena planificación y el uso apropiado del swapping se pueden obtener grandes beneficios. No tengas miedo de experimentar, y siempre monitorea tu sistema para asegurarte que estás obteniendo los resultados que necesitás.

Escrito por Gary Sims. 3 de diciembre de 2007.
Publicado en Linux.com.
Traducción libre hecha por hielasangre (quien les escribe) .

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: