
Dieses Projekt ist ein KDAB -F & E -Anstrengung, um eine eigenständige GUI für Leistungsdaten zu erstellen. Als erstes Ziel möchten wir eine Benutzeroberfläche wie Kcachegrinde um Linux -Perf liefern. Mit Blick auf die Zukunft beabsichtigen wir, verschiedene andere Leistungsdatenformate unter diesem Dach zu unterstützen.
Hier sind einige Screenshots, die die wichtigsten Funktionen von Hotspot in Aktion zeigen:
Das Hauptmerkmal von Hotspot ist die grafische Visualisierung einer perf.data -Datei.


HINWEIS: Eingebrachte Funktionen haben einen dunkleren Rand als nicht eingedrungene.





Die Zeitlinie ermöglicht das Filtern der Ergebnisse nach Zeit, Prozess oder Faden. Die Datenansichten werden entsprechend aktualisiert.



Sie können perf auch von Hotspot starten, um eine neu gestartete Anwendung zu profilieren oder sich an bereits ausgeführten Prozess (ES) anzuhängen. Berücksichtigen Sie jedoch die unten stehenden Vorbehalte.


Hinweis: Hotspot ist noch nicht auf allen Linux -Verteilungen verpackt. In solchen Fällen oder wenn Sie die neueste Version verwenden möchten, verwenden Sie bitte die AppImage, die in der aktuellen Linux -Distribution in Ordnung funktioniert.
Hotspot ist in AUR (https://aur.archlinux.org/packages/hotspot) erhältlich.
Hotspot ist in Debian (https://packages.debian.org/hotspot) und Ubuntu (https://packages.ubuntu.com/hotspot) erhältlich.
Hotspot-Ebuilds sind in unserem Overlay (https://github.com/kdab/kdab-overlay) erhältlich.
Hotspot ist in Fedora erhältlich (https://packages.fedoraproject.org/pkgs/hotspot/hotspot/).
Sie können entweder zur aktuellsten Version oder zum kontinuierlichen Build gehen. In beiden Fällen finden Sie das Appimage unter "Assets", das Sie herunterladen können. Untar die Appimage -Datei (im Falle der letzten Version), machen Sie sie dann ausführbar und führen Sie sie dann aus.
Bitte verwenden Sie den neuesten Build, um die neueste Version zu erhalten. Wenn es nicht funktioniert, melden Sie bitte einen Fehler und testen Sie die neueste stabile Version.
HINWEIS: Ihre Systembibliotheken oder Präferenzen werden nicht geändert. Wenn Sie Hotspot erneut entfernen möchten, löschen Sie einfach die heruntergeladene Datei. Erfahren Sie hier mehr über Appimage.
Um herauszufinden, wie Sie das Appimage debuggen, siehe Hacking.
Bauen Sie Hotspot aus Source, erhalten Sie die neuesten und größten, aber Sie müssen sicherstellen, dass alle Abhängigkeiten verfügbar sind. Die meisten Benutzer sollten wahrscheinlich Hotspot vom Distropaket -Manager oder als Appimage installieren.
Für alle, die zum Hotspot beitragen oder die neueste Version ohne die detaillierten Appimage -Notizen bei Hacking verwenden möchten.
Notieren Sie einige Daten mit perf . Um Backtraces zu erhalten, müssen Sie den Zwerg -Callgraph -Modus aktivieren:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ] Wenn Sie nun einen Hotspot auf demselben Computer zur Verfügung haben, müssen Sie ihn nur noch starten. Es wird die perf.data -Datei im aktuellen Verzeichnis automatisch geöffnet (ähnlich wie perf report ).
Alternativ können Sie den Pfad zur Datendatei in der Konsole angeben:
hotspot /path/to/perf.data Abhängig von Ihren Anforderungen möchten Sie möglicherweise zusätzliche Befehlszeilenoptionen an Hotspot übergeben. Auf diese Weise können Konfigurationsoptionen für einmalige festgelegte Optionen in der GUI unter "Einstellungen" gefunden und auch Linux-Perf-Datendateien in das kleinere und tragbare Perfordata-Format umwandeln (Informationen dazu finden Sie import / exportieren). Alle Befehlszeilenoptionen werden mit --help angezeigt:
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
Hotspot unterstützt eine sehr leistungsstarke Art der Wartezeitanalyse oder die Off-CPU-Profilerstellung. Diese Analyse basiert auf Kernel -Tracepoints im Linux -Scheduler. Durch die Aufzeichnung dieser Daten können wir den Zeitpunkt finden, in dem Delta, in dem ein Thread nicht auf der CPU ausgeführt wurde, stattdessen außerhalb der CPU ausgeführt wurde. Dafür kann es mehrere Gründe geben, die alle mit dieser Technik gefunden werden können:
read() oder write()mmap() 'ED -Dateidatennanosleep() oder yield()futex() usw.Durch die Nutzung von Kernel -Trace -Punkten im Scheduler ist der Overhead ziemlich überschaubar und wir zahlen nur einen Preis, wenn der Prozess tatsächlich ausgeschaltet wird. Vor allem zahlen wir keinen Preis, wenn z. B. ein MUTEX-Sperrvorgang direkt im Benutzerraum behandelt werden kann.
Um mit Hotspot eine Off-CPU-Analyse durchzuführen, müssen Sie die Daten mit einem sehr spezifischen Befehl aufzeichnen:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >Alternativ können Sie das Kontrollkästchen Off-CPU auf der integrierten Datensatzseite von Hotspot verwenden.
Während der Analyse können Sie dann zwischen der Kostenansicht "Zyklen" für On-CPU-Daten zur Kostenansicht "Off-CPU-Zeit" für die Wartezeitanalyse wechseln. Oft möchten Sie zwischen beiden ändern, z. B. um Orte in Ihrem Code zu finden, die möglicherweise eine weitere Parallelisierung erfordern (siehe auch Amdahlsche Gesetz).
Die Kosten "Zeitplan: Sched_Switch" werden Ihnen ebenfalls angezeigt. Meiner Meinung nach ist dies jedoch weniger nützlich, da es nur die Anzahl der Scheduler -Switches angibt. Die Zeit der Zeit ist für mich oft viel interessanter - und das ist Ihnen in der Metrik "Off -CPU -Zeit" gezeigt.
Wenn Sie in einem eingebetteten System aufzeichnen, sollten Sie die Daten auf Ihrem Entwicklungsgerät mit Hotspot analysieren. Stellen Sie dazu sicher, dass Ihr Sysroot die Debug -Informationen enthält, die zum Abwickeln erforderlich sind (siehe unten). Notieren Sie die Daten in Ihrem eingebetteten System:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real fileEs ist in Ordnung, wenn Ihre eingebettete Maschine eine andere Plattform verwendet als Ihr Host. Führen Sie auf Ihrem Host die folgenden Schritte aus, um die Daten zu analysieren:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataWenn Sie eine Anwendung von einem Pfad außerhalb Ihres Systems manuell eingesetzt haben, tun Sie dies stattdessen:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataWenn Ihre Bewerbung auch Bibliotheken außerhalb Ihres Systems und des Apppaths verwendet, tun Sie Folgendes:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataUnd, schlimmste Fall, wenn Sie auch geteilte Debug-Dateien an nicht standardmäßigen Standorten verwenden, tun Sie dies:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.data Das Format perf.data Datei ist nicht in sich geschlossen. Um dies zu analysieren, benötigen Sie Zugriff auf die ausführbaren und Bibliotheken des profilierten Prozesses zusammen mit Debug -Symbolen. Dies macht es unhandlich, solche Dateien über Maschinen zu teilen, z. B. die Hilfe eines Kollegen, um ein Leistungsproblem zu untersuchen, oder für Fehlerberichterstattungszwecke.
Mit Hotspot können Sie die analysierten Daten exportieren, die dann vollständig in sich geschlossen sind. Diese Funktion ist über die Menüaktion "Datei> speichern" zugegriffen. Die Daten werden dann in einer in sich geschlossenen *.perfparser Datei gespeichert. Um die Daten erneut in Hotspot zu importieren, öffnen Sie diese Datei einfach anstelle der ursprünglichen perf.data -Datei direkt.
Als Alternative können Sie auch den Export von der Befehlszeile (ohne GUI) durchführen, die auch mit automatisierten Builds verwendet werden können) mit der Option --exportTo .
Hinweis: Das Dateiformat ist noch nicht stabil. Bedeutung von Daten, die von einer Version von Hotspot exportiert werden, kann nur durch dieselbe Version zurückgelesen werden. Dieses Problem wird in Zukunft gelöst, wenn die Zeit zulässt.
Hotspot zeigt derzeit nur den Namen der TracePoints in der Zeitleiste an.


Hotspot enthält einen Disassembler, der Ihnen die Kosten pro Anweisung anzeigen kann. Der Disassembler verwendet Farben, um anzugeben, welche Montagelinien der Quellcodelinie entsprechen. Für eine leichtere Navigation können Sie einfach auf eine Zeile klicken und die andere Ansicht wird darauf springen. Sie können Funktionsaufrufen mit einem Doppelklick befolgen. In der SourceCode -Ansicht können Sie Strg+F drücken oder das Suchsymbol drücken, um ein Suchfenster zu öffnen.
Wenn Sie über die Quellen in einem verschiedenen Verzeichnis verfügen, können Sie --sourcePaths oder die Einstellungen, verwenden, um den Disassembler zu sagen, dass Sie dort nach dem Quellcode suchen.
Wenn irgendetwas oben einbricht und die Ausgabe weniger verwendbar ist als perf report , melden Sie bitte ein Problem auf GitHub. Trotzdem gibt es einige bekannte Probleme, über die Menschen stolpern können:
Das Abwickeln des Stapels, um eine Backtrace zu produzieren, ist eine dunkle Kunst und kann in vielerlei Hinsicht schief gehen. Hotspot stützt sich auf perfparser (siehe unten), was wiederum auf libdw von Elfutils basiert, um den Stapel abzuwickeln. Dies funktioniert die meiste Zeit recht gut, kann aber trotzdem schief gehen. Vor allem wird das Abwickeln fehlschlagen, wenn:
perf.data -Datei verwiesen wird--debugPaths <paths> : Verwenden Sie dies, wenn Sie Debug-Dateien an nicht standardmäßigen Standorten geteilt haben--extraLibPaths <paths> : Verwenden Sie dies, wenn Sie Bibliotheken seit der Aufnahme an einen anderen Ort verschoben haben--appPath <paths> : Dies ist eine Art Kombination der oben genannten zwei Felder. Der Pfad wird rekursiv durchquert und sucht nach Debug -Dateien und Bibliotheken.--sysroot <path> : Verwenden Sie dies, wenn Sie versuchen, eine Datendatei zu inspizieren, die auf einer eingebetteten Plattform aufgezeichnet wurde-O2 -g aufgerufen. Sie müssen den perf record wiederholen Standardmäßig kopiert perf record nur einen Teil des Stapels in die Datendatei. Dies kann zu Problemen mit sehr tiefen Anrufstapeln führen, die irgendwann abgeschnitten werden. Dieses Problem wird die Top-Down-Anrufbäume in Hotspot brechen, wie sie in der Top-Down-Ansicht oder im Flame-Diagramm visualisiert sind. Um dies zu beheben, können Sie versuchen, die Stapel -Dump -Größe zu erhöhen, dh:
perf record --call-graph dwarf,32768
Beachten Sie, dass dies die Größe der perf.data -Dateien drastisch erhöhen kann - verwenden Sie sie mit Sorgfalt. Schauen Sie sich auch die man perf record an.
Bei einigen Szenarien werden rekursive Funktionsaufrufe einfach nicht abgewickelt. Siehe auch #93
Hotspot unterstützt das Herunterladen von Debug -Symbolen über Debuginfod. Dies kann aktiviert werden, indem entweder Download -URLs in den Einstellungen hinzugefügt oder Hotspot mit DEBUGINFOD_URLS in der Umgebung gestartet werden.
Im Vergleich zu perf report verpasst Hotspot viele Funktionen. Einige davon sollen in Zukunft gelöst werden. Andere können möglicherweise nie implementiert werden. Beachten Sie jedoch, dass die folgenden Funktionen derzeit in Hotspot nicht verfügbar sind:
--itrace , --mem-mode , --branch-stack und --branch-history , werden nicht unterstützt Es ist keine gute Idee, Hotspot mit sudo oder als root -Benutzer zu starten. Siehe zB Bearbeiten von Dateien als Root für einen Artikel zu dieser Angelegenheit. Ausgabe Nr. 83 ist auch in diesem Kontakt relevant.
Ohne Superuser -Rechte sehen Sie jedoch Fehlermeldungen wie die folgenden Funktionen bei der Verwendung von Hotspots Datensatzfunktion:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
Um diese Einschränkung zu verarbeiten, kann Hotspot mit erhöhten Privilegien Perf selbst laufen.
Der aktuelle Datenexport ist auf ein Format beschränkt, das nur von Hotspot derselben Version zurückgelesen werden kann. Dies macht die Interop mit anderen Visualisierungstools unmöglich. Dies ist bekannt und wird in Zukunft verbessert. Vor allem die Unterstützung für den Export von Web -Zuschauern wie Perfetto oder der Mozilla -Profiler ist geplant, aber noch nicht implementiert. Patches willkommen!
Dieses Projekt nutzt das exzellente Dienstprogramm perfparser das das QT Company für ihre QT Creator IDE erstellt hat. Wenn Sie bereits QT Creator verwenden, sollten Sie den integrierten CPU -Nutzungsanalysator nutzen.
Hotspot ist unter der GPL V2+lizenziert. Weitere Informationen finden Sie unter Lizenz.gpl.txt oder wenden Sie sich an [email protected], wenn Sie nicht klar sind.