stringtranslate.com

Elaboración de perfiles (programación informática)

En ingeniería de software , la creación de perfiles ("perfil de programa", "perfil de software") es una forma de análisis dinámico de programas que mide, por ejemplo, la complejidad espacial (memoria) o temporal de un programa , el uso de instrucciones particulares o la frecuencia. y duración de las llamadas a funciones. Por lo general, la información de creación de perfiles sirve para ayudar a la optimización del programa y, más específicamente, a la ingeniería de rendimiento .

La creación de perfiles se logra instrumentando el código fuente del programa o su forma ejecutable binaria utilizando una herramienta llamada generador de perfiles (o generador de perfiles de código ). Los perfiladores pueden utilizar varias técnicas diferentes, como métodos basados ​​en eventos, estadísticos, instrumentados y de simulación.

Eventos del programa de reuniones

Los perfiladores utilizan una amplia variedad de técnicas para recopilar datos, incluidas interrupciones de hardware , instrumentación de código , simulación de conjuntos de instrucciones , enlaces del sistema operativo y contadores de rendimiento .

Uso de perfiladores

Salida gráfica del generador de perfiles CodeAnalyst

Las herramientas de análisis de programas son extremadamente importantes para comprender el comportamiento del programa. Los arquitectos informáticos necesitan este tipo de herramientas para evaluar qué tan bien funcionarán los programas en nuevas arquitecturas . Los creadores de software necesitan herramientas para analizar sus programas e identificar secciones críticas de código. Los escritores de compiladores a menudo usan tales herramientas para descubrir qué tan bien está funcionando su programación de instrucciones o su algoritmo de predicción de bifurcaciones ...

—  ÁTOMO, PLDI

La salida de un generador de perfiles puede ser:

La información resumida del perfil a menudo se muestra anotada en las declaraciones del código fuente donde ocurren los eventos, por lo que el tamaño de los datos de medición es lineal al tamaño del código del programa.
/* ------------ fuente--------------------------------- recuento */ 0001 SI X = "A" 00550002 ENTONCES HAGA 0003 AÑADIR 1 a XCONTAR 00320004 MÁS0005 SI X = "B" 0055
Para programas secuenciales, un perfil resumido suele ser suficiente, pero los problemas de rendimiento en programas paralelos (espera de mensajes o problemas de sincronización) a menudo dependen de la relación temporal de los eventos, por lo que se requiere un seguimiento completo para comprender lo que está sucediendo.
El tamaño de una traza (completa) es lineal con respecto a la longitud de la ruta de instrucción del programa , lo que la hace poco práctica. Por lo tanto, se puede iniciar un seguimiento en un punto de un programa y terminar en otro punto para limitar la salida.
Esto brinda la oportunidad de activar o desactivar un seguimiento en cualquier punto deseado durante la ejecución, además de ver métricas continuas sobre el programa (aún en ejecución). También brinda la oportunidad de suspender procesos asincrónicos en puntos críticos para examinar las interacciones con otros procesos paralelos con más detalle.

Un generador de perfiles se puede aplicar a un método individual o a la escala de un módulo o programa, para identificar cuellos de botella en el rendimiento al hacer obvio el código de ejecución prolongada. [1] Se puede utilizar un generador de perfiles para comprender el código desde el punto de vista del tiempo, con el objetivo de optimizarlo para manejar diversas condiciones de tiempo de ejecución [2] o varias cargas. [3] Los resultados de la creación de perfiles pueden ser absorbidos por un compilador que proporciona optimización guiada por perfiles . [4] Los resultados de la elaboración de perfiles se pueden utilizar para guiar el diseño y la optimización de un algoritmo individual; el algoritmo de comodines de coincidencia de Krauss es un ejemplo. [5] Los generadores de perfiles están integrados en algunos sistemas de gestión del rendimiento de aplicaciones que agregan datos de creación de perfiles para proporcionar información sobre las cargas de trabajo de transacciones en aplicaciones distribuidas . [6]

Historia

Las herramientas de análisis de rendimiento existían en las plataformas IBM/360 e IBM/370 desde principios de la década de 1970, generalmente basadas en interrupciones de temporizador que registraban la palabra de estado del programa (PSW) en intervalos de temporizador establecidos para detectar "puntos calientes" en la ejecución del código. [ cita necesaria ] Este fue un ejemplo temprano de muestreo (ver más abajo). A principios de 1974, los simuladores de conjuntos de instrucciones permitían el seguimiento completo y otras funciones de seguimiento del rendimiento. [ cita necesaria ]

El análisis de programas basado en perfiles en Unix se remonta a 1973, [7] cuando los sistemas Unix incluían una herramienta básica, profque enumeraba cada función y cuánto tiempo de ejecución del programa utilizaba. En 1982 gprofse amplió el concepto a un análisis completo de gráficos de llamadas . [8]

En 1994, Amitabh Srivastava y Alan Eustace de Digital Equipment Corporation publicaron un artículo que describe ATOM [9] (Herramientas de análisis con OM). La plataforma ATOM convierte un programa en su propio perfilador: en tiempo de compilación , inserta código en el programa a analizar. Ese código insertado genera datos de análisis. Esta técnica (modificar un programa para analizarse a sí mismo) se conoce como " instrumentación ".

En 2004, tanto el gprofartículo como el de ATOM aparecieron en la lista de los 50 artículos más influyentes de PLDI durante el período de 20 años que finalizó en 1999. [10]

Tipos de generador de perfiles basados ​​en la salida

perfilador plano

Los perfiladores planos calculan los tiempos promedio de las llamadas, a partir de las llamadas, y no desglosan los tiempos de las llamadas según el destinatario o el contexto.

Perfilador de gráfico de llamadas

Los perfiladores de gráficos de llamadas [8] muestran los tiempos de llamada y las frecuencias de las funciones, y también las cadenas de llamadas involucradas en función del destinatario. En algunas herramientas no se conserva el contexto completo.

Perfilador sensible a la entrada

Los perfiladores sensibles a la entrada [11] [12] [13] añaden una dimensión adicional a los perfiladores planos o de gráficos de llamadas al relacionar las medidas de rendimiento con las características de las cargas de trabajo de entrada, como el tamaño de entrada o los valores de entrada. Generan gráficos que caracterizan cómo escala el rendimiento de una aplicación en función de su entrada.

Granularidad de datos en tipos de perfiladores

Los perfiladores, que también son programas en sí mismos, analizan los programas objetivo recopilando información sobre su ejecución. Según la granularidad de sus datos y la forma en que los perfiladores recopilan información, se clasifican en perfiladores estadísticos o basados ​​en eventos. Los perfiladores interrumpen la ejecución del programa para recopilar información, lo que puede resultar en una resolución limitada en las mediciones de tiempo, lo que debe tomarse con cautela. Los perfiladores de bloques básicos informan una cantidad de ciclos de reloj de máquina dedicados a ejecutar cada línea de código, o un tiempo basado en sumarlos; Es posible que los tiempos informados por bloque básico no reflejen una diferencia entre aciertos y errores de caché . [14] [15]

Perfiladores basados ​​en eventos

Los lenguajes de programación enumerados aquí tienen perfiladores basados ​​en eventos:

Perfiladores estadísticos

Algunos perfiladores operan mediante muestreo . Un generador de perfiles de muestreo sondea la pila de llamadas del programa de destino a intervalos regulares utilizando interrupciones del sistema operativo . Los perfiles de muestreo suelen ser menos precisos y específicos desde el punto de vista numérico, pero permiten que el programa objetivo se ejecute casi a toda velocidad.

Los datos resultantes no son exactos, sino una aproximación estadística. "La cantidad real de error suele ser más de un período de muestreo. De hecho, si un valor es n veces el período de muestreo, el error esperado es la raíz cuadrada de n períodos de muestreo". [dieciséis]

En la práctica, los perfiladores de muestreo a menudo pueden proporcionar una imagen más precisa de la ejecución del programa de destino que otros enfoques, ya que no son tan intrusivos para el programa de destino y, por lo tanto, no tienen tantos efectos secundarios (como en las memorias caché o en las instrucciones). tuberías de decodificación). Además, como no afectan tanto la velocidad de ejecución, pueden detectar problemas que de otro modo quedarían ocultos. También son relativamente inmunes a sobreevaluar el costo de pequeñas rutinas, frecuentemente llamadas rutinas o circuitos "apretados". Pueden mostrar la cantidad relativa de tiempo transcurrido en modo de usuario versus el modo de kernel interrumpible, como el procesamiento de llamadas al sistema .

Aún así, el código del kernel para manejar las interrupciones implica una pérdida menor de ciclos de CPU, un uso desviado de la caché y es incapaz de distinguir las diversas tareas que ocurren en el código del kernel ininterrumpible (actividad de rango de microsegundos).

El hardware dedicado puede ir más allá de esto: ARM Cortex-M3 y algunos procesadores MIPS recientes con interfaz JTAG tienen un registro PCSAMPLE, que muestrea el contador del programa de una manera verdaderamente indetectable, lo que permite la recopilación no intrusiva de un perfil plano.

Algunos perfiladores estadísticos comúnmente utilizados [17] para Java/código administrado son AQtime [18] de SmartBear Software y CLR Profiler de Microsoft . [19] Esos perfiladores también admiten la creación de perfiles de código nativo, junto con Shark (OSX) de Apple Inc. , [20] OProfile (Linux), [21] Intel VTune y Parallel Amplifier (parte de Intel Parallel Studio ) y Oracle Performance . Analizador , [22] entre otros.

Instrumentación

Esta técnica agrega efectivamente instrucciones al programa de destino para recopilar la información requerida. Tenga en cuenta que instrumentar un programa puede provocar cambios en el rendimiento y, en algunos casos, puede generar resultados inexactos y/o errores . El efecto dependerá de la información que se recopile, del nivel de detalles de tiempo informados y de si se utiliza el perfilado básico de bloques junto con la instrumentación. [23] Por ejemplo, agregar código para contar cada llamada a procedimiento/rutina probablemente tendrá menos efecto que contar cuántas veces se obedece cada declaración. Algunas computadoras tienen hardware especial para recopilar información; en este caso el impacto en el programa es mínimo.

La instrumentación es clave para determinar el nivel de control y la cantidad de tiempo de resolución disponible para los perfiladores.

Instrumentación de intérprete

Hipervisor/simulador

Ver también

Referencias

  1. ^ "¿Cómo encontrar el cuello de botella en el rendimiento en la aplicación de escritorio C#?". Desbordamiento de pila . 2012.
  2. ^ Krauss, Kirk J (2017). "Perfiles de desempeño con un enfoque". Desarrollar para el rendimiento.
  3. ^ "¿Qué es la creación de perfiles de código? Conozca los 3 tipos de perfiladores de código". Consejos, trucos y recursos para desarrolladores de Stackify . Disqus. 2016.
  4. ^ Lawrence, Eric (2016). "Introducción a la optimización guiada por perfiles". pruebaslashplain . WordPress.
  5. ^ Krauss, Kirk (2018). "Coincidencia de comodines: un algoritmo mejorado para Big Data". Desarrollar para el rendimiento.
  6. ^ "Lista de .Net Profilers: 3 tipos diferentes y por qué los necesita todos". Consejos, trucos y recursos para desarrolladores de Stackify . Disqus. 2016.
  7. ^ Manual del programador de Unix, cuarta edición
  8. ^ ab SL Graham, PB Kessler y MK McKusick, gprof: a Call Graph Execution Profiler, Actas del Simposio SIGPLAN '82 sobre construcción de compiladores, Avisos SIGPLAN , vol. 17, núm. 6, págs. 120-126; doi:10.1145/800230.806987
  9. ^ A. Srivastava y A. Eustace, ATOM: un sistema para crear herramientas de análisis de programas personalizadas, Actas de la Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación (PLDI '94), págs. 196-205, 1994; Avisos de ACM SIGPLAN : lo mejor de PLDI 1979-1999 Archivo de la página de inicio, vol. 39, núm. 4, págs. 528-539; doi:10.1145/989393.989446
  10. ^ 20 años de PLDI (1979-1999): una selección, Kathryn S. McKinley , editora
  11. ^ E. Coppa, C. Demetrescu e I. Finocchi, Perfiles sensibles a la entrada, IEEE Trans. Ing. de Software. 40(12): 1185-1205 (2014); doi:10.1109/TSE.2014.2339825
  12. ^ D. Zaparanuks y M. Hauswirth, Perfiles algorítmicos , Actas de la 33ª Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación (PLDI 2012), Avisos de ACM SIGPLAN, vol. 47, núm. 6, págs. 67-76, 2012; doi:10.1145/2254064.2254074
  13. ^ T. Kustner, J. Weidendorfer y T. Weinzierl, Creación de perfiles controlados por argumentos , Actas de Euro-Par 2009 - Talleres de procesamiento paralelo, Apuntes de conferencias sobre informática, vol. 6043, págs. 177-184, 2010; doi:10.1007/978-3-642-14122-5 22
  14. ^ "Sincronización y creación de perfiles: perfiladores de bloques básicos". Archivo OpenStax CNX .
  15. ^ Bola, Thomas; Larus, James R. (1994). "Programas de seguimiento y creación de perfiles de forma óptima" (PDF) . Transacciones ACM sobre lenguajes y sistemas de programación . Biblioteca Digital ACM. 16 (4): 1319-1360. doi :10.1145/183432.183527. S2CID  6897138. Archivado desde el original (PDF) el 18 de mayo de 2018 . Consultado el 18 de mayo de 2018 .
  16. ^ Inexactitud estadística de la salida de gprof Archivado el 29 de mayo de 2012 en la Wayback Machine.
  17. ^ "Perfiladores de C# populares". Gingtage. 2014.
  18. ^ "Perfilador de muestreo: descripción general". Referencia de AQTime 8 . Software Smart Bear. 2018.
  19. ^ Wenzal, Maira; et al. (2017). "Descripción general de la creación de perfiles". Referencia de API no administrada de Microsoft .NET Framework . Microsoft.
  20. ^ "Herramientas de rendimiento". Herramientas para desarrolladores de Apple . Apple, Inc. 2013.
  21. ^ Netto, Zanella; Arnold, Ryan S. (2012). "Evaluar el rendimiento de Linux on Power". IBM DeveloperWorks .
  22. ^ Schmidl, Dirk; Terboven, cristiano; y Mey, Dieter; Müller, Matías S. (2013). Idoneidad de las herramientas de rendimiento para programas de tareas paralelas OpenMP. Proc. 7mo Taller Internacional sobre Herramientas Paralelas para Computación de Alto Rendimiento. págs. 25-37. ISBN 9783319081441.
  23. ^ Carleton, Gary; Kirkegaard, Knud; Sehr, David (1998). "Optimizaciones guiadas por perfiles". Diario del Dr. Dobb .

enlaces externos