Ich verwende perf
von linux-2.6.36-gentoo-r4. Die Datei /proc/sys/kernel/perf_event_paranoid
auf 0 gesetzt, also sollte es von dort keine Probleme geben.
Da eine lang laufende Anwendung, die ich profiliere, manchmal aus unbekannten Gründen abstürzt (ich konnte keine Informationen darüber finden, warum sie nicht mehr funktioniert), wandte ich mich der systemweiten Profilerstellung mit perf-Ereignissen zu.
Die fragliche Anwendung führt parallelisierte numerische Berechnungen durch und verwendet MPI (Message Passing Interface) für die Kommunikation. Vor dem Ausführen der Anwendung (mit mpirun
) Ich habe begonnen, systemweite Profildaten auf one aufzuzeichnen von Knoten wird es ausgeführt mit:
$ perf record -o perf.all.cycles,graph.data -g -e cycles -a &
Nachdem ich festgestellt habe, dass die Anwendung abgestürzt ist, habe ich perf
beendet Aufgabe.
Es war gegangen
$ du -sh perf.all.cycles,graph.data
14G perf.all.cycles,graph.data
14 GB Daten. Leider perf report
unterstützt das -a
nicht wechseln.
Wie kann ich systemweite Profildaten von perf
analysieren Werkzeug ?
Einfach perf report
ausführen erzeugt keine nützliche Ausgabe:
$ perf report -i perf.all.cycles,graph.data
#
# (For a higher level overview, try: perf report --sort comm,dso)
#
Das ist die gesamte Ausgabe von 14 GB Profildaten …
Akzeptierte Antwort:
Wenn Sie die Berechnungen mit MPI verteilen, erhalten Sie mit einem MPI-fähigen Tool sinnvollere Ergebnisse:Bei einer verteilten Anwendung treten möglicherweise Probleme mit einem Lastungleichgewicht auf, bei dem ein MPI-Prozess im Leerlauf ist und darauf wartet, dass Daten von anderen Prozessen kommen . Wenn Sie zufällig genau diesen MPI-Prozess profilieren, ist Ihr Leistungsprofil völlig falsch.
Der erste Schritt besteht also normalerweise darin, das Kommunikations- und Lastausgleichsmuster Ihres Programms herauszufinden und eine Beispieleingabe zu identifizieren, die Ihnen die gewünschte Arbeitslast liefert (z. B. CPU-intensiv auf Rang 0). Zum Beispiel ist mpiP ein MPI Profiling-Tool, das einen sehr vollständigen Bericht über das Kommunikationsmuster erstellen kann, wie viel Zeit jeder MPI-Anruf gedauert hat usw.
Dann können Sie ein Code-Profiling-Tool auf einem oder mehreren ausgewählten MPI-Rängen ausführen. Wie auch immer, mit perf
auf einem einzelnen MPI-Rang ist wahrscheinlich keine gute Idee, da seine Messungen auch die Leistung des MPI-Bibliothekscodes enthalten, was wahrscheinlich nicht das ist, wonach Sie suchen.