Este artículo necesita citas adicionales para su verificación . ( enero de 2009 ) |
Parte de una serie sobre |
Desarrollo de software |
---|
En ingeniería de software , la creación de perfiles ("creación de perfiles de programas", "creación de perfiles de software") es una forma de análisis dinámico de programas que mide, por ejemplo, el espacio (memoria) o la complejidad 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 del rendimiento .
La creación de perfiles se logra mediante la instrumentación del código fuente del programa o su forma binaria ejecutable utilizando una herramienta llamada perfilador (o perfilador de código ). Los perfiladores pueden utilizar varias técnicas diferentes, como métodos basados en eventos, estadísticos, instrumentados y de simulación.
Los perfiladores utilizan una amplia variedad de técnicas para recopilar datos, incluidas las interrupciones de hardware , la instrumentación de código , la simulación de conjuntos de instrucciones , los enlaces del sistema operativo y los contadores de rendimiento .
Las herramientas de análisis de programas son extremadamente importantes para comprender el comportamiento del programa. Los arquitectos informáticos necesitan estas herramientas para evaluar el rendimiento de los programas en las nuevas arquitecturas . Los escritores 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 averiguar qué tan bien se está desempeñando su programación de instrucciones o su algoritmo de predicción de rama ...
- ATOM, PLDI , '94
La salida de un generador de perfiles puede ser:
/ * ------------ fuente ------------------------- recuento * / 0001 SI X = "A" 0055 0002 ENTONCES HACER 0003 AÑADIR 1 a XCOUNT 0032 0004 ELSE 0005 SI X = "B" 0055
Un generador de perfiles se puede aplicar a un método individual oa la escala de un módulo o programa, para identificar los cuellos de botella en el rendimiento haciendo que el código de larga ejecución sea obvio. [1] Se puede usar un generador de perfiles para comprender el código desde el punto de vista del tiempo, con el objetivo de optimizarlo para manejar varias condiciones de tiempo de ejecución [2] o varias cargas. [3] Los resultados de la generación de perfiles pueden ser ingeridos 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 perfiladores están integrados en algunas aplicaciones de gestión del rendimiento.sistemas que agregan datos de creación de perfiles para proporcionar información sobre las cargas de trabajo de transacciones en aplicaciones distribuidas . [6]
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) a intervalos de temporizador establecidos para detectar "puntos calientes" en la ejecución de código. [ cita requerida ] 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 supervisión del rendimiento. [ cita requerida ]
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 prof
, que enumeraba cada función y cuánto tiempo de ejecución del programa usaba. En 1982 gprof
amplió el concepto a un análisis de gráfico de llamadas completo . [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 generador de perfiles: en el momento de la compilación , inserta el 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, los artículos gprof
y ATOM aparecieron en la lista de los 50 artículos PLDI más influyentes para el período de 20 años que finalizó en 1999. [10]
Los perfiladores planos calculan los tiempos de llamada promedio, a partir de las llamadas, y no desglosan los tiempos de llamada según el destinatario o el contexto.
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.
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 se escala el rendimiento de una aplicación en función de su entrada.
Los perfiladores, que también son programas en sí mismos, analizan los programas objetivo mediante la recopilación de información sobre su ejecución. En función de la granularidad de sus datos, de cómo 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, que deben tomarse con cautela. Los perfiladores de bloques básicos informan de un número de ciclos de reloj de la máquina dedicados a ejecutar cada línea de código, o un tiempo basado en sumarlos; los tiempos informados por bloque básico pueden no reflejar una diferencia entre aciertos y errores de caché . [14] [15]
Los lenguajes de programación enumerados aquí tienen perfiladores basados en eventos:
Algunos perfiladores operan por 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 numéricamente, pero permiten que el programa de destino se ejecute casi a la máxima 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 la memoria caché o en la instrucción decodificación de tuberías). Además, dado que no afectan tanto a la velocidad de ejecución, pueden detectar problemas que de otro modo estarían ocultos. También son relativamente inmunes a la sobreevaluación del costo de las rutinas pequeñas, comúnmente llamadas rutinas o ciclos "ajustados". Pueden mostrar la cantidad relativa de tiempo empleado en el modo de usuario frente al 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, uso desviado de la caché y es incapaz de distinguir las diversas tareas que ocurren en el código del kernel ininterrumpido (actividad de rango de microsegundos).
El hardware dedicado puede ir más allá: ARM Cortex-M3 y algunos procesadores MIPS recientes La interfaz JTAG tiene un registro PCSAMPLE, que muestra el contador del programa de una manera realmente indetectable, lo que permite la recopilación no intrusiva de un perfil plano.
Algunos de uso común [17] perfiladores estadísticos para Java / código administrado son SmartBear Software 's AQtime [18] y Microsoft ' s CLR Profiler . [19] Estos perfiladores también soportan perfiles de código nativo, junto con Apple Inc. 's tiburón (OSX), [20] Oprofile (Linux), [21] Intel VTune y paralela amplificador (parte de Intel Parallel Studio ), y Oracle Performance Analizador , [22] entre otros.
Esta técnica agrega efectivamente instrucciones al programa de destino para recopilar la información requerida. Tenga en cuenta que la instrumentación de un programa puede provocar cambios en el rendimiento y, en algunos casos, puede dar lugar a resultados inexactos y / o errores . El efecto dependerá de la información que se recopile, del nivel de detalles de sincronización informados y de si se utiliza el perfil de bloque básico junto con la instrumentación. [23] Por ejemplo, agregar código para contar cada procedimiento / llamada de 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.