performance profiler profiling aqtime

performance - ¿Cómo lo hace AQTime?



profiler profiling (4)

El ya desaparecido TurboPower también tenía una gran herramienta de análisis y perfil para Delphi llamada Sleuth QA Suite. Lo encontré mucho más simple que AQ Time, pero también es mucho más fácil obtener resultados significativos. Podría valer la pena intentar localizarlo: ¿eBay, tal vez?

He estado probando el rendimiento y el perfil de memoria AQTime para ver si vale la pena gastar esos grandes $$$ para mi aplicación Delphi.

Lo que me sorprende es cómo puede proporcionarle seguimiento de rendimiento de nivel de línea de origen (que incluye la cantidad de veces que se ejecutó cada línea y la cantidad de tiempo que tomó) sin modificar el código fuente de la aplicación y sin agregar una cantidad de tiempo desorbitada al ejecución de depuración

La forma en que lo hacen de manera tan eficiente me hace pensar que podría haber algunas técnicas / tecnologías utilizadas aquí que no conozco y que sería útil conocer.

¿Sabes qué tipo de métodos usan para capturar la ejecución línea por línea sin cambios de código?

¿Existen otras herramientas de creación de perfiles que también realizan una verificación línea por línea no invasiva y, de ser así, utilizan las mismas técnicas?


No conozco Delphi en particular, pero un depurador de aplicaciones C puede hacer un perfil línea por línea con relativa facilidad: puede cargar el código y asociar cada ruta del código con un bloque de código. Entonces puede romper todas las instrucciones de salto condicional y solo mirar y ver qué camino del código se toma. Los depuradores como gdb pueden funcionar de manera relativamente eficiente porque funcionan a través del kernel y no modifican el código, solo se informan cuando se ejecuta cada línea. Si algo hace que el bloque salga temprano (longjmp), el depurador puede conectarlo y averiguar qué tan lejos llegó a los bloques cuando sucedió e incrementar solo esas líneas.

Por supuesto, aún sería difícil codificar, pero cuando digo fácilmente quiero decir que puedes hacerlo sin perder el tiempo en cada una de las instrucciones para actualizar un contador.


Esto es solo una especulación, pero tal vez AQtime se basa en una tecnología similar a Microsoft Detours .

Detours es una biblioteca para instrumentar funciones Win32 arbitrarias en máquinas x86, x64 e IA64. Desvíos intercepta las funciones de Win32 volviendo a escribir el código en memoria para las funciones de destino.


Creé un generador de perfiles de código abierto para Delphi, que hace lo mismo: http://code.google.com/p/asmprofiler/

No es perfecto, pero es gratis :-). También usa la técnica Detour. Almacena todas las llamadas (debe establecer manualmente qué funciones desea que sean de perfil), por lo que puede crear un árbol de historial de llamadas exacto, incluido un gráfico de tiempo (!).