Skip to content Skip to navigation

OpenStax-CNX

You are here: Home » Content » Cronometraje y Perfilado - Memoria Virtual

Navigation

Recently Viewed

This feature requires Javascript to be enabled.
 

Además de tener un impacto negativo en el rendimiento debido a las fallas de cache, el sistema de memoria virtual puede disminuir la velocidad de ejecución de su programa, si es demasiado grande para caber en la memoria del sistema, o está compitiendo con otros trabajos grandes por usar una memoria escasa.

En la mayoría de las implementaciones de UNIX, el sistema operativo descarga automáticamente al área de intercambio parte de las páginas de aquellos programas demasiado grandes para caber en la memoria disponible. No arrojan el programa completo; sólo sucede cuando la memoria está completamente justa, o cuando su programa ha estado inactivo durante un rato. En tal caso, algunas páginas individuales se ponen en el área de intercambio para su recuperación posterior. En primer término, debe usted estar consciente de que esto está sucediendo, si es que todavía no se ha percatado. Y en segundo término, si está pasando, los patrones de acceso a memoria se tornan críticos. Cuando las referencias sean muy dispersas, su tiempo de ejecución quedará dominado completamente por la E/S a disco.

Si lo planea con anticipación, puede hacer que un sistema de memoria virtual trabaje para usted cuando su programa sea demasiado grande para alojarse en la memoria física de la máquina. Las técnicas son exactamente las mismas que las empleadas para afinar una aplicación sin espacio en memoria principal administrada por software, o bucles anidados. Consiste en "bloquear" las referencias a memoria, de forma que los datos consumidos en los vecinos usen una mayor porción de cada página de memoria virtual antes de regresarla a disco para hacer espacio para otra. 1

Calibrando el Tamaño de su Programa y el Tamaño de la Memoria

¿Cómo puede asegurar que se ha quedado sin espacio en memoria principal? Hay varias formas de comprobar la paginación en la máquina, pero tal vez la prueba más sencilla es comparar el tamaño de su programa con la cantidad de memoria disponible. Esto se hace mediante el comando size:


% size myprogram

En una máquina con UNIX Sistema V, la salida será similar a la siguiente:


53872 + 53460 + 10010772 = 10118104

En un sistema derivado del UNIX de Berkeley, se verá similar a:


text data bss hex decimal 53872 53460 10010772 9a63d8 10118104

Los tres primeros campos describen la cantidad de memoria necesaria para tres porciones distintas de su programa. La primera, el segmento de texto, contabiliza las instrucciones de máquina que forman su programa. La segunda, el segmento de datos, incluye los valores inicializados en su programa, tales como los contenidos de las sentencias de datos, bloques comunes, externos, cadenas de caracteres, etc. El tercer componente, bss (block started by symbol), usualmente es el mayor. Describe un área de datos sin inicializar en su programa. Esta área está formada de bloques comunes que no están ocupados por un bloque de datos. El último campo es la suma de las tres secciones, en bytes.2

Después, requiere saber cuánta memoria tiene su sistema. Desafortunadamente, no existe un comando UNIX estándar para eso. En los sistemas RS/6000, /etc/lscfg se lo dice. En una máquina SGI, /etc/hinv lo hace. Muchas implementaciones de UNIX Sistema V tienen un comando /etc/memsize. En un derivado de Berkeley, puede teclear:


% ps aux

Este comando le devuelve un listado de todos los procesos ejecutándose en la máquina. Encuentre el proceso con el valor más grande en la columna %MEM. Divida el valor en el campo RSS entre el porcentaje de memoria usado, para obtener un valor aproximado de cuánta memoria tiene su máquina:


memory = RSS/(%MEM/100)

Por ejemplo, si el proceso más grande muestra un uso de memoria del 5% y un tamaño de conjunto residente (RSS, resident set size) de 840 KB, su máquina tiene 840000/(5/100) = 16 MB de memoria.3 Si la respuesta del comando size muestra un total cercano a la cantidad de memoria que tiene, hay una buena posibilidad de que ocurra intercambio de páginas cuando lo ejecute - especialmente si está realizando otras cosas en la máquina al mismo tiempo.

Comprobando los Fallos de Página

Sus herramientas de monitoreo de rendimiento del sistema le indican si su programa está realizando intercambio de páginas. Algo de intercambio está bien; los fallos de página ocurren de manera natural conforme se ejecuta el programa. Sin embargo, sea cuidadoso si está compitiendo por los recursos del sistema con otros usuarios. La imagen que obtendrá no será la misma que cuando tenga la computadora para usted solo.

Para comprobar la actividad de intercambio de páginas en un sistema UNIX derivado de Berkeley, use el comando vmstat. Comúnmente la gente lo invoca con un incremento de tiempo, de forma que reporte el intercambio de páginas a intervalos regulares:


% vmstat 5

Este comando produce una línea de salida cada cinco segundos:


procs memory page disk faults cpu r b w avm fre re at pi po fr de sr s0 d1 d2 d3 in sy cs us sy id 0 0 0 824 21568 0 0 0 0 0 0 0 0 0 0 0 20 37 13 0 1 98 0 0 0 840 21508 0 0 0 0 0 0 0 1 0 0 0 251 186 156 0 10 90 0 0 0 846 21460 0 0 0 0 0 0 0 2 0 0 0 248 149 152 1 9 89 0 0 0 918 21444 0 0 0 0 0 0 0 4 0 0 0 258 143 152 2 10 89

Como puede observar, produce mucha información. Para nuestros propósitos, los campos importantes son avm, que significa "memoria virtual activa" (active virtual memory), fre o "memoria real libre" (free real memory), y los campos pi y po, cuyos números muestran la actividad de paginación. Cuando la cantidad en fre cae a valores cercanos a cero, y el campo po muestra mucha actividad, es una indicación de que el sistema de memoria está saturándose.

En una máquina con SysV, la actividad de paginación puede observarse mediante el comando sar:


% sar -r 5 5

Este comando le muestra la cantidad de memoria libre y el espacio de intercambio disponible al instante. Si el valor de memoria libre está bajo, puede asumir que su programa realizará intercambio de páginas:


Sat Apr 18 20:42:19 [r] freemem freeswap 4032 82144

Como mencionamos previamente, su desea ejecutar un trabajo mayor que el tamaño de memoria que posee su máquina, debe aplicar para la actividad de intercambio de páginas el mismo consejo que aplica para la actividad de cache.4 Trate de minimizar el tamaño de incremento en los bucles de su código, y cuando no pueda, bloquear las referencias a memoria ayudará muchísimo.

Una nota sobre las herramientas de monitoreo de rendimiento de la memoria: debe comprobar con el vendedor de su estación de trabajo si tienen disponible alguna herramienta además de vmstat o sar. Puede que exista alguna herramienta mucho más sofisticada (y tal vez gráfica) que le ayude a comprender cómo es que su programa utiliza la memoria.

Footnotes

  1. Examinamos las técnicas para bloqueos en el (Reference) Capítulo 8.
  2. Advertencia: El comando size no le da una panorámica completa si su programa aparta memoria dinámicamente, o mantiene datos en la pila. Esta área es especialmente importante para los programas en C y FORTRAN que crean arreglos grandes que no están en la sección COMMON.
  3. ¡También puede usted reiniciar su máquina! Ella le dirá cuánta memoria tiene disponible al arranque.
  4. Por cierto, ¿está recibiendo el mensaje “Out of memory?” Si está ejecutando csh, pruebe a teclear unlimit para ver si el mensaje desaparece. De otro modo, puede significar que no tiene suficiente espacio de intercambio disponible para ejecutar el trabajo.

Content actions

Download module as:

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks