thread suma que pthread_create pthread procesos pid_t hilos funcion ejercicios ejemplos con c++ gprof multithreading

suma - ¿Cómo perfilar la aplicación C++ multihilo en Linux?



pthread c (10)

Solía ​​hacer todos mis perfiles de Linux con gprof .

Sin embargo, con mi aplicación multiproceso, su salida parece ser inconsistente.

Ahora, desenterré esto:

http://sam.zoy.org/writings/programming/gprof.html

Sin embargo, es de hace mucho tiempo y en mi salida de gprof, parece que mi gprof está enumerando funciones usadas por hilos no principales.

Entonces, mis preguntas son:

1) En 2010, ¿puedo usar gprof fácilmente para perfilar aplicaciones multiproceso de Linux C ++? ( Ubuntu 9.10 ) 2) ¿Qué otras herramientas debo considerar para crear perfiles?


A Paul R dijo, eche un vistazo a Zoom. También puede usar lsstack , que es un enfoque de baja tecnología pero sorprendentemente eficaz, en comparación con gprof .

Agregado: Ya que aclaró que está ejecutando OpenGL en 33 ms, mi recomendación anterior se mantiene. Además, lo que personalmente he hecho en situaciones como esa es tanto efectivo como no intuitivo. Simplemente haga que funcione con una carga de trabajo típica o problemática, y simplemente deténgalo, manualmente, en sus pistas, y vea qué está haciendo y por qué. Haz esto varias veces. Ahora, si solo se porta mal ocasionalmente , le gustaría detenerlo solo mientras se comporta mal. No es fácil, pero he usado un conjunto de interruptores de alarma para la demora correcta. Por ejemplo, si un fotograma de 100 toma más de 33 ms, al comienzo de un fotograma, configure el temporizador durante 35 ms, y al final de un fotograma, apáguelo. De esta forma, interrumpirá solo cuando el código esté tardando demasiado, y le mostrará por qué. Por supuesto, una muestra puede omitir el código culpable, pero 20 muestras no se perderán.


Como no mencionaste nada comercial, puedo sugerir el VTune de Intel. No es gratis, pero el nivel de detalle es muy impresionante (y la sobrecarga es insignificante).


Dando un giro ligeramente diferente a los asuntos, en realidad puede tener una idea bastante buena de lo que está sucediendo en una aplicación multiproceso usando ftrace y kernelshark. Recopilando el trazado correcto y presionando los botones correctos y puedes ver la programación de hilos individuales.

Dependiendo del kernel de su distribución, puede que tenga que construir un kernel con la configuración correcta (pero creo que muchos de ellos lo tienen incorporado en estos días).


Echa un vistazo al generador de perfiles del pobre . Sorprendentemente, hay algunas otras herramientas que para aplicaciones multiproceso, tanto para el perfil de CPU como para el perfil de contención mutex, y PMP hace ambas cosas, sin siquiera necesitar instalar nada (siempre que tenga gdb).


Eche un vistazo a Zoom .


Puedes ejecutar aleatoriamente pstack para descubrir la pila en un punto determinado. Ej. 10 o 20 veces. La pila más típica es donde la aplicación pasa la mayor parte del tiempo (según la experiencia, podemos asumir una distribución de Pareto).

Puede combinar ese conocimiento con strace o truss (Solaris) para rastrear las llamadas al sistema y pmap para la impresión de la memoria.

Si la aplicación se ejecuta en un sistema dedicado, también tiene sar para medir la CPU, la memoria, la E / S, etc. para perfilar el sistema en general.


Microprofile es otra posible respuesta a esto. Requiere instrumentación manual del código, pero parece que maneja bastante bien el código multihilo.



Editar: agregué otra answer en el generador de perfiles del pobre, que en mi humilde opinión es mejor para las aplicaciones multiproceso.

Echa un vistazo a oprofile . La sobrecarga de generación de perfiles de esta herramienta es insignificante y admite aplicaciones multiproceso, siempre que no desee establecer un perfil de contención mutex (que es una parte muy importante de la creación de perfiles de aplicaciones multiproceso).