2009-01-06 8 views
5

Tengo que analizar los accesos a la memoria de varios programas. Lo que estoy buscando es un generador de perfiles que me permita ver cuál de mis programas es más intensivo en memoria en función del uso intensivo de la informática. Estoy muy interesado en la cantidad de accesos a la memoria caché de datos L1, L2 y la memoria principal.Perfilado para analizar los accesos de memoria de bajo nivel de mi programa

Tiene que ser para Linux y si solo es posible con el uso de comandos. El lenguaje de programación es C++. Si hay algún problema con mi pregunta, como que no entiendo lo que quiere decir o si necesitamos más datos, por favor comente a continuación.

Gracias.

actualización con la solución

He seleccionado la respuesta de Crashworks como Favorecido porque es el único que proporciona algo de lo que estaba buscando. Pero la pregunta sigue abierta, si conoce una solución mejor, responda.

Respuesta

1

Si está ejecutando hardware de Intel, entonces VTune para Linux es probablemente la herramienta mejor y más completa disponible para usted.

De lo contrario, puede que tenga que leer los MSR del contador de rendimiento directamente, utilizando la biblioteca perfctr. No tengo ninguna experiencia con esto en Linux, pero encontré un par de documentos que pueden ayudarlo (suponiendo que está en x86; si está ejecutando PPC, responda y puedo proporcionar respuestas más detalladas): http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel5/11169/35961/01704008.pdf?temp=x http://www.cise.ufl.edu/~sb3/files/pmc.pdf

En general, estas herramientas no pueden decirle exactamente en qué líneas ocurren las fallas de caché, ya que funcionan sondeando un contador. Lo que tendrá que hacer es sondear el contador "l1 cache miss" al principio y al final de cada función que le interesa para ver cuántas fallas se producen dentro de esa función y, por supuesto, puede hacerlo de forma jerárquica. Esto se puede simplificar con , por ejemplo, inventando una clase que registra el temporizador de inicio al ingresar al alcance y calcula el delta al salir del alcance.

El modo instrumentado de VTune hace esto automáticamente en todo el programa. La herramienta AMD equivalente es CodeAnalyst. Valgrind afirma ser un generador de perfiles de caché de código abierto, pero nunca lo he usado.

0

¿Necesita algo más que el comando de unix top proporcionará? Esto proporciona el uso de la CPU y el uso de la memoria de los programas de Linux en un formato de presentación fácil de leer.

Si necesita algo más específico, un generador de perfiles quizás, el lenguaje de software (java/C++/etc.) Ayudará a determinar qué generador de perfiles es el mejor para su situación.

2

No es posible determinar todos los accesos a la memoria, ya que no tiene mucho sentido. Un acceso a la memoria podría estar ejecutando la próxima instrucción (el programa reside en la memoria), o cuando su programa lee o escribe una variable, por lo que su programa casi está accediendo a la memoria todo el tiempo.

Lo que podría ser más interesante para usted podría ser seguir el uso de la memoria de su programa (tanto en el montón como en la pila). En este caso, puede usar el comando estándar top.

También podría controlar las llamadas al sistema (es decir, escribir en el disco o adjuntar/asignar un segmento de memoria compartida). En este caso, debe usar el comando strace.

Un control más completo para hacer todo sería depurar su programa mediante el depurador gdb. Le permite controlar su programa, como establecer puntos de interrupción a una variable para que el programa se interrumpa cada vez que se lee o escribe (quizás esto es lo que estaba buscando). Por otro lado, GDB puede ser complicado de aprender, por lo que DDD, que es un frontend gráfico de gtk, te ayudará a comenzar con él.

Actualización: Lo que está buscando es realmente acceso de memoria de bajo nivel que no está disponible a nivel de usuario (esa es la tarea del kernel del sistema operativo). No estoy seguro de que incluso la administración de la caché L1 sea manejada de forma transparente por la CPU y escondida en el kernel. Lo que está claro es que debe bajar tanto como el nivel del núcleo, por lo que KDB, explicó here o KDBG, explicó here.

Actualización 2: Parece que el kernel de Linux hace manejar caché de la CPU, pero sólo caché L1. El libro Understanding the Linux Virtual Memory Manager explica cómo funciona la administración de memoria del kernel de Linux. This chapter explica algunas de las agallas del manejo de caché L1.

Cuestiones relacionadas