Gprof es una herramienta de análisis de rendimiento para aplicaciones Unix . Utilizaba un híbrido de instrumentación y muestreo [1] y se creó como una versión extendida de la antigua herramienta "prof". A diferencia de prof, gprof es capaz de recopilar e imprimir gráficos de llamadas limitadas . [1] [2]
Historia
GPROF fue escrito originalmente por un grupo dirigido 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, utilizando la -pg
opción ' ' del compilador gcc ), para recopilar datos de la función de llamada. Se inserta una llamada a la función de monitor 'mcount' antes de cada llamada de función. [6]
Los datos de muestreo se guardan en 'gmon.out' o en el archivo ' progname .gmon' justo antes de que el programa salga, y se pueden analizar con la gprof
herramienta de línea de comandos ' '. Se pueden combinar varios archivos gmon con ' gprof -s
' para acumular datos de varias ejecuciones de un programa.
La salida GPROF consta de dos partes: el perfil plano y el gráfico de llamadas. El perfil plano da el tiempo total de ejecución invertido en cada función y su porcentaje del tiempo total de ejecución. También se informan los recuentos de llamadas a funciones. La salida se ordena por porcentaje, con los puntos calientes en la parte superior de la lista.
La segunda parte de la salida es el gráfico de llamadas textuales, que muestra para cada función quién la llamó (padre) y a quién llamó (subrutinas secundarias). Existe una herramienta externa llamada gprof2dot capaz de convertir el gráfico de llamadas de gprof en forma gráfica. [7]
Limitaciones y precisión
En tiempo de ejecución, los valores de sincronización se obtienen mediante muestreo estadístico. El muestreo se realiza mediante el sondeo del programa de destino contador de programa a intervalos regulares usando sistema operativo interrupciones (programados a través de profil (2) o 2) (setitimer syscalls ). Los datos resultantes no son exactos, sino una aproximación estadística. La cantidad de error suele ser más de 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, en otras palabras, 100 o 1000 muestras por segundo de tiempo de ejecución de la CPU.
En algunas versiones, como BSD, perfiles de bibliotecas compartidas puede ser limitada debido a las restricciones del profil función, que puede ser implementado como función de la biblioteca o como llamada al sistema. Había una utilidad análoga en glibc llamada 'sprof' para perfilar bibliotecas dinámicas. [10]
Gprof no puede medir el tiempo empleado en modo kernel (llamadas al sistema, esperando CPU o E / S en espera) y solo se perfila el código de espacio de usuario. [9]
Es posible que la función mcount no sea segura para subprocesos en algunas implementaciones, por lo que los perfiles de aplicaciones de subprocesos múltiples pueden ser incorrectos (normalmente solo perfila el subproceso principal de la aplicación). [11]
La sobrecarga de instrumentación puede ser alta (estimada en 30% [12] -260% [13] ) para programas orientados a objetos o de orden superior. La recursividad mutua y los ciclos no triviales no se pueden resolver con el enfoque gprof (gráfico de llamadas insensibles al contexto), porque solo registra el recorrido del arco, no las cadenas de llamadas completas. [13] [14] [15]
Gprof con recopilación de gráficos de llamadas solo se puede usar 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 de PLDI más influyentes de todos los tiempos como uno de los cuatro artículos del año 1982. [dieciséis]
Según Thiel, [6] "GPROF ... revolucionó el campo del análisis de rendimiento y rápidamente se convirtió en la herramienta elegida por los desarrolladores de todo el mundo ... la herramienta aún mantiene un gran número de seguidores ... la herramienta todavía se mantiene activamente y permanece relevante en el mundo moderno ".
Ver también
Referencias
- ^ a b Susan L. Graham, Peter B. Kessler y Marshall K. Mckusick. gprof: a Call Graph Execution Profiler // Actas del Simposio SIGPLAN '82 sobre construcción de compiladores, Avisos SIGPLAN, vol. 17, n. ° 6, págs. 120-126; doi: 10.1145 / 800230.806987
- ^ gprof --- Gráfico de llamadas // Ping Huang, Reinventing Computing, MIT AI Lab
- ^ HISTORIA El generador de perfiles de gprof apareció en 4.2BSD
- ^ Manual de GNU gprof : "GNU gprof fue escrito por Jay Fenlason".
- ^ Boletín de GNU, vol. 1 no. 5 (1988): "Jay Fenlason, miembro del personal de la Fundación de reemplazo de Gprof, completó recientemente un generador de perfiles para usar con GNU C, compatible con 'GPROF' de Berkeley Unix".
- ^ a b 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áfico de llamada Gprof // Recetario para computación científica. Libro de cocina de Python. École polytechnique fédérale de Lausanne (EPFL)
- ^ Inexactitud estadística de la salida de gprof Archivado el 29 de mayo de 2012 en la Wayback Machine.
- ^ a b Herramientas de creación de perfiles de gprof en sistemas BG / P Archivado el 21 de diciembre de 2013 en Wayback Machine , "Problemas en la interpretación de datos de perfil", Instalación de computación de liderazgo de Argonne
- ^ http://www.hpl.hp.com/research/linux/qprof/
- ^ CÓMO: usar gprof con aplicaciones multiproceso // Sam Hocevar, 2004-12-13
- ^ 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
- ^ a b Perfilado de ruta de llamada de bajo costo de código optimizado y sin modificar , ACM 1-59593-167 / 8/06/2005.
- ^ JM Spivey Creación de perfiles de gráficos de llamadas rápidos y precisos Archivado el 7 de febrero de 2012en Wayback Machine , 3 de septiembre de 2003 // Archivo de software: práctica y experiencia, volumen 34, número 3, marzo de 2004, páginas 249-264 Spivey, JM (2004 ). "Creación de perfiles de gráficos de llamadas rápidos y precisos". Software: práctica y experiencia . 34 (3): 249–264. CiteSeerX 10.1.1.62.1032 . doi : 10.1002 / spe.562 .
- ^ Yossi Kreinin, Cómo mienten los perfiladores: 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
Otras lecturas
- Susan L. Graham, Peter B. Kessler y Marshall K. Mckusick. gprof: a Call Graph Execution Profiler // Actas del Simposio SIGPLAN '82 sobre construcción de compiladores, Avisos SIGPLAN, 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
- Kit de herramientas del programador de Vinayak Hegde: programas de creación de perfiles que utilizan gprof , Gaceta de Linux, 2004
- Martyn Honeyford, Acelere su código con el generador de perfiles GNU. Apunte a las partes de sus aplicaciones que requieren más tiempo , 3 de abril de 2006 // IBM DeveloperWorks, Technical library
- Documentación GNU Gprof