Entradas de octubre 2008

Gestión de memoria en el kernel de linux

29 de octubre, 2008 - por | | Kernel, Linux

Cuando se trabaja habitualmente con linux la gestión de memoria es un tema recurrente. En entornos de desarrollo del kernel o de software, es una cuestión bien conocida y con la que hay que pelearse a diario. Sin embargo, en entornos web, tanto en desarrollo como en administración de sistemas, es una suerte de caja negra. Tanto porque la complejidad del tema implica una curva de aprendizaje relativamente alta, como porque los lenguajes con los que se trabaja gestionan automáticamente la memoria y, por lo tanto, no exigen un conocimiento práctico de ésta, a diferencia de aquellos otros -por ejemplo, C- que no incorporan dicha gestión automática.

En la red hay algunos artículos que están bastante bien para introducirse en el tema y ordenar un poco las ideas. Además, también hay varios capítulos de libros que merece la pena reseñar.

El capítulo Memory Management del libro de David A. Rusling, colgado en linuxhq.com, es una buena introducción a pesar de que tiene ya unos años y de que, por lo tanto, se basa en una versión del kernel muy distinta a las actuales. Está muy bien organizado y describe los conceptos fundamentales.

En DeveloperWorks de IBM Vikram Shukla publicó en 2006 Explore the Linux memory model. A first step to understanding the Linux design. Es un texto bastante claro que se ocupa del modelo de gestión de memoria en su conjunto: gestión de la memoria virtual, gestión de la memoria física y gestión de la memoria del kernel.

A finales de 2007 LWN comenzó a publicar una serie de 9 artículos de Ulrich Drepper bajo el provocativo título What every programmer should know about memory. La serie se recogió también en un documento en pdf, que se puede encontrar tanto en LWN como en la página personal de Drepper en Red Hat. Los artículos abarcan un abánico muy amplio de temas, y son especialmente interesantes para el desarrollador los dedicados a optimización de caché y multihilo.

El libro de Claudia Salzberg, Gordon Fischer y Steven Smolski, The Linux Kernel Primer, es una obra muy buena. Lástima que sólo esté en papel. Puedes echarle una ojeada en Amazon.com. El capítulo 4 se ocupa íntegramente de la gestión de memoria, comenzando con las “pages” y las “memory zones”. A continuación, la explicación del ciclo de vida del “slab allocator” es realmente buena. Leer el capítulo anterior, sobre el modelo de ejecución de procesos, ayuda a tener una visión de conjunto.

La conocida obra de Greg Kroah-Hartman Linux Kernel in a Nutshell contiene algunas referencias útiles para configurar y optimizar el kernel en relación con la memoria. Se le saca provecho una vez que se han consultado los textos anteriores.

Finalmente, y ya más orientada al hacking, el wiki LinuxMM quiere ser el punto de encuentro para la documentación del funcionamiento de la gestión de memoria, así como para la coordinación de nuevos proyectos de desarrollo relacionados con ésta.

¿Conoces algún otro recurso que te haya resultado útil? Coméntalo e iré actualizando la lista. :-)

Actualización 22 de Diciembre de 2008

El libro de Mel Gorman, Understanding the Linux Virtual Memory Manager, ofrece un acercamiento detallado sobre la gestión de la memoria en Linux, y se encuentra disponible de forma gratuita en formato pdf.