Profilowanie (ewentualnie I / O) procesu w celu zmniejszenia opóźnienia

Chcę poprawić wydajność konkretnej metody w większej aplikacji.

Celem jest poprawa opóźnienia (czas zegara ściennego spędzonego w określonej funkcji), a nie (koniecznie) obciążenia systemu.

Wymagania:

Ponieważ spodziewam się, że wiele opóźnień będzie wynikać z operacji we / wy, weź pod uwagę czas oczekiwania / zablokowania (innymi słowy: spójrz na czas zegara ściennego zamiast czasu procesora)Ponieważ program robi znacznie więcej niż fragment, który próbuję zoptymalizować. Musi istnieć sposób na programowe uruchamianie / zatrzymywanie profilowania lub filtrowanie danych wyjściowych w celu pokazania tylko czasu między wejściem a wyjściem z funkcji, które optymalizuję.Profilowanie na poziomie metody jest akceptowalne (jeśli można to zrobić na poziomie instrukcji, nawet lepiej. Jeśli tylko profiluje wywołania systemowe, to prawdopodobnie nie wystarczy)To jest dla projektu hobbystycznego, więc drogie narzędzia nie są opcjąOprzyrządowanie (funkcje-instrumentu) jest dopuszczalneKrytyczny fragment kodu, który mnie interesuje, jest trudny do ręcznego przerwania (ponieważ jest już stosunkowo szybki i trudny do realistycznego wywołania w pętli), więc niezbędna jest pewnego rodzaju automatyzacja.

Narzędzia odrzucone do tej pory:

gprof, oprofile, callgrind (wymaganie 1)buiding coś niestandardowego przy użyciu getrusage (wymaganie 1)poormansprofiler.org (wymaganie 2)strace -T, dtrace,http://perf.wiki.kernel.org (wymagania 2 i 3)VTune, Zoom (wymaganie 4)ręczne pobieranie próbek ze stosu połączeń (wymaganie 6)google-perftools (powinien być w stanie zmierzyć czas na ścianie, ale wydaje się, że nie działa w moim przypadku, prawdopodobnie z powodu zakłóceń SIGALRM).systemtap (moje jądro nie jest załatane tak, aby zawierało utrace)

Inne opcje, których jeszcze nie oceniłem:

cprof (nie buduje tutaj z pudełka, wydaje się tylko i386)ręczne wstawianie punktów śledzenia (np. za pomocą lttng)

Chciałbym usłyszeć o:

inne opcjemoże zbyt szybko wyrzuciłem jakieś narzędzie?czy opcje, których jeszcze nie oceniłem, mają szansę działać, a jeśli tak, to jak najlepiej to zrobić.

W końcu zdecydowałem się na:

budowanie czegoś niestandardowego przy użyciu funkcji -finstrument-siebie na podstawiehttp://balau82.wordpress.com/2010/10/06/trace-and-profile-function-calls-with-gcc/

Ślad stworzony przez to surowe narzędzie jest trudny do zinterpretowania i mogę łatwo wyobrazić sobie niektóre narzędzia do dalszego przetwarzania jego danych wyjściowych, czyniąc go nieskończenie bardziej użytecznym. Jednak na razie zrobiło to to dla mnie, więc odkładam ten projekt na później;).

questionAnswers(3)

yourAnswerToTheQuestion