fbpx
Wikipedia

Análisis de rendimiento de software

En ingeniería de software el análisis de rendimiento, comúnmente llamado profiling o perfilaje, es la investigación del comportamiento de un programa de ordenador usando información reunida desde el análisis dinámico del mismo. El objetivo es averiguar el tiempo dedicado a la ejecución de diferentes partes del programa para detectar los puntos problemáticos y las áreas dónde sea posible llevar a cabo una optimización del rendimiento (ya sea en velocidad o en consumo de recursos).[1]​ Un profiler puede proporcionar distintas salidas, como una traza de ejecución o un resumen estadístico de los eventos observados.[2]

Usualmente el Profiling es utilizado durante el desarrollo de software como método para la depuración y optimización de los algoritmos, esta práctica vista de esta manera es buena, pero es vista más como una actividad interna que suele carecer de objetividad y veracidad cuando no es evaluado por personal realmente especializado y en el entorno adecuado para ello.[3]

El profiling se puede llevar a cabo en el código fuente o sobre un binario ejecutable mediante una herramienta llamada profiler.

Los profilers pueden clasificarse según la forma de recopilación de datos que utilicen, pudiendo destacar: basados en eventos, estadísticos, con instrumentación de código y como simulación.[2]

Historia

Las herramientas de análisis de rendimiento ya existían en las plataformas IBM S/360 y IBM System/370 de principios de 1970. Generalmente se basaba en un temporizador de interrupciones que se registraban en el programa de palabra de estado (Program status word, PSW) (que era un contador de programa y un registro de estado a la vez en estas arquitecturas) en intervalos establecidos para detectar hot spots en la ejecución del código.[4]​ Este fue un ejemplo temprano de muestreo en estadística que es un tipo que se verá a continuación. A principios de 1974, el simulador de conjunto de instrucciones permitió realizar trazas completas y otras funciones de supervisión del rendimiento.

Los programas analizadores de rendimiento en Unix se remontan al menos a 1979, cuando los sistemas Unix incluía la herramienta básica prof que aparece cada función y la cantidad de tiempo de ejecución del programa utilizado. En 1982, gprof extendió el concepto a un análisis llamado grafo de llamadas.[5]

En 1994, Amitabh Srivastava y Alan Eustace de Digital Equipment Corporation publican un artículo describiendo ATOM.[6]​ ATOM es una plataforma para convertir un programa en su propio profiler. Es decir, en tiempo de compilación, inserta el código en el programa a ser analizado. Ese código introducido produce salidas de datos de análisis. Esta técnica (modificar un programa para analizarse a sí mismo se conoce como instrumentación).

En 2004, tanto el "paper" de gprof como el de ATOM aparecieron en la lista de los 50 "papers" más influyentes de Programming Language Design and Implementation de todos los tiempos.[7]

Recopilación de los eventos del programa

Los profilers utilizan una amplia variedad de técnicas para recopilar datos, incluyendo: interrupciones por hardware, instrumentación de código, simulador de conjunto de instrucciones, hooking y contadores de rendimiento de hardware. El profiling es la técnica más usada dentro de la ingeniería de rendimiento.

Salida generada por un profiler

La salida que puede generar un profiler depende del mismo, generalmente son las siguientes:

  • Un resumen estadístico de los eventos observados (un perfil): Un resumen de la información del perfil se muestra a menudo anotado contra las declaraciones de código fuente donde se producen los eventos, por lo que el tamaño de los datos de medición es lineal para el tamaño del código del programa.
/* ------------ source------------------------- count */ 0001 IF X = "A" 0055 0002 THEN DO 0003 ADD 1 to XCOUNT 0032 0004 ELSE 0005 IF X = "B" 0055 
  • Una secuencia de eventos grabados (un seguimiento): Para programas secuenciales, un perfil, es generalmente suficiente, pero los problemas de performance en programas paralelos (que esperan mensajes o temas de sincronismo) a menudo dependen de la relación temporal de los acontecimientos, por lo que requieren un seguimiento completo para obtener una comprensión de lo que está sucediendo.
  • Una interacción permanente con el hipervisor (vigilancia continua o periódica a través de la visualización en pantalla por ejemplo). Esto proporciona la oportunidad de cambiar un rastro o desactivarlo en cualquier momento que desee durante la ejecución, además de ver las métricas en curso sobre el programa (en ejecución). Además proporciona la oportunidad de suspender procesos asíncronos en los puntos críticos para examinar las interacciones con otros procesos paralelos en más detalle.

Tipos de profilers basados en su salida

  • Flat profilers: Calculan el tiempo promedio de las llamadas, y no se descomponen los tiempos de llamadas basado en el destinatario o el contexto de la misma.
  • Profiler de grafo de llamadas: Muestran los tiempos de llamada y las frecuencias de las funciones, así como las cadenas de llamadas en que participan basadas en el destinatario de la llamada. En algunas herramientas de contexto completo no se conserva.

Granularidad de los datos en los diferentes tipos de profilers

Los profilers, que también son propios programas, analizar programas específicos mediante la recopilación de información sobre su ejecución. Basado en su granularidad de datos, la forma en que los profilers recopilan información, se clasifican en profilers basados en eventos o estadísticos. Ya que los profilers interrumpen la ejecución del programa para recopilar información, tienen una resolución finita en las mediciones de tiempo, los cuales se deben tomar como un subconjunto del total de información.

Profilers basados en eventos

Los lenguajes de programación que se listan a continuación poseen un profiler basado en eventos:

Profilers estadísticos

Algunos profilers operan por muestreo. un profiler por muestreo prueba el "Program counter" del programa objetivo a intervalos regulares usando interrupciones del sistema operativo. Los profilers de muestreo son típicamente menos exactos numéricamente y específicos, pero permiten que el programa de destino funcione cerca de la velocidad máxima.

Profilers instrumentadores

Algunos profilers "instrumentan" el programa objetivo con instrucciones adicionales para recopilar la información necesaria.

Instrumentar el programa puede causar cambios en el rendimiento del programa, que pueden causar resultados inexactos y heisenbugs. Instrumentar siempre tendrá algún impacto en la ejecución del programa, por lo general siempre es más lento. Sin embargo, la instrumentación puede ser muy específica y ser controlada cuidadosamente para tener un impacto mínimo. El impacto sobre un programa en particular depende de la colocación de puntos de instrumentación y el mecanismo que se utiliza para capturar la traza. El soporte de hardware para capturar la traza significa que en algunos objetivos, la instrumentación puede tener sólo una instrucción de máquina. El impacto de la instrumentación a menudo se puede deducir (es decir, eliminada por sustracción) a partir de los resultados.

gprof es un ejemplo de un profiler que utiliza tanto la instrumentación y el muestreo. La instrumentación se utiliza para recopilar información de las llamadas y los valores de tiempo real se obtienen mediante muestreo estadístico.

Instrumentación

Esta técnica añade efectivamente instrucciones al programa de destino para recopilar la información requerida.

El efecto dependerá de qué información se está recopilando, del nivel de detalles de tiempo notificados y de si se utiliza la generación de perfiles de bloques básicos junto con la instrumentación.

La instrumentación es clave para determinar el nivel de control y la cantidad de resolución de tiempo disponible para los profilers. A continuación se enumeran todas las categorías:

  • Manual:
 Realizado por el programador, por ejemplo, añadiendo instrucciones para calcular explícitamente los tiempos de ejecución, simplemente cuente eventos o llamadas a API de medición, como el estándar de medición de respuesta a aplicaciones. 
  • Automática a nivel de código:
 Instrumentación agregada al código fuente por una herramienta automática según una directiva de instrumentación. 
  • Asistida por el compilador
  • Translación binaria:
 La herramienta agrega instrumentación a un ejecutable compilado. 
  • Instrumentación en tiempo de ejecución:
 Directamente antes de la ejecución se instrumenta el código. La ejecución del programa está totalmente supervisada y controlada por la herramienta. 
  • Inyección en tiempo de ejecución:
 Más ligera que la instrumentación en tiempo de ejecución. El código se modifica en tiempo de ejecución para tener saltos a funciones auxiliares. 

Interpretador de instrumentación

Las opciones del intérprete de depuración permiten habilitar la recopilación de métricas de rendimiento cuando el intérprete se encuentra con cada declaración de destino. Los bytecodes, tablas de control e intérpretes JIT son tres ejemplos que suelen tener un control completo sobre la ejecución del código de destino, lo que permite la oportunidad de recolectar datos muy completos.

Hipervisor/Simulador

  • Hipervisor: Los datos se recogen mediante la ejecución del programa (por lo general) no modificada bajo un hipervisor. Por ejemplo SIMMON.
  • Simulador y Hipervisor: Los datos son recogidos de forma interactiva y selectiva mediante la ejecución del programa sin modificar en el marco de un simulador de conjunto de instrucciones. Por ejemplo IBM OLIVER y SIMON

Véase también

Referencias

  1. Descripción de cursos: Profiling y Tunning en Java. IBM. [1] el 4 de octubre de 2013 en Wayback Machine.
  2. Funcionalidad implementada por profilers. [2]
  3. Profiling. Estratecgias.
  4. Computerworld 19 de septiembre de 1977
  5. gprof: a Call Graph Execution Profiler // Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120-126; doi:10.1145/800230.806987
  6. Amitabh Srivastava and Alan Eustace, "Atom: A system for building customized program analysis tools", 1994 (download) // Proceeding PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation. Pages 196 - 205, doi:10.1145/773473.178260
  7. 20 Years of PLDI (1979–1999): A Selection, Kathryn S. McKinley, Editor

Enlaces externos

  • Prioritizing Software Inspection Results using Static Profiling, Cathal Boogerd and Leon Moonen. 2006. Delft University of Technology.
  • Profiling Deployed Software: Assessing Strategies and Testing Opportunities, Sebastian Elbaum, Member, IEEE, and Madeline Diep. Agosto 2005. IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 31, NO. 8.
  • Software Performance Profiling, Chandra Krintz, Tim Sherwood, Tevfik Bultan. 6-5-2008. UCSB.
  • FUNCIONALIDAD IMPLEMENTADA POR PROFILERS EN PYTHON
  • , IBM.
  •   Datos: Q1138496

análisis, rendimiento, software, ingeniería, software, análisis, rendimiento, comúnmente, llamado, profiling, perfilaje, investigación, comportamiento, programa, ordenador, usando, información, reunida, desde, análisis, dinámico, mismo, objetivo, averiguar, ti. En ingenieria de software el analisis de rendimiento comunmente llamado profiling o perfilaje es la investigacion del comportamiento de un programa de ordenador usando informacion reunida desde el analisis dinamico del mismo El objetivo es averiguar el tiempo dedicado a la ejecucion de diferentes partes del programa para detectar los puntos problematicos y las areas donde sea posible llevar a cabo una optimizacion del rendimiento ya sea en velocidad o en consumo de recursos 1 Un profiler puede proporcionar distintas salidas como una traza de ejecucion o un resumen estadistico de los eventos observados 2 Usualmente el Profiling es utilizado durante el desarrollo de software como metodo para la depuracion y optimizacion de los algoritmos esta practica vista de esta manera es buena pero es vista mas como una actividad interna que suele carecer de objetividad y veracidad cuando no es evaluado por personal realmente especializado y en el entorno adecuado para ello 3 El profiling se puede llevar a cabo en el codigo fuente o sobre un binario ejecutable mediante una herramienta llamada profiler Los profilers pueden clasificarse segun la forma de recopilacion de datos que utilicen pudiendo destacar basados en eventos estadisticos con instrumentacion de codigo y como simulacion 2 Indice 1 Historia 2 Recopilacion de los eventos del programa 3 Salida generada por un profiler 4 Tipos de profilers basados en su salida 5 Granularidad de los datos en los diferentes tipos de profilers 5 1 Profilers basados en eventos 5 2 Profilers estadisticos 5 3 Profilers instrumentadores 5 4 Instrumentacion 5 5 Interpretador de instrumentacion 5 6 Hipervisor Simulador 6 Vease tambien 7 Referencias 8 Enlaces externosHistoria EditarLas herramientas de analisis de rendimiento ya existian en las plataformas IBM S 360 y IBM System 370 de principios de 1970 Generalmente se basaba en un temporizador de interrupciones que se registraban en el programa de palabra de estado Program status word PSW que era un contador de programa y un registro de estado a la vez en estas arquitecturas en intervalos establecidos para detectar hot spots en la ejecucion del codigo 4 Este fue un ejemplo temprano de muestreo en estadistica que es un tipo que se vera a continuacion A principios de 1974 el simulador de conjunto de instrucciones permitio realizar trazas completas y otras funciones de supervision del rendimiento Los programas analizadores de rendimiento en Unix se remontan al menos a 1979 cuando los sistemas Unix incluia la herramienta basica prof que aparece cada funcion y la cantidad de tiempo de ejecucion del programa utilizado En 1982 gprof extendio el concepto a un analisis llamado grafo de llamadas 5 En 1994 Amitabh Srivastava y Alan Eustace de Digital Equipment Corporation publican un articulo describiendo ATOM 6 ATOM es una plataforma para convertir un programa en su propio profiler Es decir en tiempo de compilacion inserta el codigo en el programa a ser analizado Ese codigo introducido produce salidas de datos de analisis Esta tecnica modificar un programa para analizarse a si mismo se conoce como instrumentacion En 2004 tanto el paper de gprof como el de ATOM aparecieron en la lista de los 50 papers mas influyentes de Programming Language Design and Implementation de todos los tiempos 7 Recopilacion de los eventos del programa EditarLos profilers utilizan una amplia variedad de tecnicas para recopilar datos incluyendo interrupciones por hardware instrumentacion de codigo simulador de conjunto de instrucciones hooking y contadores de rendimiento de hardware El profiling es la tecnica mas usada dentro de la ingenieria de rendimiento Salida generada por un profiler EditarLa salida que puede generar un profiler depende del mismo generalmente son las siguientes Un resumen estadistico de los eventos observados un perfil Un resumen de la informacion del perfil se muestra a menudo anotado contra las declaraciones de codigo fuente donde se producen los eventos por lo que el tamano de los datos de medicion es lineal para el tamano del codigo del programa source count 0001 IF X A 0055 0002 THEN DO 0003 ADD 1 to XCOUNT 0032 0004 ELSE 0005 IF X B 0055 Una secuencia de eventos grabados un seguimiento Para programas secuenciales un perfil es generalmente suficiente pero los problemas de performance en programas paralelos que esperan mensajes o temas de sincronismo a menudo dependen de la relacion temporal de los acontecimientos por lo que requieren un seguimiento completo para obtener una comprension de lo que esta sucediendo Una interaccion permanente con el hipervisor vigilancia continua o periodica a traves de la visualizacion en pantalla por ejemplo Esto proporciona la oportunidad de cambiar un rastro o desactivarlo en cualquier momento que desee durante la ejecucion ademas de ver las metricas en curso sobre el programa en ejecucion Ademas proporciona la oportunidad de suspender procesos asincronos en los puntos criticos para examinar las interacciones con otros procesos paralelos en mas detalle Tipos de profilers basados en su salida EditarFlat profilers Calculan el tiempo promedio de las llamadas y no se descomponen los tiempos de llamadas basado en el destinatario o el contexto de la misma Profiler de grafo de llamadas Muestran los tiempos de llamada y las frecuencias de las funciones asi como las cadenas de llamadas en que participan basadas en el destinatario de la llamada En algunas herramientas de contexto completo no se conserva Granularidad de los datos en los diferentes tipos de profilers EditarLos profilers que tambien son propios programas analizar programas especificos mediante la recopilacion de informacion sobre su ejecucion Basado en su granularidad de datos la forma en que los profilers recopilan informacion se clasifican en profilers basados en eventos o estadisticos Ya que los profilers interrumpen la ejecucion del programa para recopilar informacion tienen una resolucion finita en las mediciones de tiempo los cuales se deben tomar como un subconjunto del total de informacion Profilers basados en eventos Editar Los lenguajes de programacion que se listan a continuacion poseen un profiler basado en eventos Java lenguaje de programacion Java Virtual Machine Tools Interface Microsoft NET Python RubyProfilers estadisticos Editar Algunos profilers operan por muestreo un profiler por muestreo prueba el Program counter del programa objetivo a intervalos regulares usando interrupciones del sistema operativo Los profilers de muestreo son tipicamente menos exactos numericamente y especificos pero permiten que el programa de destino funcione cerca de la velocidad maxima Profilers instrumentadores Editar Algunos profilers instrumentan el programa objetivo con instrucciones adicionales para recopilar la informacion necesaria Instrumentar el programa puede causar cambios en el rendimiento del programa que pueden causar resultados inexactos y heisenbugs Instrumentar siempre tendra algun impacto en la ejecucion del programa por lo general siempre es mas lento Sin embargo la instrumentacion puede ser muy especifica y ser controlada cuidadosamente para tener un impacto minimo El impacto sobre un programa en particular depende de la colocacion de puntos de instrumentacion y el mecanismo que se utiliza para capturar la traza El soporte de hardware para capturar la traza significa que en algunos objetivos la instrumentacion puede tener solo una instruccion de maquina El impacto de la instrumentacion a menudo se puede deducir es decir eliminada por sustraccion a partir de los resultados gprof es un ejemplo de un profiler que utiliza tanto la instrumentacion y el muestreo La instrumentacion se utiliza para recopilar informacion de las llamadas y los valores de tiempo real se obtienen mediante muestreo estadistico Instrumentacion Editar Esta tecnica anade efectivamente instrucciones al programa de destino para recopilar la informacion requerida El efecto dependera de que informacion se esta recopilando del nivel de detalles de tiempo notificados y de si se utiliza la generacion de perfiles de bloques basicos junto con la instrumentacion La instrumentacion es clave para determinar el nivel de control y la cantidad de resolucion de tiempo disponible para los profilers A continuacion se enumeran todas las categorias Manual Realizado por el programador por ejemplo anadiendo instrucciones para calcular explicitamente los tiempos de ejecucion simplemente cuente eventos o llamadas a API de medicion como el estandar de medicion de respuesta a aplicaciones Automatica a nivel de codigo Instrumentacion agregada al codigo fuente por una herramienta automatica segun una directiva de instrumentacion Asistida por el compilador Translacion binaria La herramienta agrega instrumentacion a un ejecutable compilado Instrumentacion en tiempo de ejecucion Directamente antes de la ejecucion se instrumenta el codigo La ejecucion del programa esta totalmente supervisada y controlada por la herramienta Inyeccion en tiempo de ejecucion Mas ligera que la instrumentacion en tiempo de ejecucion El codigo se modifica en tiempo de ejecucion para tener saltos a funciones auxiliares Interpretador de instrumentacion Editar Las opciones del interprete de depuracion permiten habilitar la recopilacion de metricas de rendimiento cuando el interprete se encuentra con cada declaracion de destino Los bytecodes tablas de control e interpretes JIT son tres ejemplos que suelen tener un control completo sobre la ejecucion del codigo de destino lo que permite la oportunidad de recolectar datos muy completos Hipervisor Simulador Editar Hipervisor Los datos se recogen mediante la ejecucion del programa por lo general no modificada bajo un hipervisor Por ejemplo SIMMON Simulador y Hipervisor Los datos son recogidos de forma interactiva y selectiva mediante la ejecucion del programa sin modificar en el marco de un simulador de conjunto de instrucciones Por ejemplo IBM OLIVER y SIMONVease tambien EditarPruebas de rendimiento del software Analisis dinamico de softwareReferencias Editar Descripcion de cursos Profiling y Tunning en Java IBM 1 Archivado el 4 de octubre de 2013 en Wayback Machine a b Funcionalidad implementada por profilers 2 Profiling Estratecgias 3 Computerworld 19 de septiembre de 1977 gprof a Call Graph Execution Profiler Proceedings of the SIGPLAN 82 Symposium on Compiler Construction SIGPLAN Notices Vol 17 No 6 pp 120 126 doi 10 1145 800230 806987 Amitabh Srivastava and Alan Eustace Atom A system for building customized program analysis tools 1994 download Proceeding PLDI 94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation Pages 196 205 doi 10 1145 773473 178260 20 Years of PLDI 1979 1999 A Selection Kathryn S McKinley EditorEnlaces externos EditarPrioritizing Software Inspection Results using Static Profiling Cathal Boogerd and Leon Moonen 2006 Delft University of Technology Profiling Deployed Software Assessing Strategies and Testing Opportunities Sebastian Elbaum Member IEEE and Madeline Diep Agosto 2005 IEEE TRANSACTIONS ON SOFTWARE ENGINEERING VOL 31 NO 8 Software Performance Profiling Chandra Krintz Tim Sherwood Tevfik Bultan 6 5 2008 UCSB FUNCIONALIDAD IMPLEMENTADA POR PROFILERS EN PYTHON Realizando profiling de aplicaciones Java en JBoss Descripcion de cursos Profiling y Tunning en Java IBM Datos Q1138496 Obtenido de https es wikipedia org w index php title Analisis de rendimiento de software amp oldid 143927535, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos