2012-08-28 86 views
21

estoy corriendo "Potencia" de la siguiente manera:pila de llamadas en el perfilador Potencia

perf record -a --call-graph -p some_pid 

perf report --call-graph --stdio 

Entonces, veo esto:

1.60%  my_binary my_binary    [.] my_func 
      | 
      --- my_func 
       |   
       |--71.10%-- (nil) 
       |   (nil) 
       |   
       --28.90%-- 0x17f310000000a 

no puedo ver que funciona mi_func llamada(). Veo "nil" y "0x17f310000000a" en su lugar. ¿Estoy haciendo algo mal? Probablemente no es un problema de información de depuración porque algunos símbolos se muestran mientras que otros no se muestran.

Más información:

  • estoy runnning CentOS 6.2 (kernel 2.6.32-220.4.1).
  • perf rpm - perf-2.6.32-279.5.2.el6.x86_64.

Respuesta

0

¿Ha intentado perfilar con Zoom? Puede usar perf, un controlador personalizado u oprofile para recolectar muestras. Si solo está interesado en ver un proceso, pruebe la configuración "Tiempo de subprocesos".

Me gustaría saber si alguna de las opciones de Zoom es mejor/diferente para obtener la información de la función que la ejecución independiente.

+0

No he probado Zoom. Esperaba usar perf que viene gratis. ¿Zoom resolverá este problema? ¿Es fácil usar perf de Zoom? ¿Se explica en alguna parte? – erezz

+0

Zoom usará perf de manera predeterminada para distribuciones recientes de Linux (kernel 2.6.38 o posterior). Si está en algo entre 2.6.32 y 2.6.37, puede que tenga que seleccionar el controlador de perforación manualmente desde las páginas de pref. Creé configuraciones de creación de perfiles personalizadas para acceder a los eventos del monitor de rendimiento, pero no parece que sea necesario hacer nada sofisticado. Un perfil de tiempo regular debería darle los datos de la llamada y el símbolo que está buscando. – federal

+0

Su módulo kernel no se descarga correctamente. \ [edit \] Para aquellos que prueban Zoom desde esta publicación y no pueden descargar rrnotify, desmonte/dev/rrnotify primero. \ [edit \] Además, si se ejecuta en un sistema que no está en inglés, exporte LC_ALL = C antes de ejecutar Zoom; Zoom no maneja los formatos de números que no están en inglés a la derecha. – FeepingCreature

23

Asegúrese de compilar el código con -fno-omit-frame-pointergcc opción.

+11

o intente 'perf record --call-graph dwarf' (que funciona sin puntero de marco) – maxy

+0

instale los paquetes de debuginfo para el código que usted perfil, la mayoría de las veces necesitará glibc, es decir, debuginfo-instalar glibc –

11

Ya casi ha terminado, que se está perdiendo la opción -G (puede que tenga una Potencia más reciente que la instalada en su sistema):

$ perf report --call-graph --stdio -G 

De perf help report:

-G, --inverted 
     alias for inverted caller based call graph. 
+0

-G solo cambia el orden de la impresión de la pila de llamadas en 'informe de rendimiento '; si no hay una pila de llamadas completa grabada en 'perf.data' en el momento de' perf record', la opción '-G' no ayudará. Solo necesita habilitar punteros de marco o enano (puede que no se haya portado a rh's 2.6.32) para decodificar tramas en el momento de 'registro': http://www.brendangregg.com/perf.html#StackTraces" Omitir punteros de cuadro es una mal optimización del compilador que rompe el depurador " – osgx

+0

Tenga en cuenta que' -G' en 'perf record' (en lugar de' informe') selecciona por cgroup, en caso de que alguien obtenga errores confusos sobre cgroups. –

Cuestiones relacionadas