Librerías dinámicas y "dynamo" (Re: [ATARI] RE: Atari digest, Vol 1 #391 - 9 msgs)

Jesus Cea Avion jcea at argo.es
Tue Jan 14 20:25:04 CET 2003


Para los recién llegados, comentar que "DYNAMO" es un proyecto de HP
para analizar y optimizar un programa MIENTRAS se está ejecutando,
aplicando técnicas JIT y similares. Revisad los archivos de la lista de
correo para más detalles.

Una utilidad muy interesante de cosas como "dynamo" es identificar
patrones de llamada. Es decir "esta rutina se suele llamar desde A, B y
C", "Esta otra desde B y J", "cuando llamamos a la rutina desde B, este
'IP' suele ser verdadero", etc.

¿A qué viene todo esto?.

Como ya he comentado en otro mensaje, las librerías dinámicas no se
cargan en memoria enteras, sino que se van cargando a "trocitos" a
medida que va siendo necesario. Idealmente se cargarían SOLO rutinas
individuales, pero típicamente la carga se produce con una granularidad
de una "página" de memoria. En mi sistema "habitual" (solaris, Sparc),
una página de memoria ocupa 8Kbytes. Ello implica que si quiero usar una
rutina que ocupa 180 bytes, tengo que pedir al disco duro una página
completa, 8Kbytes.

El problema es que normalmente las rutinas no están grabadas en disco
duro en ningún orden en particular. Normalmente se almacenan, por
ejemplo, por el orden en que están en el código fuente, y las rutinas de
diferentes fuentes en orden casi aleatorio. No hay ninguna regla.

Eso puede suponer que cuando llamamos a una rutina de esa librería, y
esa rutina llama a otras, que llaman a otras... a lo mejor estamos
usando solo el 1% de las posibilidades de la librería, pero como las
rutinas están repartidas por todo el fichero, acabamos con la librería
entera en memoria.

Una solución que, por cierto, está patentada (y no es coña), es
"estudiar" el uso de la librería por parte de los programas: ¿qué
funciones se usan más?. ¿Qué funciones se suelen usar juntas?. ¿Cuál es
la cadena de llamadas más habitual?, etc. Con esa información se coge la
librería y se reescribe (todo esto es automático, que conste) de forma
que las rutinas más utilizadas, etc., aparezcan juntas. De esa forma
cuando pidamos un bloque del disco por una rutina de 180 kbytes
estaremos razonablemente seguros de que ahí habrá también código que
vamos a utilizar, tal vez dentro de una décima de segundo.

Se gana velocidad (evitamos pedir al disco duro otra página) y ahorramos
memoria (páginas llenas con cosas "útiles", en vez de tener páginas de
las que solo usamos una pequeña parte de su contenido; el resto son
funciones poco usadas o que no usamos en absoluto en este programa).

Ésta es otra posibilidad de Dynamo, que Luis me discutió tanto en su día
};-).

-- 
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
                                      _/_/    _/_/          _/_/_/_/_/
PGP Key Available at KeyServ   _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz




More information about the Atari mailing list