Perfiles de Linux con Performance Analyzer
Colegas, me parece 煤til hablar de un generador de perfiles de c贸digo conveniente y gratuito para Linux / Solaris. Forma parte del paquete Sun / Oracle Developer Studio [1]. En mi opini贸n, otras partes de este entorno de desarrollo son algo in煤tiles, pero el generador de perfiles, llamado Performance Analyzer, es muy exitoso. Es f谩cil de usar, permite un an谩lisis claro y conveniente de los resultados. En mi opini贸n, el generador de perfiles sigue siendo superior a muchos hom贸logos de Linux. Con esta herramienta, usar gprof parece un capricho extra帽o y una p茅rdida de tiempo.
Si no planea utilizar el Analizador de rendimiento de inmediato, no podr谩 seguir leyendo. Solo recuerda que tal producto existe. Si es interesante echar un vistazo, bienvenido.
El generador de perfiles consta de dos partes: recopilar: inicia la aplicaci贸n y recopila datos, registra los resultados del experimento; El analizador es una interfaz gr谩fica que lee los datos del experimento y brinda oportunidades para el an谩lisis conveniente de puntos calientes y 谩rboles de llamadas de funci贸n.
Brevemente sobre las ventajas y desventajas importantes:
Pros:
- sin cargo;
- no requiere la recompilaci贸n del c贸digo y la vinculaci贸n del archivo ejecutable;
- trabaja con compiladores gnu y sun;
- no cambia el tiempo de ejecuci贸n del programa al recopilar datos;
- Tiene una interfaz gr谩fica intuitiva;
- Equipado con interfaz de l铆nea de comando avanzada para an谩lisis autom谩tico;
- le permite ver r谩pidamente el resultado del compilador;
- tiene un perfilador estad铆stico que es lo suficientemente preciso incluso para piezas no particularmente laboriosas;
- an谩lisis convenientemente realizado y an谩lisis comparativo de varios lanzamientos de programas;
- No distorsiona los resultados.
Algunas desventajas:
- La interfaz gr谩fica est谩 escrita en Java. A veces se bloquea al arrancar, un simple reinicio ayuda;
- solo se mide el tiempo de CPU; si es posible arreglar el n煤cleo, entonces esta restricci贸n se puede eliminar;
- En las aplicaciones de subprocesos m煤ltiples, el tiempo que tarda la funci贸n es la suma de los tiempos dedicados a esta funci贸n en cada subproceso;
- El generador de perfiles estad铆sticos es ruidoso y dificulta la optimizaci贸n de los ciclos.
Formalmente, Oracle Developer Studio solo es compatible con Solaris y Oracle Linux. De hecho, lo he usado con 茅xito en Redhat, CentOS y Ubuntu. Recopilar / analizador que utilic茅 solo para optimizar las aplicaciones C / C ++ / Fortran. La documentaci贸n indica que la herramienta tambi茅n maneja proyectos Java.
Ejecuta y analiza resultados
El an谩lisis de c贸digo, por supuesto, comienza con la construcci贸n de un archivo ejecutable. Los nombres de funciones no deben eliminarse, de lo contrario no habr谩 nada que analizar. Los s铆mbolos de depuraci贸n son necesarios si desea ver l铆neas de c贸digo desde el analizador. Por supuesto, en primer lugar tiene sentido perfilar con sus opciones de optimizaci贸n favoritas. Hay escenarios en los que es 煤til perfilar el c贸digo sin optimizaci贸n, pero esto es raro. Por ejemplo, si solo necesita mirar el gr谩fico de llamadas y no medir el rendimiento.
Entonces, para comenzar, necesita, como de costumbre, recopilar el archivo ejecutable, por ejemplo:
g++ -O3 鈥揼 example.c 鈥搊 ex
El segundo paso es correr desde recoger:
$pathToSunStudio/collect ./ex
Como resultado del trabajo del generador de perfiles, se crea un subdirectorio de la prueba experimental. N.er en el directorio actual, donde N es el n煤mero inicial. (Importante: si su programa fue interrumpido, el directorio del experimento se romper谩).
El paso m谩s divertido es iniciar la GUI:
$pathToSunStudio/analyzer test.1.er
En el caso de nuestro sencillo ejemplo, conoceremos el c贸digo directamente desde el analizador GUI. Nuestro ejemplo calcula la suma de los logaritmos naturales y decimales de enteros de 2 a 20,000,000. Las l铆neas "c谩lidas" se resaltan en amarillo.

Pasemos a la lista de "funciones pesadas". Inicialmente, las funciones se ordenan por el tiempo dedicado a la funci贸n en s铆 (tiempo exclusivo). Puede ordenar por la suma de tiempo en la funci贸n y en sus elementos secundarios (tiempo incluido).

Como se esperaba, puede caminar alrededor de la pila de llamadas. En nuestro ejemplo simple, vemos que en t1 () venimos de main () , y la funci贸n sumlog () toma la mitad del tiempo de ejecuci贸n de todo el programa.

Es muy conveniente para la automatizaci贸n que sea posible extraer datos utilizando la l铆nea de comando. Por ejemplo:
er_print -functions test.1.er test.2.er
imprime el tiempo de ejecuci贸n de las funciones desde dos inicios.
tabla con tiempos <p>Functions sorted by metric: Exclusive Total CPU Time Excl. Incl. Name Total Total CPU sec. CPU sec. 4.160 4.160 Total 3.140 3.140 __ieee754_log 0.330 1.990 __ieee754_log10 0.270 1.880 sumlog(int) 0.180 2.280 sumlog10(int) 0.100 1.610 log 0.090 2.100 log10 0.050 0.050 isnan</p> <ol> <li>4.160 __libc_start_main</li> <li>4.160 main</li> <li>1.880 t1(int)</li> <li>2.280 t2(int)
Lifehack Mirando detenidamente el gr谩fico de las llamadas al programa, puede encontrar mucho trabajo 煤til y la arquitectura de una nueva base de c贸digo para usted. A menudo empiezo a trabajar con un nuevo proyecto lanzando el Analizador de rendimiento, porque puede comprender de inmediato qu茅 c贸digo realmente se ejecuta y en qu茅 escenarios.
Conclusi贸n
Sun / Oracle Studion Performance Analyzer es una herramienta potente y conveniente. En la nota, mostr茅 el caso de uso m谩s simple y, por supuesto, Performance Analyzer puede hacer mucho m谩s. Si est谩 interesado en aprender m谩s, consulte la documentaci贸n [2]. La conclusi贸n principal: esta herramienta existe y puede ser de gran beneficio para sus proyectos.
Referencias
- Oracle Developer Studio
- Oracle Developer Studio 12.6: Analizador de rendimiento
- Analizador de rendimiento