El cuento de un hacker
La fecha es 12/02/10. Los días antes de Navidad están goteando y he llegado a un obstáculo importante como programador de Windows. He estado usando AQTime, he probado soñoliento, brillante y con mucho sueño, y mientras hablamos, VTune se está instalando. Intenté usar el perfilador VS2008, y ha sido muy positivo y a menudo insensible. He usado la técnica de pausa aleatoria. He examinado los call-trees. He disparado rastros de funciones. Pero el hecho triste y doloroso del asunto es que la aplicación con la que estoy trabajando tiene más de un millón de líneas de código, con probablemente otro millón de líneas de aplicaciones de terceros.
Necesito mejores herramientas He leído los otros temas. He probado cada perfilador enumerado en cada tema. Simplemente tiene que haber algo mejor que estas opciones chatarra y costosa, o cantidades ridículas de trabajo para casi ninguna ganancia. Para complicar aún más las cosas, nuestro código está muy enhebrado y ejecuta una serie de bucles Qt Event, algunos de los cuales son tan frágiles que se bloquean bajo una fuerte instrumentación debido a retrasos en el tiempo. No me preguntes por qué estamos ejecutando múltiples bucles de eventos. Nadie me lo puede decir.
¿Hay alguna opción más similar a Valgrind en un entorno Windows?
¿Hay algo mejor que la larga franja de herramientas rotas que ya he probado?
¿Hay algo diseñado para integrarse con Qt, tal vez con una visualización útil de eventos en cola?
Una lista completa de las herramientas que probé, con las que fueron realmente útiles en cursiva:
- AQTime: ¡ Bastante bueno! Tiene algunos problemas con la recursividad profunda, pero el gráfico de llamadas es correcto en estos casos y puede usarse para aclarar cualquier confusión que pueda tener. No es una herramienta perfecta, pero vale la pena probarla. Puede satisfacer sus necesidades, y ciertamente fue lo suficientemente bueno para mí la mayor parte del tiempo.
- Ataque de pausa aleatoria en modo de depuración: no hay suficiente información del tiempo.
Una buena herramienta pero no una solución completa. - Estudios paralelos: la opción nuclear. Obstinado, extraño y locamente poderoso. Creo que deberías comenzar la evaluación de 30 días y averiguar si es una buena opción. También es genial.
- Codeanalyst de AMD: maravilloso, fácil de usar, muy propenso a los choques, pero creo que eso es algo medioambiental. Recomiendo probarlo, ya que es gratis.
- Luke Stackwalker: Funciona bien en proyectos pequeños, está tratando de hacer que funcione en los nuestros. Sin embargo, algunos buenos resultados, y definitivamente reemplaza a Sleepy para mis tareas personales.
- PurifyPlus: no es compatible con entornos Win-x64, principalmente Windows 7. De lo contrario, excelente. Varios de mis colegas en otros departamentos lo juran.
- VS2008 Profiler: Produce resultados en el rango de más de 100 gigas en el modo de rastreo de función con la resolución requerida. En el lado positivo, produce resultados sólidos.
- GProf: Requiere que GCC sea incluso moderadamente efectivo.
- VTune: el soporte W7 de VTune limita con el criminal. Por lo demás excelente
- PIN: Necesitaría hackear mi propia herramienta, así que este es un último recurso.
- Sleepy \ VerySleepy: útil para aplicaciones más pequeñas, pero me falla aquí.
- EasyProfiler: no está mal si no le importa un poco de código inyectado manualmente para indicar dónde instrumentar.
- Valgrind: * nix solamente, pero muy bueno cuando estás en ese entorno.
- OProfile: solo Linux.
- Proffy: disparan caballos salvajes.
Herramientas sugeridas que no he probado:
- XPerf:
- Glowcode:
- Devpartner:
Notas: entorno Intel en este momento. VS2008, impulsar bibliotecas. Qt 4+. Y el miserable humdinger de todos ellos: integración Qt / MFC a través de trolltech.
Ahora: casi dos semanas después, parece que mi problema está resuelto. Gracias a una variedad de herramientas, que incluyen casi todo en la lista y algunos de mis trucos personales, encontramos los principales cuellos de botella. Sin embargo, voy a seguir probando, explorando y probando nuevos perfiladores, así como nuevas tecnologías. ¿Por qué? Porque se los debo a ustedes, porque ustedes rockeros Se ralentiza un poco la línea de tiempo, pero todavía estoy muy emocionado de seguir probando nuevas herramientas.
Sinopsis
Entre muchos otros problemas, varios componentes se cambiaron recientemente al modelo de subprocesamiento incorrecto, lo que provocó serios problemas debido al hecho de que el código subyacente ya no era multiproceso. No puedo decir más porque viola mi NDA, pero puedo decirte que esto nunca habría sido encontrado por una inspección casual o incluso por una revisión de código normal. Sin perfiladores, gráficos de llamada y pausas aleatorias en conjunto, todavía estaríamos gritando nuestra furia al hermoso arco azul del cielo. Afortunadamente, trabajo con algunos de los mejores piratas informáticos que he conocido, y tengo acceso a un increíble verso lleno de excelentes herramientas y excelentes personas.
Caballeros, lo aprecio enormemente, y solo lamento no tener suficiente representante para recompensar a cada uno de ustedes con una recompensa. Todavía creo que esta es una pregunta importante para obtener una mejor respuesta que las que tenemos hasta ahora en SO.
Como resultado, cada semana durante las próximas tres semanas, ofreceré la mayor recompensa que pueda pagar, y la otorgaré a la respuesta con la herramienta más agradable que creo que no es de conocimiento común. Después de tres semanas, es de esperar que hayamos acumulado un perfil definitivo de los perfiladores, si me disculpa mi castigo.
Para llevar
Use un perfilador. Son lo suficientemente buenos para Ritchie, Kernighan, Bentley y Knuth. No me importa quién creas que eres. Utiliza un perfilador. Si el que tienes no funciona, busca otro. Si no puede encontrar uno, codifique uno. Si no puede codificar uno, o es un pequeño bloqueo, o simplemente está atascado, use una pausa aleatoria. Si todo lo demás falla, contrata a algunos estudiantes de posgrado para golpear a un perfilador.
Una vista mas larga
Entonces, pensé que sería bueno escribir un poco de retrospectiva. Opté por trabajar extensamente con Parallel Studios, en parte porque en realidad está construido sobre la herramienta PIN. Habiendo tenido relaciones académicas con algunos de los investigadores involucrados, sentí que esto probablemente era una marca de cierta calidad. Afortunadamente, tenía razón. Si bien la GUI es un poco terrible, descubrí que IPS es increíblemente útil, aunque no puedo recomendarlo cómodamente para todos. Críticamente, no hay una forma obvia de obtener recuentos de aciertos a nivel de línea, algo que proporcionan AQT y varios otros perfiladores, y he encontrado muy útil para examinar la tasa de selección de sucursales, entre otras cosas. En la red, también he disfrutado usando AQTime, y he encontrado que su soporte es realmente receptivo. Nuevamente, debo calificar mi recomendación: Muchas de sus características no funcionan tan bien, y algunas de ellas son francamente propensas a fallas en Win7x64. XPerf también tuvo un desempeño admirable, pero es extremadamente lento para los detalles de muestreo necesarios para obtener buenas lecturas en ciertos tipos de aplicaciones.
En este momento, debo decir que no creo que haya una opción definitiva para perfilar el código C ++ en un entorno W7x64, pero ciertamente hay opciones que simplemente no pueden realizar ningún servicio útil.