Linux-Profilerstellung mit Performance Analyzer

Linux-Profilerstellung mit Performance Analyzer


Kollegen, ich finde es nützlich, über einen praktischen und kostenlosen Code-Profiler für Linux / Solaris zu sprechen. Es ist Teil des Sun / Oracle Developer Studio-Pakets [1]. Meiner Meinung nach sind andere Teile dieser Entwicklungsumgebung etwas nutzlos, aber der Profiler namens Performance Analyzer ist sehr erfolgreich. Die Analyse der Ergebnisse ist einfach, übersichtlich und bequem angeordnet. Meiner Meinung nach ist der Profiler vielen Linux-Gegenstücken immer noch überlegen. Mit diesem Tool scheint die Verwendung von gprof eine seltsame Laune und Zeitverschwendung zu sein.


Wenn Sie nicht vorhaben, Performance Analyzer sofort zu verwenden, können Sie nicht weiter lesen. Denken Sie daran, dass es ein solches Produkt gibt. Wenn es interessant ist, einen Blick darauf zu werfen, dann willkommen.


Der Profiler besteht aus zwei Teilen: Sammeln - Startet die Anwendung und sammelt Daten, zeichnet die Ergebnisse des Experiments auf. Der Analysator ist eine grafische Oberfläche, die Experimentdaten liest und Möglichkeiten zur bequemen Analyse von Hotspots und Funktionsaufrufbäumen bietet.


Kurz zu den wichtigen Vor- und Nachteilen:


Vorteile:


  • kostenlos;
  • erfordert keine Neukompilierung des Codes und Verknüpfung der ausführbaren Datei;
  • arbeitet mit Gnu und Sun Compilern;
  • ändert die Ausführungszeit des Programms beim Sammeln von Daten nicht;
  • Es hat eine intuitive grafische Oberfläche;
  • Ausgestattet mit erweiterter Befehlszeilenschnittstelle für die automatische Analyse;
  • ermöglicht es Ihnen, das Ergebnis des Compilers schnell anzuzeigen;
  • hat einen statistischen Profiler, der selbst für nicht besonders mühsame Teile genau genug ist;
  • bequeme Analyse und vergleichende Analyse mehrerer Programmstarts;
  • verzerrt die Ergebnisse nicht.

Einige Nachteile:


  • Die grafische Oberfläche ist in Java geschrieben. Manchmal stürzt es beim Booten ab, ein einfacher Neustart hilft;
  • Es wird nur die CPU-Zeit gemessen. Wenn der Kernel repariert werden kann, kann diese Einschränkung aufgehoben werden.
  • In Multithread-Anwendungen ist die von der Funktion benötigte Zeit die Summe der in dieser Funktion in jedem Thread verbrachten Zeiten.
  • Der statistische Profiler ist verrauscht und macht es schwierig, Zyklen zu optimieren.

Plattformen


Formal unterstützt Oracle Developer Studio nur Solaris und Oracle Linux. De facto habe ich es erfolgreich auf Redhat, CentOS und Ubuntu verwendet. Sammeln / Analysieren Ich habe nur C / C ++ / Fortran-Anwendungen optimiert. In der Dokumentation heißt es, dass das Tool auch Java-Projekte verarbeitet.


Führen Sie die Ergebnisse aus und analysieren Sie sie


Die Code-Analyse beginnt natürlich mit dem Erstellen einer ausführbaren Datei. Funktionsnamen sollten darin nicht gelöscht werden, da sonst nichts zu analysieren ist. Debugging-Symbole sind erforderlich, wenn Sie Codezeilen aus dem Analysegerät anzeigen möchten. Zunächst ist es natürlich sinnvoll, sich mit Ihren bevorzugten Optimierungsoptionen zu profilieren. Es gibt Szenarien, in denen es nützlich ist, Code ohne Optimierung zu profilieren, dies ist jedoch selten. Zum Beispiel, wenn Sie nur das Anrufdiagramm betrachten und nicht die Leistung messen müssen.


Um zu beginnen, müssen Sie wie gewohnt die ausführbare Datei sammeln, zum Beispiel:


g++ -O3 –g example.c –o ex 

Der zweite Schritt ist das Ausführen von collect:


 $pathToSunStudio/collect ./ex 

Als Ergebnis der Arbeit des Profilers wird im aktuellen Verzeichnis ein Unterverzeichnis des experimentellen Tests.N.er erstellt, wobei N die Startnummer ist. (Wichtig: Wenn Ihr Programm unterbrochen wurde, wird das Experimentierverzeichnis beschädigt.)


Der angenehmste Schritt ist das Starten der GUI:


 $pathToSunStudio/analyzer test.1.er 

In unserem einfachen Beispiel lernen wir den Code direkt vom GUI-Analysator kennen. In unserem Beispiel wird die Summe der natürlichen und dezimalen Logarithmen von ganzen Zahlen von 2 bis 20.000.000 berechnet. Die "warmen" Linien werden gelb hervorgehoben.



Kommen wir zur Liste der "schweren Funktionen". Zu Beginn werden die Funktionen nach der in der Funktion selbst verbrachten Zeit sortiert (exklusive Zeit). Sie können nach der Zeitsumme in der Funktion und ihren untergeordneten Elementen (einschließlich Zeit) sortieren.



Wie erwartet können Sie den Aufrufstapel umgehen. In unserem einfachen Beispiel sehen wir, dass wir in t1 () von main () kamen und die Funktion sumlog () die Hälfte der Ausführungszeit des gesamten Programms benötigt.



Für die Automatisierung ist es sehr praktisch, dass Daten über die Befehlszeile abgerufen werden können. Zum Beispiel:


 er_print -functions test.1.er test.2.er 

druckt die Laufzeit von Funktionen aus zwei Starts.


Tabelle mit Zeiten
 <p>Functions sorted by metric: Exclusive Total CPU Time Excl. Incl. Name Total Total CPU sec. CPU sec. 4.160 4.160 Total 3.140 3.140 __ieee754_log 0.330 1.990 __ieee754_log10 0.270 1.880 sumlog(int) 0.180 2.280 sumlog10(int) 0.100 1.610 log 0.090 2.100 log10 0.050 0.050 isnan</p> <ol> <li>4.160 __libc_start_main</li> <li>4.160 main</li> <li>1.880 t1(int)</li> <li>2.280 t2(int) 


Lifehack. Wenn Sie sich die Grafik der Programmaufrufe genau ansehen, können Sie eine Menge nützlicher Arbeiten und die Architektur einer neuen Codebasis für Sie herausfinden. Ich beginne sehr oft mit der Arbeit an einem neuen Projekt, indem ich Performance Analyzer starte, da Sie sofort verstehen können, welcher Code wirklich ausgeführt wird und in welchen Szenarien.


Fazit


Sun / Oracle Studion Performance Analyzer ist ein leistungsstarkes und praktisches Tool. In der Notiz habe ich den einfachsten Anwendungsfall gezeigt, und natürlich kann Performance Analyzer viel mehr. Wenn Sie mehr erfahren möchten, lesen Sie die Dokumentation [2]. Die Hauptschlussfolgerung: Ein solches Tool existiert und kann für Ihre Projekte von großem Nutzen sein.


Referenzen:


  1. Oracle Developer Studio
  2. Oracle Developer Studio 12.6: Leistungsanalysator
  3. Leistungsanalysator

Source: https://habr.com/ru/post/de469409/


All Articles