2012-08-28 16 views
21

biegnę „perf” w następujący sposób:stosu wywołań w profilera perf

perf record -a --call-graph -p some_pid 

perf report --call-graph --stdio 

Następnie, widzę to:

1.60%  my_binary my_binary    [.] my_func 
      | 
      --- my_func 
       |   
       |--71.10%-- (nil) 
       |   (nil) 
       |   
       --28.90%-- 0x17f310000000a 

nie mogę zobaczyć, które funkcje Kontakt my_func(). Zamiast tego widzę "zero" i "0x17f310000000a". czy robię coś źle? Prawdopodobnie nie jest to problem z informacją o debugowaniu, ponieważ niektóre symbole są wyświetlane, a inne nie są wyświetlane.

Więcej informacji:

  • mam runnning CentOS 6.2 (jądro 2.6.32-220.4.1).
  • perf rpm - perf-2.6.32-279.5.2.el6.x86_64.

Odpowiedz

0

Czy próbowałeś profilowania z Zoom? Może korzystać z perf, niestandardowego sterownika lub oprofilu do zbierania próbek. Jeśli interesujesz się tylko jednym procesem, wypróbuj konfigurację "Czas wątku".

Chciałbym wiedzieć, czy któraś z opcji Zoom jest lepsza/odmienna w uzyskiwaniu informacji o funkcji niż samodzielny perf.

+0

Nie próbowałem Zoom. Miałem nadzieję, że skorzystam z perf, który przychodzi za darmo. Czy Zoom rozwiąże ten problem? Czy korzystanie z perf z Zoom jest łatwe? Czy jest to wyjaśnione w dowolnym miejscu? – erezz

+0

Zoom użyje domyślnie perf dla ostatnich dystrybucji Linuksa (jądro 2.6.38 lub nowsze). Jeśli korzystasz z wersji od 2.6.32 do 2.6.37, możesz ręcznie wybrać sterownik perf z wcześniejszych stron. Stworzyłem niestandardowe konfiguracje profilowania, aby uzyskać dostęp do zdarzeń monitorowania wydajności, ale nie brzmi to tak, jakbyś musiał zrobić coś wyjątkowego. Zwykły Profil Czasu powinien dostarczyć poszukiwanych danych dzwonka i symbolu. – federal

+0

Twój moduł jądra nie rozładowuje się prawidłowo. \ [edit \] Dla tych, którzy wypróbowują Zoom z tego posta i nie mogą wyładować rrnotify, najpierw odmontuj/dev/rrnotify. \ [edit \] Jeśli uruchomisz system w języku innym niż angielski, wyeksportuj LC_ALL = C przed uruchomieniem Zoom; Zoom nie obsługuje poprawnie formatów liczb innych niż angielskie. – FeepingCreature

23

Upewnij się, że skompilowano kod przy użyciu opcji -fno-omit-frame-pointergcc.

+11

lub wypróbuj 'perf record --call-graph dwarf' (który działa bez ramki-ramki) – maxy

+0

instaluje pakiety debuginfo dla kodu, który reprezentujesz, przez większość czasu będziesz potrzebować glibc, tj. Debuginfo-install glibc –

11

Jesteś prawie tam, tracisz opcję -G (możesz potrzebować nowszej perf niż jednego zainstalowanego w systemie):

$ perf report --call-graph --stdio -G 

Od perf help report:

-G, --inverted 
     alias for inverted caller based call graph. 
+0

-G just zmienia kolejność drukowania stosu wywołań w 'perf raporcie'; jeśli nie ma pełnego zestawu wywołań zapisanego do 'perf.data' w czasie' perf record', opcja '-G' nie pomoże. Wystarczy włączyć wskaźniki ramki lub karła (może nie być przeniesione do wersji 2.6.32), aby odszyfrować ramki w czasie 'rekordu': http://www.brendangregg.com/perf.html#StackTraces" Pomijanie wskaźników ramek jest zła optymalizacja kompilatora, która łamie debugger " – osgx

+0

Zauważ, że' -G' na 'perf record' (zamiast' report') wybiera cgroup, na wypadek, gdyby ktoś pomylił błędy dotyczące cgroups. –

Powiązane problemy