Gprof es una herramienta de análisis de rendimiento para aplicaciones Unix . Utiliza una combinación de instrumentación y muestreo [ 1 ] y fue creada como una versión extendida de la herramienta "prof" anterior. A diferencia de prof, gprof es capaz de recopilar e imprimir gráficos de llamadas de forma limitada . [ 1 ] [ 2 ]
Historia
GPROF fue escrito originalmente por un grupo liderado por Susan L. Graham en la Universidad de California, Berkeley para Berkeley Unix ( 4.2BSD [ 3 ] ). Otra implementación fue escrita como parte del proyecto GNU para GNU Binutils en 1988 por Jay Fenlason. [ 4 ] [ 5 ]
Implementación
El código de instrumentación se inserta automáticamente en el código del programa durante la compilación (por ejemplo, mediante la -pgopción del compilador gcc ) para recopilar datos de la función que realiza la llamada. Se inserta una llamada a la función de monitorización antes de cada llamada a función . [ 6 ]mcount
Los datos de muestreo se guardan en gmon.outun progname.gmonarchivo justo antes de que finalice el programa y se pueden analizar con la gprofherramienta de línea de comandos. Se pueden combinar varios archivos gmon gprof -spara acumular datos de varias ejecuciones del programa.
La salida de GPROF consta de dos partes: el perfil plano y el gráfico de llamadas. El perfil plano muestra el tiempo total de ejecución empleado en cada función y su porcentaje respecto al tiempo total de ejecución. También se informa del número de llamadas a funciones. La salida se ordena por porcentaje, con los puntos críticos en la parte superior de la lista.
La segunda parte de la salida es el gráfico de llamadas textual, que muestra para cada función quién la llamó (padre) y a quién llamó (subrutinas hijas). Existe una herramienta externa llamada gprof2dot capaz de convertir el gráfico de llamadas de gprof a formato gráfico. [ 7 ]
Limitaciones y precisión
En tiempo de ejecución, los valores de tiempo se obtienen mediante muestreo estadístico. El muestreo se realiza sondeando el contador de programa del programa objetivo a intervalos regulares utilizando interrupciones del sistema operativo (programadas mediante llamadas al sistema profil(2) o setitimer(2) ). Los datos resultantes no son exactos, sino una aproximación estadística. La cantidad de error suele ser mayor que un período de muestreo. Si un valor es n veces el período de muestreo, el error esperado en el valor es la raíz cuadrada de n períodos de muestreo. [ 8 ] [ 9 ] Un período de muestreo típico es de 0,01 segundos (10 milisegundos) o 0,001 segundos (1 ms), o dicho de otro modo, 100 o 1000 muestras por segundo de tiempo de ejecución de la CPU.
En algunas versiones, como BSD, el análisis de bibliotecas compartidas puede verse limitado debido a las restricciones de la profilfunción, que puede implementarse como función de biblioteca o como llamada al sistema. Existía una utilidad análoga en glibc para sprofanalizar bibliotecas dinámicas. [ 10 ]
Gprof no puede medir el tiempo empleado en modo kernel (llamadas al sistema, espera de CPU o espera de E/S), y solo se perfila el código del espacio de usuario. [ 9 ]
Es posible que la mcountfunción no sea segura para subprocesos en algunas implementaciones, por lo que los perfiles de aplicaciones multiproceso pueden ser incorrectos (normalmente solo perfila el subproceso principal de la aplicación). [ 11 ]
La sobrecarga de instrumentación puede ser alta (estimada entre el 30 % [ 12 ] y el 260 % [ 13 ] ) para programas de orden superior u orientados a objetos. La recursión mutua y los ciclos no triviales no se pueden resolver mediante el enfoque gprof (grafo de llamadas insensible al contexto), ya que solo registra el recorrido de arcos, no cadenas de llamadas completas. [ 13 ] [ 14 ] [ 15 ]
Gprof con recopilación de gráficos de llamadas solo se puede utilizar con compiladores compatibles, como GCC, clang/LLVM y algunos otros.
Recepción
En 2004, un artículo de GPROF apareció en la lista de los 50 artículos más influyentes de PLDI de todos los tiempos como uno de los cuatro artículos del año 1982. [ 16 ]
Según Justin Thiel, [ 6 ] "GPROF... revolucionó el campo del análisis de rendimiento y rápidamente se convirtió en la herramienta preferida de los desarrolladores de todo el mundo... la herramienta aún mantiene un gran número de seguidores... la herramienta sigue recibiendo mantenimiento activo y sigue siendo relevante en el mundo moderno".
Véase también
Referencias
- 1 2 Susan L. Graham, Peter B. Kessler y Marshall K. Mckusick. gprof: un perfilador de ejecución de grafos de llamadas // Actas del Simposio SIGPLAN '82 sobre Construcción de Compiladores, SIGPLAN Notices, Vol. 17, No. 6, pp. 120-126; doi: 10.1145/800230.806987
- ↑ gprof --- Grafo de llamadas // Ping Huang, Reinventando la computación, Laboratorio de IA del MIT
- ↑ HISTORIA El perfilador gprof apareció en 4.2BSD
- ↑ Manual de GNU gprof : "GNU gprof fue escrito por Jay Fenlason."
- ↑ Boletín de GNU, vol. 1 n.º 5 (1988): "Jay Fenlason, miembro del personal de la Fundación para el reemplazo de Gprof, ha completado recientemente un generador de perfiles para GNU C, compatible con `GPROF' de Berkeley Unix."
- 1 2 Justin Thiel, Una descripción general de las herramientas y técnicas de análisis del rendimiento del software: De GProf a DTrace (2006) "2.1.1 Descripción general de GProf".
- ↑ Visualización de gráficos de llamadas de Gprof ( Archivado el 6 de junio de 2013 en Wayback Machine ) // Libro de cocina para la informática científica. Libro de cocina de Python. Escuela Politécnica Federal de Lausana (EPFL).
- ↑ Inexactitud estadística de la salida de gprof . Archivado el 29/05/2012 en Wayback Machine .
- 1 2 Herramientas de perfilado gprof en sistemas BG/P ( Archivado el 21/12/2013 en Wayback Machine ), "Problemas en la interpretación de datos de perfil", Instalación de computación de liderazgo de Argonne.
- ↑ "El proyecto qprof" . HP Labs, Investigación (archivado) . Archivado del original el 4 de agosto de 2014. Recuperado el 28 de septiembre de 2023 .
{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace ) - ↑ CÓMO: usar gprof con aplicaciones multihilo // Sam Hocevar, 13 de diciembre de 2004.
- ↑ GNU gprof Profiler ( Archivado el 8 de diciembre de 2015 en Wayback Machine ), Yu Kai Hong, Departamento de Matemáticas de la Universidad Nacional de Taiwán; 19 de julio de 2008.
- 1 2 Perfilado de ruta de llamada de baja sobrecarga de código optimizado sin modificar , ACM 1-59593-167/8/06/2005.
- ↑ Spivey, JM (2004). "Perfilado rápido y preciso de gráficos de llamadas" (PDF) . Software: Practice and Experience . 34 (3): 249– 264. CiteSeerX 10.1.1.62.1032 . doi : 10.1002/spe.562 . S2CID 17866706 . Archivado el 7 de febrero de 2012 en Wayback Machine .
- ↑ Yossi Kreinin, Cómo mienten los analizadores de perfiles: los casos de gprof y KCachegrind // 2 de febrero de 2013.
- ↑ 20 años de PLDI (1979–1999): Una selección, Kathryn S. McKinley, editora
Lecturas adicionales
- Susan L. Graham, Peter B. Kessler y Marshall K. Mckusick. gprof: un perfilador de ejecución de grafos de llamadas // Actas del Simposio SIGPLAN '82 sobre Construcción de Compiladores, SIGPLAN Notices, vol. 17, n.º 6, págs. 120-126; doi: 10.1145/800230.806987
- Graham, SL, Kessler, PB y McKusick, MK (1983), Un perfilador de ejecución para programas modulares. Softw: Pract. Exper., 13: 671–685. doi: 10.1002/spe.4380130803
Enlaces externos
- Vinayak Hegde, Kit de herramientas para programadores: Análisis de rendimiento de programas mediante gprof , Linux Gazette, 2004
- Martyn Honeyford, Acelere su código con el perfilador GNU. Identifique las partes de sus aplicaciones que consumen más tiempo , 3 de abril de 2006 // IBM DeveloperWorks, Biblioteca técnica
- Documentación de GNU Gprof
- Perfiladores