2010-03-23 8 views
36

Solía ​​hacer todos mis perfiles de Linux con gprof.¿Cómo perfilar la aplicación C++ de subprocesos múltiples en Linux?

Sin embargo, con mi aplicación de subprocesos múltiples, su salida parece ser inconsistente.

Ahora, cavé esto:

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

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

Por lo tanto, mis preguntas son:

1) En 2010, puedo utilizar simplemente gprof al perfil aplicaciones de subprocesos múltiples Linux C++? (Ubuntu 9.10) 2) ¿Qué otras herramientas debo considerar para crear perfiles?

+0

Recomiendo usar valgrind – sisis

+4

Preferiblemente algo que no se ralentiza tanto como lo hace valgrind. – anon

+2

Por favor dígame las alternativas, pero no las alternativas. Comprobar. – dmckee

Respuesta

9

Editar: agregó otro answer en el generador de perfiles de los pobres, que en mi humilde opinión es mejor para aplicaciones multiproceso.

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

+1

Zoom (descargar en http://rotateright.com) se basa en oprofile y hace que sea mucho más fácil comprender los datos. – federal

+0

@federal Parece que tienes que ser un usuario root para instalar Zoom + _ + – Alaya

5

Eche un vistazo a Valgrind.

+1

Valgrind + cachegrind –

+0

El problema que me llevó a este hilo es las extrañas diferencias de programación de Callgrind y el hecho de que ejecuta todo en un solo hilo. Estoy tratando de encontrar cuellos de botella de mis operaciones atómicas y spinlocks, el enhebrado simple mata los problemas de contención y rendimiento que pueden causar. Entonces Valgrind, a pesar de mis deseos de lo contrario, no siempre es el perfilador de elección. –

5

Eche un vistazo a Zoom.

+0

Parece que si no soy una raíz, no puedo tenerlo instalado. – Alaya

6

A Paul R dijo, tener una mirada a Zoom. También puede usar lsstack, que es un enfoque de baja tecnología pero sorprendentemente eficaz, compared to gprof.

Agregado: Como aclaró que está ejecutando OpenGL en 33 ms, mi recomendación anterior es válida. 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 de vez en cuando se comporta mal, le gustaría detenerlo solo mientras se está comportando 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.

5

Eche un vistazo a poor man's profiler. 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).

0

Puede ejecutar aleatoriamente pstack para averiguar la pila en un punto determinado. P.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).

Se pueden combinar ese conocimiento con strace o cercha (Solaris) para rastrear las llamadas del 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, memoria, E/S, etc. para perfilar el sistema en general.

+0

Revisa las publicaciones más votadas por Mike Dunlavey https: // stackoverflow.com/users/23771/mike-dunlavey - donde demostró que 5 muestras de pila de llamadas (gdb o pstack o ...) son estadísticamente suficientes. Además, 400 publicaciones en la etiqueta de creación de perfiles: https://stackoverflow.com/search?q=user:23771%20[profiling]%20is:answer – osgx

0

Puesto que usted no ha mencionado no comercial, puedo sugerir VTune de Intel. No es gratis, pero el nivel de detalle es muy impresionante (y la sobrecarga es insignificante).

Cuestiones relacionadas