2011-08-24 13 views
5

Tenemos una gran cantidad de archivos Make de GNU. Me gustaría cronometrar cada objetivo utilizado durante la construcción para identificar los cuellos de botella de rendimiento. ¿Hay alguna herramienta o técnica para hacer esto de una manera conveniente y automática?Cómo analizar el rendimiento de GNU Make files

Me gustaría analizar estos resultados para vigilar el factor de rendimiento a medida que la construcción cambia y crece (pero ya es bastante grande y compleja).

Respuesta

4

creo que he visto esta pregunta aquí antes ...

Puede reemplazar la cáscara con algo que llama a una concha, pero los horarios de su ejecución, y escribe el resultado en algún lugar junto con el nombre de destino. Cada objetivo se compilará solo una vez (o make se negará a ejecutarse), así que todo lo que tendrá que hacer es agregar los tiempos.

ejemplo muy crudo: sustituir

make 

con

make SHELL='echo [email protected]: && time sh' 

Si no desea agregar los momentos juntos, también tiene que unirse de alguna manera los comandos para cada objetivo en una sola mando. Una forma de hacerlo es preprocesando el Makefile, pero por varias razones, eso no va a funcionar bien para cualquiera de los archivos Makefiles, excepto el más simple.

E.g. intentando algo así como

perl -0pe 's/([^:])\s*\n\t[@-]?/$1; /g' Makefile | make -f - SHELL='echo [email protected]: && time sh' 

es una puñalada muy cruda en esa dirección.

Existen varios enfoques alternativos, pero creo que la única solución real es agregar esta función; GNU make está escrito en C muy portátil, por lo que no debería ser muy difícil de hacer.

+0

'SHELL' ... inteligente –

1

Pensando fuera de la caja: ¿estás perdiendo electrones preciosos al usar recursive make, es decir, dónde las reglas se convierten en subdirectorios y se vuelve a llamar? Entonces ese es tu problema. Una marca no recursiva puede ser más rápida en 2 órdenes de magnitud.

Para más detalles ver Recursive make considered harmful

0

El siguiente le ayudará a entender cómo cada comando se está ejecutando, y cuántas veces a causa de las variables utilizadas erróneamente:,: =

make SHELL='/bin/sh -x' 
0

Si usted está tratando de perfil una estática Makefile, echar un vistazo a maquillaje perfilador:

https://github.com/gojuno/make-profiler

Se acto es como un contenedor alrededor de make que preprocesiona Makefile, recopila registros y dibuja un gráfico de llamadas con información de tiempo. Es especialmente útil si está creando una canalización de procesamiento de datos de larga duración.

Cuestiones relacionadas