2010-03-08 6 views
15

Quiero usar valgrind para hacer algunos perfiles, ya que no es necesario reconstruir el programa. (El programa que quiero al perfil ya es construir con “-g")¿Cómo se usa callgrind para perfilar solo un cierto período de ejecución del programa?

Pero valgrind (Callgrind) es bastante lento ... así que esto es lo que hay que hacer:

  1. iniciar el servidor (quiero para perfilar ese servidor)
  2. tipo de conectarse a dicho servidor
  3. antes de hacer alguna operación en el servidor, iniciar recopilar datos del perfil
  4. tiempo de terminada la operación, los datos del perfil de gama recoger
  5. analizar los datos de perfiles.

Puedo hacer este tipo de cosas utilizando Sun Studio en Solaris. (usando dbx). Solo quiero saber si es posible hacer lo mismo usando valgrind (callgrind)?

Gracias

+1

¿Qué sistema operativo? –

+0

Sí, es Linux – superb

+0

Espero que Valgrind no sea su única opción. Ha considerado esta técnica: (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024) También puede utilizar * * pstack ** o ** lsstack ** para hacer lo mismo. Por dinero, puedes obtener RotateRight/Zoom, que es bastante bueno. –

Respuesta

4

Usted no dice qué sistema operativo - Asumo Linux - en cuyo caso es posible que desee mirar a oprofile (libre) o Zoom (no libre, pero se puede obtener una licencia de evaluación) , ambos son perfiladores de muestreo y pueden perfilar el código existente sin recompilación. Zoom es mucho más agradable y fácil de usar (tiene una GUI y algunas características adicionales), pero es probable que ya tenga oprofile en su sistema.

+0

Sí, acabo de ver que otros muchachos recomendaron estas 2 herramientas. Para mí, el punto para usar valgrind es que no tiene acceso de root porque estoy usando un servidor público para hacer perfiles ... – superb

+0

Creo que solo necesitas acceso de root para * instalar * estas herramientas, deberías poder ejecutarlas sin acceso a la raíz, ¿no? (Yo uso Zoom desde una cuenta normal que no es de root, pero eso es para el perfil local, por lo que no puedo estar seguro acerca del caso de perfiles remotos.) –

+0

Veo, gracias.Pero aún quiero saber si es posible usar valgrind para hacer lo mismo. A veces, cuando no puedo reproducir el problema de rendimiento, necesito echar un vistazo directamente a la máquina de prueba, pero el software de perfilado de instalación (que recoge el contador de hardware) puede afectar el rendimiento del sistema y ajustar muchas necesidades básicas que no están permitidas. Valrigind es sigue siendo la mejor opción, si puedo usarlo de la manera que describí en la pregunta. – superb

27

Debería mirar callgrind documentation, y leer sobre callgrind_control.

  1. lanzamiento de su aplicación: valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. Ver 1.
  3. inicio recoger datos del perfil: callgrind_control -i on
  4. finales recogen datos del perfil: callgrind_control -i off
  5. Analizar los datos con kcachegrind o callgrind_annotate/cg_annotate
6

para el perfilado solamente alguna función también se puede encontrar útil CALLGRIND_START_INSTRUMENTATION y CALLGRIND_STOP_INSTRUMENTATION de <valgrind/callgrind.h> cabecera y con la opción de Callgrind --instr-atstart=no como se sugiere en Doomsday's answer.

Cuestiones relacionadas