2011-08-24 13 views
5

Mamy wiele plików Make-Up GNU. Chciałbym czas każdego celu używanego podczas kompilacji, aby zidentyfikować wąskie gardła wydajności. Czy istnieje narzędzie lub technika, aby to zrobić w wygodny i automatyczny sposób?Jak analizować wydajność GNU Tworzenie plików

Chciałbym przeanalizować te wyniki, aby zachować zakładki na temat współczynnika wydajności jako zmian w budowie i rośnie (ale jest już dość duże i złożone).

Odpowiedz

4

Chyba widziałem tutaj to pytanie przed ...

Można wymienić powłokę z czymś, co wywołuje skorupę ale czasy jego realizacji, i zapisuje wynik gdzieś razem z nazwą docelowej. Każdy cel zostanie zbudowany tylko raz (lub sprawi, że odmówi uruchomienia), więc wszystko, co musisz zrobić, to dodać czasy razem.

Bardzo surowy przykład zamienić

make 

z

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

Jeśli nie chcesz dodawać czasy razem, też trzeba jakoś połączyć polecenia dla każdego celu w jeden dowództwo. Jednym ze sposobów, aby to zrobić, jest wstępne przetwarzanie pliku Makefile, ale z różnych powodów, który nie będzie działał dobrze dla żadnego, ale najprostszego pliku Makefile.

E.g. próbowanie czegoś takiego jak

to bardzo brutalne ukłucie w tym kierunku.

Istnieje wiele alternatywnych podejść, ale myślę, że jedynym prawdziwym rozwiązaniem jest dodanie tej funkcji; GNU make jest napisane w bardzo przenośnym C, więc nie powinno to być trudne.

+0

'SHELL' ... sprytny –

1

Myślenie nieszablonowe: czy przez przypadek marnujesz drogocenne elektrony, używając rekursywnej make, tj. Gdzie reguła cd na podkatalogi i wywołanie make again? To jest twój problem. Nierekursywna marka może być szybsza o 2 rzędy wielkości.

Po szczegóły patrz Recursive make considered harmful

0

Następujące pomoże Ci zrozumieć, jak każda komenda jest uruchomiony, i ile razy z powodu błędnie użytych zmiennych:,: =

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

Jeśli próbujesz do profilu statyczny Makefile, rzucić okiem na make-Profiler:

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

działać jest jak wrapper wokół make, który preprocesuje Makefile, zbiera logi i rysuje wykres wywoławczy z informacją o taktowaniu. Jest to szczególnie przydatne, jeśli tworzysz długotrwały proces przetwarzania danych.