Zum Inhalt springen

„Profiler (Programmierung)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
RolandWagnerKe (Diskussion | Beiträge)
Software: Ergänzung von Profiler für IEC 61131-3 Code
K Satzbau (kürzer, einfacher), Leerzeichen-Interpunktion
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 1: Zeile 1:
Als '''Profiler''' werden [[Programmierwerkzeug]]e bezeichnet, die das [[Laufzeit (Informatik)|Laufzeitverhalten]] von Software analysieren. Es gibt unterschiedliche Problembereiche in der Softwareentwicklung, die durch [[Effizienz (Informatik)|ineffiziente]] Programmierung ausgelöst werden. Ein Profiler hilft dem Entwickler durch Analyse und Vergleich von laufenden [[Computerprogramm|Programmen]] die Problembereiche aufzudecken. Daraus kann man Maßnahmen zur strukturellen und algorithmischen Verbesserung des Quellcodes ableiten.
Als '''Profiler''' werden [[Programmierwerkzeug]]e bezeichnet, die das [[Laufzeit (Informatik)|Laufzeitverhalten]] von Software analysieren. Es gibt unterschiedliche Problembereiche in der Softwareentwicklung, die durch [[Effizienz (Informatik)|ineffiziente]] Programmierung ausgelöst werden. Ein Profiler hilft dem Entwickler, die Problembereiche durch Analyse und Vergleich von laufenden [[Computerprogramm|Programmen]] aufzudecken. Daraus kann man Maßnahmen zur strukturellen und algorithmischen Verbesserung des Quellcodes ableiten.


== Bereiche des Profilings ==
== Bereiche des Profilings ==
Zeile 9: Zeile 9:
=== Speichernutzung ===
=== Speichernutzung ===


Ein weiterer Aspekt ist die Verfolgung von Speichernutzung durch ein Programm. Der Profiler soll dabei helfen, den Ge- und Verbrauch von [[Arbeitsspeicher]] zu optimieren und ggf. Fehler in der Programmierung aufzudecken, durch die ungenutzte Speicherbereiche nicht freigeben werden ([[Speicherleck]]).
Ein weiterer Aspekt ist die Verfolgung von Speichernutzung durch ein Programm. Der Profiler soll dabei helfen, den Ge- und Verbrauch von [[Arbeitsspeicher]] zu optimieren und ggf. Fehler in der Programmierung aufzudecken, durch die ungenutzte Speicherbereiche nicht freigegeben werden ([[Speicherleck]]).


=== Nebenläufigkeit ===
=== Nebenläufigkeit ===
Zeile 17: Zeile 17:
== Technische Aspekte des Profilings ==
== Technische Aspekte des Profilings ==


Das Profiling eines Programms selbst verursacht in der Regel eine Beeinflussung der zu analysierenden Anwendung. Üblicherweise verlangsamt der Profiler selbst die Ausführungsgeschwindigkeit. Außerdem entsteht bei Analysen von großen Programmen eine sehr große Menge an Daten. Es gibt unterschiedliche Techniken beim Profiling, die eine solche Beeinflussung, ggf. unter Verlust der Analysegenauigkeit, verschieden stark ausprägen. Außerdem ermöglichen die Profiler es zu bestimmen, welche Programmteile überhaupt analysiert werden sollen.
Das Profiling eines Programms selbst verursacht in der Regel eine Beeinflussung der zu analysierenden Anwendung. Üblicherweise verlangsamt der Profiler selbst die Ausführungsgeschwindigkeit. Außerdem entsteht bei Analysen von großen Programmen eine sehr große Menge an Daten. Es gibt unterschiedliche Techniken beim Profiling, die eine solche Beeinflussung, ggf. unter Verlust der Analysegenauigkeit, verschieden stark ausprägen. Außerdem ermöglichen die Profiler, zu bestimmen, welche Programmteile überhaupt analysiert werden sollen.


=== Statistische Auswertung ===
=== Statistische Auswertung ===
Zeile 33: Zeile 33:
Es gibt verschiedene Typen der Instrumentierung:
Es gibt verschiedene Typen der Instrumentierung:


* Manuelle Instrumentierung durch Erweiterung des Quelltextes durch Befehle, die die Laufzeit berechnen (z. B. mit der [[Programmierschnittstelle]] des [[Application Response Measurement|Application-Response-Measurement]]-Standards).
* Manuelle Instrumentierung durch Erweiterung des Quelltextes durch Befehle, die die Laufzeit berechnen (z. B. mit der [[Programmierschnittstelle]] des [[Application Response Measurement|Application-Response-Measurement]]-Standards).
* Durch Compiler-Optionen erweiterte Programme, die dadurch Profiler-Marken erhalten.<ref>[https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Code-Gen-Options.html#index-finstrument-functions-2819 gcc/g++ -finstrument-functions Compiler-Option] gcc.gnu.org, abgerufen am 22. Januar 2016.</ref>
* Durch Compiler-Optionen erweiterte Programme, die dadurch Profiler-Marken erhalten.<ref>[https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Code-Gen-Options.html#index-finstrument-functions-2819 gcc/g++ -finstrument-functions Compiler-Option] gcc.gnu.org, abgerufen am 22. Januar 2016.</ref>
* Nachträgliche Veränderung von kompilierten Programmen durch Einfügen von Marken.
* Nachträgliche Veränderung von kompilierten Programmen durch Einfügen von Marken.
Zeile 40: Zeile 40:
== Profil-Abbilder ==
== Profil-Abbilder ==


Ziel einer Programmanalyse ist ein effizientes Laufzeitverhalten der Anwendung. Damit ein Vergleich auch objektiv gelingt, ermöglichen viele Profiler die gesammelten Analysedaten zu speichern und zu vergleichen. Somit können Programmänderungen in ihrem Laufzeitverhalten verglichen und bewertet werden. Die Profiler zeigen die Vergleichswerte üblicherweise relativ als Prozentangaben oder als absolute Werte an. Da aber ein Profiler das Laufzeitverhalten während der Analyse immer selbst beeinträchtigt, dürfen solche Vergleichswerte nicht als tatsächliche Veränderung betrachtet werden.
Ziel einer Programmanalyse ist ein effizientes Laufzeitverhalten der Anwendung. Damit ein Vergleich auch objektiv gelingt, ermöglichen viele Profiler das Speichern und Vergleichen der gesammelten Analysedaten. Somit können Programmänderungen in ihrem Laufzeitverhalten verglichen und bewertet werden. Die Profiler zeigen die Vergleichswerte üblicherweise relativ als Prozentangaben oder als absolute Werte an. Da aber ein Profiler das Laufzeitverhalten während der Analyse immer selbst beeinträchtigt, dürfen solche Vergleichswerte nicht als tatsächliche Veränderung betrachtet werden.


== Software ==
== Software ==
Zeile 46: Zeile 46:
* PerfTools
* PerfTools
* Der [[Prozess-Scheduler]] [[Simple Linux Utility for Resource Management|Slurm]] besitzt ebenfalls Profiling-Möglichkeiten.
* Der [[Prozess-Scheduler]] [[Simple Linux Utility for Resource Management|Slurm]] besitzt ebenfalls Profiling-Möglichkeiten.
* [http://www.prodelphi.de ProDelphi] ist ein Profiler für Delphi (Objekt-Pascal)
* [https://www.prodelphi.de ProDelphi] ist ein Profiler für Delphi (Objekt-Pascal)
* [http://www.prodelphi.de ProLaza] ist ein Profiler für Lazarus (Objekt-Pascal)
* [https://www.prodelphi.de ProLaza] ist ein Profiler für Lazarus (Objekt-Pascal)
*CODESYS Profiler ist für IEC 61131-3 Code (z. B. Strukturierter Text) entwickelt mit [[Codesys|CODESYS]]
* CODESYS Profiler ist für IEC 61131-3 Code (z. B. Strukturierter Text) entwickelt mit [[Codesys|CODESYS]]


== Siehe auch ==
== Siehe auch ==

Aktuelle Version vom 3. Juni 2024, 21:00 Uhr

Als Profiler werden Programmierwerkzeuge bezeichnet, die das Laufzeitverhalten von Software analysieren. Es gibt unterschiedliche Problembereiche in der Softwareentwicklung, die durch ineffiziente Programmierung ausgelöst werden. Ein Profiler hilft dem Entwickler, die Problembereiche durch Analyse und Vergleich von laufenden Programmen aufzudecken. Daraus kann man Maßnahmen zur strukturellen und algorithmischen Verbesserung des Quellcodes ableiten.

Bereiche des Profilings

[Bearbeiten | Quelltext bearbeiten]

Messen von Geschwindigkeit

[Bearbeiten | Quelltext bearbeiten]

Die häufigste Anwendung eines Profilers ist das Zählen und Messen der Aufrufe und Durchläufe von Funktionen. Dies ermöglicht es dem Programmierer herauszufinden, wo sich eine Optimierung des Programms lohnt. Eine Optimierung von Funktionen, die nicht häufig verwendet werden, ist der Gesamtleistung des Programms nicht sonderlich zuträglich und erschwert in der Regel die Wartbarkeit des Quellcodes. Deshalb wird das Hauptaugenmerk auf Funktionen gelegt, die oft aufgerufen werden und in der Summe der Aufrufe viel Zeit benötigen.

Speichernutzung

[Bearbeiten | Quelltext bearbeiten]

Ein weiterer Aspekt ist die Verfolgung von Speichernutzung durch ein Programm. Der Profiler soll dabei helfen, den Ge- und Verbrauch von Arbeitsspeicher zu optimieren und ggf. Fehler in der Programmierung aufzudecken, durch die ungenutzte Speicherbereiche nicht freigegeben werden (Speicherleck).

Nebenläufigkeit

[Bearbeiten | Quelltext bearbeiten]

Moderne Profiler bieten die Möglichkeit, nebenläufige Prozesse (Threads) in ihrem Lebenszyklus grafisch (zum Beispiel als Balken- oder Netzdiagramm) darzustellen. Diese optische Aufbereitung soll einem Programmierer helfen, das Laufzeitverhalten von nebenläufigen Prozessen besser zu interpretieren und Fehler durch Verklemmung (Deadlock) aufzudecken.

Technische Aspekte des Profilings

[Bearbeiten | Quelltext bearbeiten]

Das Profiling eines Programms selbst verursacht in der Regel eine Beeinflussung der zu analysierenden Anwendung. Üblicherweise verlangsamt der Profiler selbst die Ausführungsgeschwindigkeit. Außerdem entsteht bei Analysen von großen Programmen eine sehr große Menge an Daten. Es gibt unterschiedliche Techniken beim Profiling, die eine solche Beeinflussung, ggf. unter Verlust der Analysegenauigkeit, verschieden stark ausprägen. Außerdem ermöglichen die Profiler, zu bestimmen, welche Programmteile überhaupt analysiert werden sollen.

Statistische Auswertung

[Bearbeiten | Quelltext bearbeiten]

Mittels der statistischen Auswertung wird die Programmanalyse nicht exakt mit jedem Programmbefehl einer Messung unterzogen. Es wird vielmehr in einem bestimmten zeitlichen Zyklus die Laufzeit gemessen. Dieses Verfahren nennt man auch Sampling. Der Profiler greift damit in bestimmten Taktzyklenabständen in den Programmablauf ein und ermittelt damit stichprobenartig, welche Programmteile seit dem letzten Zyklus aufgerufen wurden. Daraus wird ein statistischer Mittelwert errechnet, der in das Ergebnis der Analyse einfließt.

Bei der statistischen Auswertung wird das laufende Programm nicht verändert.

Instrumentierung

[Bearbeiten | Quelltext bearbeiten]

Mit der Instrumentierung werden vom Anwender bestimmte (oder gar alle) Programmabschnitte (zum Beispiel während der Laufzeit) mit Analysecode erweitert. Das heißt, es werden in das Programm Unterbrechungs-Marken (Interrupts) oder Programmcode eingefügt, die dem Profiler während des Programmlaufs signalisieren, dass der Abschnitt gerade abgearbeitet wird. Die Zeit zwischen den Aufrufen der Analysepunkte (sowie das Speicherverhalten als Differenz zu einem vorherigen Durchlauf) können wieder als Laufzeitwerte in das Ergebnis der Analyse einfließen.

Die Instrumentierung verändert also das Programm, um die Analysedaten zu berechnen.

Es gibt verschiedene Typen der Instrumentierung:

  • Manuelle Instrumentierung durch Erweiterung des Quelltextes durch Befehle, die die Laufzeit berechnen (z. B. mit der Programmierschnittstelle des Application-Response-Measurement-Standards).
  • Durch Compiler-Optionen erweiterte Programme, die dadurch Profiler-Marken erhalten.[1]
  • Nachträgliche Veränderung von kompilierten Programmen durch Einfügen von Marken.
  • Laufzeit-Instrumentierung: Dabei bleibt das gespeicherte Programm unangetastet. Die Profiler-Marken werden vor dem Ausführen im Arbeitsspeicher hinzugefügt.

Profil-Abbilder

[Bearbeiten | Quelltext bearbeiten]

Ziel einer Programmanalyse ist ein effizientes Laufzeitverhalten der Anwendung. Damit ein Vergleich auch objektiv gelingt, ermöglichen viele Profiler das Speichern und Vergleichen der gesammelten Analysedaten. Somit können Programmänderungen in ihrem Laufzeitverhalten verglichen und bewertet werden. Die Profiler zeigen die Vergleichswerte üblicherweise relativ als Prozentangaben oder als absolute Werte an. Da aber ein Profiler das Laufzeitverhalten während der Analyse immer selbst beeinträchtigt, dürfen solche Vergleichswerte nicht als tatsächliche Veränderung betrachtet werden.

  • gprof
  • PerfTools
  • Der Prozess-Scheduler Slurm besitzt ebenfalls Profiling-Möglichkeiten.
  • ProDelphi ist ein Profiler für Delphi (Objekt-Pascal)
  • ProLaza ist ein Profiler für Lazarus (Objekt-Pascal)
  • CODESYS Profiler ist für IEC 61131-3 Code (z. B. Strukturierter Text) entwickelt mit CODESYS

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. gcc/g++ -finstrument-functions Compiler-Option gcc.gnu.org, abgerufen am 22. Januar 2016.