2009-12-15 16 views
6

Necesito averiguar qué parte de un programa de Linux que estoy ejecutando, está tomando la cantidad de memoria (ya sea porcentual o absoluta). Necesito crear un perfil de múltiples programas de este tipo, para poder identificar algunos de los mayores consumidores de memoria en mi código, y ver si puedo optimizarlos para usar menos. Lo necesito en la plataforma MIPS y, desafortunadamente, Valgrind no funciona en MIPS.Cómo perfilar el uso de la memoria de un programa en C

Cualquier ayuda/sugerencia sería muy apreciada.

+1

Valgrind ahora es compatible con MIPS. Compruebe https://bugs.kde.org/show_bug.cgi?id=270777 – MannyNS

Respuesta

6

Puede envolver todas sus llamadas a free y malloc con sus propias funciones en las que también proporciona, por ejemplo, en qué archivo y en qué número de línea se realiza cada asignación. A partir de esta información, es fácil ver en qué memoria se está utilizando.

+2

anule el tiempo de ejecución con LD_PRELOAD ... –

+0

@Stefano, Esto no funcionará si desea más argumentos a sus llamadas 'malloc', ¿verdad? (Soy un Linux n00b completo) –

+2

Debería funcionar. Marque aquí: http://www-2.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-s03/src/interposition/mymalloc.c –

1

El consumo de memoria no debe verse enormemente afectado por la arquitectura del procesador subyacente, por lo que es posible que pueda realizar el perfil de memoria en Linux x86. Sí, las cantidades absolutas de memoria probablemente se vean afectadas, pero como está buscando más números relativos que absolutos, esto debería funcionar.

Dicho esto, esta solución es poco probable que sea una opción si una compilación de Linux x86 es más que una recompilación de distancia.

+2

... suponiendo que la migración de MIPS a x86 es trivial. –

+0

Es cierto que esa sería la mosca en la sopa. –

+0

Sí. El programa que quiero perfilar, si tengo que transferir ese programa y todas las bibliotecas asociadas a x86, podría pasar meses :-). Así que esto no funciona para mí – Harty

8

Al lado de Valgrind, existe una gran cantidad de otros depuradores/perfiladores de memoria. Todo lo siguiente parece apoyar MIPS (pero no los he probado en el que la arquitectura):

jemalloc, CCMALLOC, mpatrol, NJAMD, Dmalloc, e incluso la propia Google google-perftools.

Cuestiones relacionadas