2009-12-09 18 views
12

¿Cuáles son las mejores herramientas para crear perfiles de aplicaciones C/C++ en * nix?Perfiles de rendimiento en Linux

(Espero perfilar un servidor que sea una mezcla de archivos (bloqueantes) IO, epoll para red y fork()/execv() para algunos trabajos pesados, pero la ayuda general y las herramientas más generales también son todas apreciado.)

¿Puede obtener la gran imagen del sistema de RAM, CPU, red y disco, todo en una visión general, y profundizar en ella?

Se ha hablado mucho sobre el kernel lists sobre cosas como perf timechart, pero todavía no he encontrado nada que aparezca en Ubuntu.

Respuesta

1

compilar con -pg, ejecute el programa, y ​​luego usar gprof

Compilar (y enlazado) con -pg añade perfiles de código y las bibliotecas de perfiles al ejecutable, que a su vez produce un archivo llamado gmon.out que contiene la información de tiempo. gprof muestra gráficos de llamadas y sus tiempos (absoluto y relativo).

Consulte man gprof para obtener más información.

+0

El problema con gprof es que no funciona en multiproceso y tiene dificultades con las librerías dinámicas. –

1

Si usted puede tomar su aplicación a FreeBSD, OS X, Solaris o puede utilizar dtrace, aunque DTrace es una herramienta orientada analista - es decir, es necesario conducirlo - leer: guiarlo. Nada más puede brindarle el nivel de detalle que necesita; Dtrace no puede solo perfilar las latencias de las llamadas a funciones en user-land; también puede seguir un cambio de contexto en el kernel.

0

La respuesta de FOSS, como ya se mencionó, es construir con -pg y luego usar gprof para analizar la salida. Si se trata de un producto/proyecto que justifica invertir algo de dinero, también me sentiría tentado a utilizar IBM/Rationals Quantify Profiler, ya que eso facilita la visualización de los datos de creación de perfiles, profundiza en el nivel de línea o lo mira en un '10000ft ' nivel.

Por supuesto, puede haber un visor para gprof disponible que pueda hacer lo mismo, pero no conozco ninguno.

1

oprofile te puede interesar. Ubuntu debería tener todos los paquetes que necesita.

2

El ejemplo canónico de una herramienta de generación de perfiles de sistema completa (para Solaris, OS X, FreeBSD) es DTrace. Pero todavía no está completamente disponible en Linux (puedes probar here pero el sitio está caído para mí en este momento, y yo no lo he probado). Hay muchas herramientas, en varios estados de utilidad, para hacer perfiles de sistema completos y perfiles de kernel en Linux.

Usted podría considerar la investigación:

1

Como se menciona en la respuesta aceptada, Zoom puede hacer cosas increíbles. Lo he usado para entender el comportamiento del hilo hasta la optimización del ensamblaje generado por el compilador.

2

Allinea MAP es un generador de perfiles para C++ y otros lenguajes nativos en Linux. Es comercialmente compatible con mi empleador. Tiene una interfaz gráfica y un perfil de perfil de línea de origen y un código de perfiles casi sin ralentización que lo hace muy preciso cuando el tiempo de otros subsistemas es relevante, como para IO.

Callgrind ha sido útil y preciso, pero la ralentización fue de ~ 5x, por lo que solo pude realizar ejecuciones más pequeñas. En realidad, puede contar la cantidad de veces que se llama una función que es útil para comprender el comportamiento asintótico.

Cuestiones relacionadas