Devel::NYTProf - Der beste Profiler für Perl
Veröffentlicht von Thomas Fahle am (Permalink)
Devel::NYTProf ist ein recht neuer, aber sehr leistungsfähiger Profiler für Perl, der von Adam Kaplan für die New York Times (daher der Name) entwickelt wurde. Tim Bunce, bekannt als Enwickler der Datenbankschnittstelle DBI, entwickelt Devel::NYTProf weiter.
Zeilen und Unterprogramme
Zeilenorientierte Profiler wie Devel::SmallProf bzw. Devel::FastProf von Salvador Fandiño García zeigen, welche Zeile eines Perl-Programms wie oft aufgerufen wurde und wieviel Zeit dafür benötigt wurde.
Unterprogrammorientierte Profiler wie Devel::DProf von Ilya Zakharevich zeigen, welches Unterprogramm eines Perl-Programms wie oft aufgerufen wurde und wieviel Zeit dafür benötigt wurde.
Devel::NYTProf kann sowohl zeilen- als auch unterprogrammorientiert messen und läuft auf Linux/Unix und Windows.
Schauen wir uns den neuen Profiler mal etwas näher an.
Beispielprogramm: Fakulät berechnen
Das Beispielprogramm berechnet die Fakulät einer Ganzzahl auf drei unterschiedliche Arten: rekursiv und zweimal iterativ. Die Variationen habe ich dem Journal of ambs: How would you write factorial? entnommen.
#!/usr/bin/perl use strict; use warnings; # Berechnung der Fakultaet n! my $n = 70; print recursive($n) , "\n"; print iterativ($n) , "\n"; print iterativ2($n) , "\n"; sub recursive { my $n = shift; if ($n == 1 or $n == 0) { return 1; } my $total = $n * recursive($n-1); return $total; } sub iterativ { my $v = shift; my $res = 1; while ($v > 1) { $res *= $v; $v--; } return $res; } sub iterativ2 { my $v = shift; my $res = 1; grep {$res*=$_} (1..$v); return $res; } # Quelle: # Journal of ambs: How would you write factorial? # http://use.perl.org/~ambs/journal/37511
Das Programm erzeugt folgende Ausgabe:
$ perl factorial.pl 1.19785716699699e+100 1.19785716699699e+100 1.19785716699699e+100
Das ist übrigens das selbe Beispielprogramm wie in den Beiträgen In welcher Zeile verbrät mein Programm die meiste Zeit? Devel::SmallProf und Devel::FastProf geben Antworten bzw. In welchem Unterprogramm verbrät mein Programm die meiste Zeit? Devel::DProf liefert Hinweise.
Devel::NYTProf
Das Beispielprogramm lässt sich mit Devel::NYTProf wie folgt untersuchen.
$ perl -d:NYTProf factorial.pl
Devel::NYTProf erzeugt im aktuellen Verzeichnis die Datei nytprof.out, die sich mit den mitgelieferten Werkzeugen nytprofhtml bzw. nytprofcsv anzeigen lässt.
nytprofcsv
nytprofcsv bereitet das Profiling in betriebssystem-unabhängigen CSV-Dateien, die bequem mit Excel oder Open-Office.org geöffnet werden können, auf. Für jede Zeile Code werden die verbrauchte Zeit, die Anzahl Aufrufe und die Zeit/Aufruf angezeigt.
$ nytprofcsv Generating CSV report... Reading nytprof.out Writing report to nytprof directory
nytprofcsv erzeugt einen Unterordner nytprof, in dem die Profiling-Ergebnisse abgelegt werden.
$ ls -1 nytprof factorial.pl-block.csv factorial.pl-line.csv factorial.pl-sub.csv strict.pm-block.csv strict.pm-line.csv strict.pm-sub.csv warnings.pm-block.csv warnings.pm-line.csv warnings.pm-sub.csv
Das muss man sich einfach mal in einer Tabellenkalkulation ansehen, dann weiß man sofort, wie es funktioniert.
nytprofhtml
nytprofhtml erzeugt ebenfalls einen Unterordner nytprof, in dem die Profiling-Ergebnisse als HTML-Dateien abgelegt werden.
$ nytprofhtml nytprof.out Generating report... Reading nytprof.out Writing report to nytprof directory
$ ls -1 nytprof factorial.pl-block.html factorial.pl-line.html factorial.pl-sub.html index.html index-subs-excl.html index-subs-incl.html jquery.min.js jquery.tablesorter.min.js strict.pm-block.html strict.pm-line.html strict.pm-sub.html style.css warnings.pm-block.html warnings.pm-line.html warnings.pm-sub.html
Die HTML-Ausgabe sieht zunächst einmal rattenscharf aus:
und enthält alle Details, die benötigt werden, um Zeitdiebe auf zu finden.
Mein Fazit
Devel::NYTProf ist der derzeit beste Profiler für Perl und gehört in den Werkzeugkasten eines jeden Entwicklers.
Danke New York Times
Ein ganz besonderen Dank an die New York Times, die ihren Angestellten erlaubt, ein derart geiles Tool als Open-Source zu veröffentlichen.
Siehe auch:
- Devel::NYTProf
- NYTProf 2.07 - Even better, and now for Windows too
- Devel::DProf - broken by the passage of time
- NYTProf v2 - the background story
- Devel::NYTProf Version 2 Released. Marvel at Its Greatness!
- The New York Times Perl Profiler
- Devel::NYTProf continues its march of awesomeness
- Devel::NYTProf is the hot new profiler in town
- Laufzeit-Tacho - Profiler identifizieren Flaschenhälse in Perl-Programmen
- YAPC::Europe 2008 - Mike Astle - Profiling
- In welchem Unterprogramm verbrät mein Programm die meiste Zeit? Devel::DProf liefert Hinweise
- In welcher Zeile verbrät mein Programm die meiste Zeit? Devel::SmallProf und Devel::FastProf geben Antworten
- Devel::Size - Wieviel Speicher belegt meine Datenstruktur?