2016-07-04 18 views
1

Ich bin Tring perf version 3.0.8 zu verwenden, um mein eingebettetes System Linux kernel version 3.0.8 zu profilieren.Perf Tool Linux - Kein Call-Graph

Ich übersetze Tools/Perf mit Zlib und Elfutils.

Um sich mit diesem Tool vertraut zu machen, verwende ich ein einfaches Quicksort-Beispiel, das mit der Option -g kompiliert wurde.

Ich laufe perf record -F 99 -g -- ./qsort (kopiert aus dem Beispiel) und dann perf report --stdio, um meine Profilergebnisse zu sehen.

Dies ist eine Momentaufnahme der perf report -g --stdio Ausgabe:

No kallsyms or vmlinux with build-id f41dfb5606beda1d75171db69f1e9466cb4868ba was found 
[hi3518_dsu] with build id f41dfb5606beda1d75171db69f1e9466cb4868ba not found, continuing without symbols 
No kallsyms or vmlinux with build-id a0f9a05faf6bcfb72282a03e048b47e8a8c0f2ec was found 
[hi3518_tde] with build id a0f9a05faf6bcfb72282a03e048b47e8a8c0f2ec not found, continuing without symbols 

# Events: 256 cpu-clock 
    # 
    # Overhead Command  Shared Object     Symbol 
    # ........ ....... ................. ...................... 
    # 
     96.88% qsort qsort    [.] partition 
     0.78% qsort [kernel.kallsyms] [k] __do_softirq 
     0.39% qsort [kernel.kallsyms] [k] __wake_up_sync_key 
     0.39% qsort [kernel.kallsyms] [k] get_page_from_freelist 
     0.39% qsort [kernel.kallsyms] [k] __memzero 
     0.39% qsort [kernel.kallsyms] [k] div_s64_rem 
     0.39% qsort [hi3518_tde]  [k] 0x58 
     0.39% qsort [hi3518_dsu]  [k] 0x8154 

Wie man dort sehen kann, ist überhaupt nicht aufrufen-Spur. Ich bin wirklich interessiert, tief in meinem System zu studieren und ohne eine Anrufverfolgung sind diese Ergebnisse nutzlos.

Antwort

0

Sie könnten etwas Glück mit dem -fno-omit-frame-pointer Flag beim Kompilieren des Programms, das Sie versuchen zu profilieren. Ich habe auch Probleme, Call-Graphen mit perf auf einem eingebetteten ARM-System arbeiten.

+0

Bereits erledigt. Es funktioniert nicht. Also habe ich es mit einem anderen Board versucht (anderes SoC und eine neuere Kernel-Version) und magisch funktioniert es gut. Offensichtlich ist das Problem in meiner Leistung. Wahrscheinlich ist meine Kernel-Version sehr sehr alt ... Aber auch ohne '-g'-Option kann ich die Ergebnisse der Performance-Analyse lesen und verwenden. –

0

Ich fand eine Lösung. Führen Sie perf --call-graph dwarf -- ./qsort aus Stellen Sie sicher, dass Sie das Programm mit Zwerg-Debugsymbolen (-g, -ggdb oder -gdwarf-Flag) kompiliert haben. Außerdem müssen Sie möglicherweise Debugsymbole für alle Bibliotheken installieren, die Sie auf Ihrem System verwenden. https://fedoraproject.org/wiki/StackTraces zeigt, wie Sie Debug-Symbol-Pakete für Fedora installieren.

Wenn der perf-Befehl mit --call-graph dwarf fehlschlägt, müssen Sie möglicherweise perf mit libunwind zusätzlich zu elfutils kompilieren.

0

Wahrscheinlich ist meine Pref-Version wirklich alt (und/und das Kernel-Tool). Ich versuchte es mit einem anderen SoC (mit einem neueren Kernel und Perf-Tool) und der Callstack funktioniert ordnungsgemäß. Aber auch ohne diese Funktion nutze ich dieses Tool gewinnbringend.