Estoy perfilando una aplicación C++ utilizando linux perf, y estoy obteniendo un buen diagrama de flujo de control usando GProf2dot. Sin embargo, algunos símbolos de la biblioteca C (libc6-2.13.so) toman una parte sustancial del tiempo total y, sin embargo, no tienen bordes internos.¿Cómo obtengo una llamada a los padres para obtener los símbolos libc6 (por ejemplo, _int_malloc) con Linux perf?
Por ejemplo:
_int_malloc
tarda 8% del tiempo, pero no tiene padres de llamadas.__strcmp_sse42
y__cxxabiv1::__si_class_type_info::__do_dyncast
juntos tomar alrededor de 10% del tiempo, y tienen un llamador cuyo nombre es0
, que tiene las personas que llaman2d6935c
,2cc748c
y6
, que no tienen las personas que llaman.
Como resultado, no puedo averiguar qué rutinas son responsables de todo este mallocing y fundición dinámica utilizando simplemente perf. Sin embargo, parece que otros símbolos (por ejemplo, malloc
pero no _int_malloc
) tienen padres de llamada.
¿Por qué no perf show llama a los padres de _int_malloc? ¿Por qué no puedo encontrar las últimas llamadas de __do_dyn_cast? Y, ¿hay alguna forma de que modifique mi configuración para que pueda obtener esta información? Estoy en x86-64, así que me pregunto si necesito una libc6 (no estándar) con punteros de cuadro.
+1 para MCMC, y bienvenidos a SO. –