jueves, 5 de diciembre de 2013

Profiling de aplicaciones

Profiling de aplicaciones

El profiling de aplicaciones es un estilo de análisis dinámico de software en el cual una herramienta llamada comunmente profiler recolecta información sobre el tiempo utilizado durante la ejecución de un programa por parte de los componentes a evaluar con el ánimo de identificar demoras o situaciones que puedan representar problemas de rendimiento de la aplicación. De manera general lo que se busca con este tipo de pruebas es identificar los tiempos o el uso de los componentes que conforman nuestra aplicación. 

El análisis realizado al utilizar la información recolectada durante la ejecución de la aplicación en cuestión estará relacionado directamente con el método utilizado para obtener los datos, por lo que el tipo de herramienta utilizada se vuelve de vital importancia para tener una buena idea de la calidad o resolución de los datos obtenidos.  Como regla podríamos decir que a medida que obtengamos mayor exactitud en los datos recolectados, mayor será el impacto en el rendimiento de la aplicación monitoreada. A continuación se describen los tipos más comunes de profilers según la forma utilizada para monitorear la ejecución y se presentan adicionalmente algunas ventajas y desventajas de los mismos.

Basados en eventos

Este tipo de herramientas permiten la verificación de la mayoría de los tipos de evento presentados durante la ejecución de la aplicación objetivo, por ejemplo, el inicio de un llamado a una función o la carga de una biblioteca dinamica.  Dado que la información se relaciona directamente los eventos producidos, este tipo de aplicaciones puede impactar el performance de la aplicación de manera general, por lo que es usual que se utilice en ambientes de desarrollo y pruebas de investigación pero no en escenarios donde afectar el rendimiento del sistema pueda representar un riesgo como en el ambiente de producción.  La resolución de este tipo de herramientas es por lo general mejor que la de otro tipo de profilers por la cantidad de datos recolectados pues no tienen pérdidas significativas de información relacionada con los eventos interceptados.

Profilers estadísticos

Los profilers estadísticos por otra parte funcionan recolectando muestras periódicas, es decir, interrumpiendo la ejecución de la aplicación analizada y verificando la tarea realizada en el momento de la interrupción.  Típicamente este tipo de profilers utilizan llamados a funciones del sistema operativo para suspender los procesos y obtener el valor del program counter o puntero a instrucción (EIP, RIP) periodicamente y realizar un recorrido llamado stackwalk en el que se identifican las funciones en la pila de llamados a partir de la navegación entre cada uno de los frames en la pila del hilo en ejecución.  Numéricamente los valores obtenidos con este tipo de herramientas son de una precisión inferior a los obtenidos con los profilers basados en eventos y esto se debe a que la información analizada corresponde únicamente a la obtenida para los puntos de ejecución muestreados, sin embargo, una cualidad de este tipo de herramientas radica en su bajo impacto en el rendimiento de la aplicación, logrando que el programa objetivo funcione más cerca de su velocidad real.

Profilers de instrumentación

Otro tipo de herramientas abordan el problema de obtención de datos modificando la aplicación que se desea analizar, al código agregado se le denomina instrumentación y dependiendo de los puntos instrumentados (por ejemplo si decidiéramos instrumentar todo el código) dentro de la aplicación puede suponer un gran impacto en el rendimiento de la aplicación medida.  Para que las pruebas sean efectivas y correctas este tipo de herramientas dependen en gran medida de lo específica que sea la instrumentación realizada y no brindan gran flexibilidad sobre el impacto en la aplicación.  Desafortunadamente para la identificación de problemas suele requerir que se tenga una idea de los componentes implicados en la situación para poder instrumentarlos, hecho que no siempre es evidente.

Salida de profilers


Según el tipo de salida generada los profiler peden clasificarse en dos categorías, la primera corresponde a aquellas herramientas que únicamente calculan el tiempo promedio por llamado sin preocuparse de diferenciar entre el tiempo propio del método o función involucrada y el tiempo consumido por los llamados a otros métodos por parte de dicha función, a este tipo de herramientas se les conoce como profilers planos o flat profilers.   La segunda categoría está asociada con las herramientas cuya salida contemplan en su análisis las diferentes rutas del código y el contexto de la ejecución y pueden diferenciar entre el tiempo própio consumido por una función del tiempo consumido por cada uno de sus llamados, a estas herramientas se les conoce como profilers de gráfos de llamadas y son más detallados y elaborados que los profilers planos.

No hay comentarios:

Publicar un comentario

Los comentarios son parte activa de este blog y no serán moderados. Siéntete cómodo al dar tu opinión. Esta es muy importante para nosotros.