Gentoo Logo

Renuncia de responsabilidad: La versión original de este artículo fue publicada por IBM developerWorks y es propiedad de Westtech Information Services. Este documento es una versión actualizada del artículo original y contiene mejoras introducidas por el Equipo de Documentación de Gentoo.
Este documento carece de soporte activo.


Maximizar el intercambio

1.  Conseguir mejorar el intercambio

Cuando se configura un nuevo servidor Linux, ¿creamos una sola partición de 128MB de intercambio? De hacerse así, hemos de saber que se está limitando seriamente el rendimiento del espacio de intercambio (swap). ¿Se quiere incrementar el rendimiento del intercambio en varios órdenes de magnitud y crear particiones de intercambio de más de 1 GB? Es posible, no requiere parches en el kernel ni un equipo especial, únicamente, saber cómo hacerlo.

A muchos no debería preocuparles el intercambio. Después de todo, los sistemas Linux son muy eficientes en el manejo de la memoria, y el intercambio rara vez se toca mínimamente. Mientras que esto es completamente cierto en estaciones de trabajo o escritorios, los servidores son otra historia. Los servidores pueden a llegar a situaciones muy complejas inesperadamente, como procesos fuera de control, ataques de denegación de servicio e incluso pueden sufrir el efecto barrapunto, por tanto necesitan tener un adecuado intercambio de alta velocidad para que no dejen de funcionar o se cuelguen cuando se ocupe toda la memoria.

¿Aún no se está convencido de que es un asunto muy importante? Mostraré lo sencillo que es hacer que se cuelgue un servidor lanzando una cantidad masiva de nuevos procesos.

Aviso: Por favor, si se intenta hacer ésto, ¡ha de hacerse en un servidor que no esté en producción!

Digamos que se tienen dos comandos grep personalizados en /usr/bin , llamados pedrogrep y juangrep. Ahora, vamos a asumir que pedrogrep es sencillamente un archivo de comandos (guión del intérprete de comandos o shell script) que llama al ejecutable ELF juangrep, como sigue:

Listado de Código 1.1: El archivo de comandos pedrogrep

#!/bin/bash
juangrep -r $*

Todo parece correcto hasta aquí, ¿pero qué ocurre si de repente juangrep es reemplazado con un enlace simbólico a pedrogrep? Bien, en este caso, ejecutar pedrogrep o juangrep causará un bucle infinito, originando el lanzamiento de cientos de procesos bash en pocos segundos. Ésto me ha ocurrido una vez, y deben creerme, ¡dueleee!

Si un servidor no tiene un intercambio adecuado, una situación como esta puede causar que el servidor se bloquee en mucho menos de un minuto. ¿Cómo solucionamos el problema? Una forma es incrementar el tamaño del espacio de intercambio más allá de 128 MB. Afortunadamente para nosotros, ya no existe el límite de 128 MB de swap bajo los núcleos 2.2.x+ o posteriores, como existió en el pasado. ¡Los límites actuales son de aproximadamente 2 GB en sistemas x86, PowerPC y MC680x0, 512 MB en sistemas MIPS, 128 GB en Alpha, y de nada menos que 3 terabytes en plataformas UltraSparc!

Listado de Código 1.2: Tamaño límite de la partición swap en núcleos Linux modernos

x86                 2 Gigabytes
PowerPC             2 Gigabytes
Motorola 680x0      2 Gigabytes
Sparc               1 Gigabyte
MIPS                512 Megabytes
Alpha               128 Gigabytes
UltraSparc          3 Terabytes

Mientras que es bueno poder incrementar el tamaño de la partición de intercambio más allá de 128 MB, ¿qué hay acerca de incrementar el rendimiento? Idealmente, sería fenomenal si podemos configurar las particiones swap en bandas RAID 0 (stripe), para que las escrituras y lecturas se distribuyan entre todas las particiones. Si estas particiones se encuentran en unidades separadas y/o controladoras, multiplicará el rendimiento del espacio de intercambio, permitiendo a los servidores manejar la utilización de memoria temporal usando "pequeños impulsos" sin reducir demasiado su rendimiento.

Afortunadamente, todos los núcleos modernos Linux, por defecto (sin opciones especiales en el núcleo ni parches) permiten hacer el espacio de intercambio paralelo, como si fuera una banda RAID 0. Usando la opción pri en /etc/fstab para configurar varias particiones swap con la misma prioridad, le decimos a Linux que las use en paralelo:

Listado de Código 1.3: Configurar múltiples particiones swap con la misma prioridad

/dev/sda2       none    swap    sw,pri=3        0       0
/dev/sdb2       none    swap    sw,pri=3        0       0
/dev/sdc2       none    swap    sw,pri=3        0       0
/dev/sdd2       none    swap    sw,pri=1        0       0

En el ejemplo anterior, Linux usará las particiones swap sda2, sdb2 y sdc2 en paralelo. Dado que dichas particiones se encuentran en diferentes unidades y, posiblemente, en diferentes controladoras SCSI, la velocidad de lectura y escritura alcanzará fácilmente el triple. La cuarta partición swap, sdd2, se usará únicamente cuando las tres primeras se hayan ocupado casi por completo.

La opción pri es realmente fácil de usar. La prioridad debe ser un número entre 0 y 32767, siendo 32767 la mayor prioridad. Las particiones de intercambio se usarán desde la mayor prioridad a la menor, significando que una partición con una prioridad x sólo será usada si todas las particiones con una prioridad mayor que x ya están llenas. Si varias particiones tienen la misma prioridad, Linux hará paralelo el acceso a ellas automáticamente. Esto nos permite no sólo paralelizar el intercambio, sino también asignar una mayor prioridad de acceso a las particiones en las unidades más rápidas (o en las partes del disco duro más rápidas) para que sean usadas primero. Así, se puede configurar una partición de intercambio de emergencia en un viejo y más lento disco duro, que únicamente será usada cuando las otras particiones más rápidas se hallan llenado por completo.

Ahora es el momento de poner algo de este conocimiento sobre el espacio de intercambio en acción.

Recursos

Acerca del autor

Daniel Robbins vive en Albuquerque, Nuevo México. Fue el Presidente/CEO de Gentoo Technologies Inc., el Arquitecto Jefe del Proyecto Gentoo y contribuye como autor de varios libros publicados por MacMillan: Caldera OpenLinux Unleashed, SuSE Linux Unleashed y Samba Unleashed. Daniel se ha visto involucrado en el mundo de las computadoras de algún modo desde segundo grado cuando se expuso al lenguaje de programación Logo y a una potencialmente letal dosis de Pac Man. Ésto probablemente explica porqué ha sido un artista de gráficos en SONY Electronic Publishing/Psygnosis. Daniel disfruta pasando el tiempo con su mujer Mary y con su hija, Hadassah. Se puede contactar con Daniel en Daniel Robbins.



Imprimir

Página actualizada 9 de octubre, 2005

Sumario: Aprender a mejorar el rendimiento de el espacio de intercambio (swap) en un servidor Linux en varios órdenes de magnitud. El autor Daniel Robbins nos muestra en este consejo cómo conseguir lo mejor de nuestro servidor.

Daniel Robbins
Autor

Joshua Saddler
Editor

Fernando M. Bueno
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.