2009-12-09 24 views
12

Jakie są najlepsze narzędzia do profilowania aplikacji C/C++ w * nix?Profilowanie wydajności w systemie Linux

(Mam nadzieję, że profilować serwer będący połączeniem (blokowania) pliku IO, epolem dla sieci i fork()/execv() dla pewnego podnoszenia ciężkich ładunków, ale ogólna pomoc i bardziej ogólne narzędzia są również docenione.)

Czy można uzyskać duży obraz systemu RAM, procesora, sieci i dysku w jednym przeglądzie i wiercić w nim?

Było dużo gadania na temat kernel lists o takich rzeczach jak perf timechart, ale nie znalazłem jeszcze nic podobnego w Ubuntu.

Odpowiedz

1

skompilować z -pg, uruchom program, a następnie użyć gprof

Kompilacja (i linkami) z -pg dodaje kod profilowania i profilowania biblioteki do pliku wykonywalnego, który następnie tworzy plik o nazwie gmon.out że zawiera informacje o taktowaniu. gprof wyświetla grafy połączeń i ich (bezwzględne i względne) taktowania.

Aby uzyskać szczegółowe informacje, patrz man gprof.

+0

Problem z gprof polega na tym, że nie działa on w trybie wielowątkowym i ma problemy z dynamicznymi bibliotekami. –

1

Jeśli można przyjąć wniosek do FreeBSD, Mac OS X lub Solaris można użyć dtrace, chociaż dtrace jest narzędziem zorientowane analityk - czyli trzeba poprowadź go - przeczytaj: skrypuj. Nic innego nie zapewni ci poziomu ziarnistości, jakiego potrzebujesz; Dtrace nie może po prostu profilować opóźnień wywołań funkcji w user-land; może również podążać za przełączeniem kontekstu do jądra.

0

Odpowiedź FOSS, jak już wspomniano, polega na kompilacji za pomocą -pg, a następnie użyciu gprof do analizy wyników. Jeśli jest to produkt/projekt, który uzasadnia wyrzucenie pieniędzy, chciałbym również skorzystać z narzędzia IBM/Rationals Quantify, ponieważ ułatwia to przeglądanie danych profilowania, przechodzenie do poziomu linii lub patrzenie na nie w odległości 10000 stóp. "poziom.

Oczywiście może istnieć przeglądarka dostępna dla gprof, która może zrobić to samo, ale nie jestem tego świadomy.

1

oprofile może Cię zainteresować. Ubuntu powinien mieć wszystkie potrzebne pakiety.

2

Kanonicznym przykładem pełnego narzędzia profilowania systemu (dla systemu Solaris, OS X, FreeBSD) jest DTrace. Ale nie jest jeszcze w pełni dostępny na Linuksie (możesz wypróbować here, ale strona jest dla mnie niedostępna, a ja sam tego nie próbowałem). Istnieje wiele narzędzi, w różnych stanach przydatności, do wykonywania pełnego profilowania systemu i profilowania jądra w systemie Linux.

Można rozważyć dochodzenie:

1

Jak wspomniano w zaakceptowanej odpowiedzi, Zoom może zrobić niesamowite rzeczy. Użyłem go, aby zrozumieć zachowanie wątku, aż do optymalizacji zespołu generowanego przez kompilator.

2

Allinea MAP to profiler dla C++ i innych rodzimych języków w systemie Linux. Jest komercyjnie wspierany przez mojego pracodawcę. Ma interfejs graficzny i profilowanie na poziomie linii źródłowej oraz kod profili z niemal zerowym spowolnieniem, co czyni go bardzo dokładnym, gdy czas innych podsystemów jest istotny - na przykład w przypadku IO.

Callgrind był użyteczny i dokładny - ale spowolnienie było ~ 5x, więc mogłem wykonywać tylko mniejsze przebiegi. Może on faktycznie zliczać ile razy funkcja jest wywoływana, co jest przydatne do zrozumienia zachowania asymptotycznego.

Powiązane problemy