16 junio 2006

RV: Optimización de la memoria virtual de Windows (1ra. parte)

El manejo incorrecto de la memoria virtual de Windows es comúnmente la causa de importantes pérdidas de performance de las PCs, particularmente cuando la RAM no está dimensionada de acuerdo a las necesidades de las aplicaciones en ejecución o cuando el archivo de intercambio (swapfile o pagefile) no se encuentra optimizado. En esta serie de notas veremos algunas técnicas para maximizar la performance mediante un aprovechamiento óptimo de la memoria virtual de Windows.

En una computadora de 32 bits, las direcciones de memoria poseen una longitud de 32 bits y se almacenan como números binarios. Hay algo más de 4 mil millones (2^32) de números binarios diferentes de 32 bits, lo cual determina la limitación de 4 GB de memoria que puede direccionarse en un sistema de 32 bits.

Una instrucción de programa de un procesador Intel 386 o posterior puede direccionar hasta 4 GB de memoria, utilizando todos sus 32 bits. A cada proceso que corre sobre el procesador se le asigna un espacio de direccionamiento de 4 GB de memoria virtual, independientemente de la cantidad de memoria física disponible. Esto significa que el límite de direccionamiento de 4 GB se aplica a cada proceso en forma independiente, y no a todo el conjunto de aplicaciones que corren en forma concurrente.

Si se suma la memoria virtual destinada a cada proceso, el total resulta mucho mayor que el tamaño total de la RAM de la máquina, de lo cual se deduce que la cantidad de memoria física de la computadora no guarda relación alguna con la cantidad total de memoria direccionable. Si una computadora posee 256 MB de memoria física, de todos modos cada proceso tendrá un espacio de 4 GB de memoria direccionable, y si una computadora tiene 8 GB de memoria física, también cada proceso contará con un espacio de direcciones de 4 GB.

A las aplicaciones no se les permite acceder directamente a la memoria física. Cuando una aplicación requiere más memoria, Windows mapea cierta cantidad de memoria física (siempre y cuando haya disponibilidad) en el espacio de direcciones del proceso en cuestión.

El hardware permite a los programas operar utilizando cuanto deseen de su memoria virtual de 4 GB. Aquellas partes de un programa y sus datos que están en uso en un momento determinado se cargan en la memoria RAM física. Windows mantiene numerosas tablas que registran el uso de la memoria por los programas, y cada aplicación sólo conoce su espacio de direcciones virtual.

El procesador se encarga de traducir (mapear) las direcciones virtuales de una instrucción en sus direcciones equivalentes de la memoria física, haciéndolo al momento de ejecutar la instrucción. El procesador administra este mapeo en términos de páginas de 4 KB cada una.

Las páginas de la memoria virtual de un proceso que no están cargadas en la memoria física son guardadas por Windows en un archivo de páginas (pagefile o swapfile) en el disco rígido. Cuando toda la memoria RAM física de una computadora se encuentra en uso, Windows comienza a usar el disco rígido como si fuera RAM adicional. Dado que la memoria RAM es mucho más veloz que el disco, siempre que la computadora comienza a utilizar el pagefile para quitar presión a la memoria RAM, la computadora comienza a experimentar una degradación drástica de la performance.

Una de las formas más efectivas de evitar esto es asegurarse de que haya suficiente memoria RAM disponible para cubrir las necesidades de los procesos a ejecutar y de esta forma evitar el intercambio (swapping) frecuente de la memoria virtual entre la RAM y el pagefile.

El límite real de la memoria utilizada por todas las aplicaciones es la cantidad de RAM instalada más el tamaño máximo del pagefile. Para determinar cuánto espacio hace falta para destinar al pagefile, hay que considerar la cantidad de memoria RAM instalada y la memoria requerida por los programas a utilizar. Comúnmente, y a modo de regla rudimentaria, se considera que el espacio requerido para el pagefile debe ser igual a una vez y media la cantidad de memoria RAM física, a menos que se someta al sistema a una carga de trabajo muy alta.

Además de esta regla rudimentaria, existen muchas formas de optimizar el manejo de la memoria virtual en una máquina para lograr una performance máxima; las cuales iremos viendo en próximas entregas de este tutorial.

 

No hay comentarios.: