[Profil] Identifizieren Sie, wo das Programm lange dauert (google-perftool)

Wenn Sie ein Profil benötigen

Die Leistung des erstellten Programms ist nicht so gut wie ich erwartet hatte! Ich weiß nicht, wo der Engpass liegt, also möchte ich es herausfinden!

Verwenden Sie in diesem Fall ein Profilierungswerkzeug.

Installieren Sie Google-Perftool

Ich werde den Quellcode vom Link zur Download-Seite unten auf http://goog-perftools.sourceforge.net/ löschen. Die neueste Version vom 11. Oktober 2014 ist gperftools-2.2.1.tar.gz. Installieren Sie nach dem Entpacken mit ./configure, make, make install wie gewohnt.

Installation von graphviz

Es ist nicht erforderlich, Google-Perftool nur in der Befehlszeile zu verwenden. google-perftool erstellt ein visuell leicht verständliches Diagramm, das als Anrufdiagramm bezeichnet wird. Da diese Abbildung im Punktformat generiert wird, empfiehlt es sich, auch das Tool "graphviz" zum Konvertieren dieser Punktformatdatei in ein Format wie eps zu installieren.

Ich werde den Quellcode von der Download-Seite von http://www.graphviz.org/ löschen. Entpacken und installieren Sie auch ./configure, make, make Wenn Sie versuchen, aus dem Quellcode zu installieren, werden Sie sich wahrscheinlich in ./configure beschweren, da es viele abhängige Bibliotheken gibt. Wenn Sie nur die von google-perftool generierte Punktdatei in eps konvertieren möchten, sind die meisten von ihnen funktional nicht erforderlich. Ignorieren Sie sie also und machen Sie make, make install.

Wie benutzt man

Fügen Sie das lib-Verzeichnis, in dem google-perftool installiert ist, zu LD_LIBRARY_PATH hinzu. Schreiben Sie es in ./bash_profile usw.

export LD_LIBRARY_PATH=/home/tanaka/lib:$LD_LIBRARY_PATH

Verknüpfen Sie libprofiler.so, wenn Sie das Programm kompilieren, das Sie profilieren möchten.

$ g++ -o hoge.exe hoge.cpp -g -lprofiler

Führen Sie das Programm aus, indem Sie den Namen der Analysedatei des Ausgabeziels angeben.

$ export CPUPROFILE=prof.out; ./hoge.exe 
PROFILE: interrupts/evictions/bytes = xxx/x/xxxx

Dadurch wird prof.out generiert. Geben Sie daher das ursprüngliche Programm und die Analysedatei an und zeigen Sie das Ergebnis an. Werfen Sie einen Blick auf die Oberseite der Funktion, deren Ausführung lange dauert.

$ pprof hoge.exe prof.out
Using local file prof.out.
Welcome to pprof!  For help, type 'help'.
(pprof) top
Total: 355 samples
     286  80.6%  80.6%      286  80.6% __write_nocancel
      16   4.5%  85.1%       16   4.5% __read_nocancel
      14   3.9%  89.0%       17   4.8% __lseek_nocancel
・
・
・

Die zweite Spalte von links gibt den Prozentsatz der von der Funktion belegten Ausführungszeit an. Da __write_nocancel die Funktion ist, die schließlich von write (2) aufgerufen wird, weiß dieses Programm, dass write (2) der Engpass ist.

Anrufdiagramm erstellen

Erstellen Sie ein Aufrufdiagramm, das das Verhältnis der Ausführungszeit zur Größe des Objekts anzeigt und es visuell im Format wie ein Flussdiagramm in der Reihenfolge anzeigt, in der die Funktionen wie folgt aufgerufen werden.

$ pprof --dot hoge.exe prof.out > prof.dot
$ dot -T eps prof.dot > prof.eps

Andere Profiling-Tools

Einige der am häufigsten verwendeten sind:

Wenn Sie yum oder apt-get (mit dieser Berechtigung) verwenden können, ist es möglicherweise einfach, perf oder oprofile zu installieren und zu verwenden. (Denn als ich versuchte, perf aus dem Quellcode in mein Home-Verzeichnis zu installieren, habe ich configure oder make durcheinander gebracht und aufgegeben.)

Wenn google-perftool Linux-Kernel 2.6.31 oder höher ist, ist es meiner Meinung nach einfach zu verwenden, da es bei der Installation von der Quelle weniger wahrscheinlich auslöst.

Recommended Posts

[Profil] Identifizieren Sie, wo das Programm lange dauert (google-perftool)
Erstellen einer Liste, wenn die Nomenklatur für einen bestimmten Zeitraum gültig ist
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (3))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (1))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (2))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (5))
Das Bild ist Namekuji
Die Entwicklung einer Webanwendung ist noch weit entfernt
Die Geschichte des Exportierens eines Programms
Finden Sie heraus, wo sich die Java-Entität unter Linux befindet (diesmal CentOS).