[Profile] Identifiez les domaines où le programme prend beaucoup de temps (google-perftool)

Lorsque vous avez besoin d'un profil

Les performances du programme créé ne sont pas aussi bonnes que prévu! Je ne sais pas où se trouve le goulot d'étranglement, alors je veux le savoir!

Dans un tel cas, utilisez un outil de profilage.

Installez google-perftool

Je vais déposer le code source du lien vers la page de téléchargement en bas de http://goog-perftools.sourceforge.net/. La dernière version du 11 octobre 2014 est gperftools-2.2.1.tar.gz. Après la décompression, installez avec ./configure, make, faites l'installation comme d'habitude.

installation de graphviz

Il n'est pas nécessaire d'utiliser google-perftool uniquement sur la ligne de commande, google-perftool crée un diagramme visuellement facile à comprendre appelé un graphe d'appel. Puisque ce chiffre est généré au format point, il est judicieux d'installer également l'outil "graphviz" pour convertir ce fichier au format point en un format tel que eps.

Je vais supprimer le code source de la page de téléchargement de http://www.graphviz.org/. Décompressez également et ./configure, make, make install Si vous essayez d'installer à partir du code source, vous risquez de vous plaindre de ./configure car il existe de nombreuses bibliothèques dépendantes. Si vous souhaitez simplement convertir le fichier de points généré par google-perftool en eps, la plupart d'entre eux ne sont pas fonctionnellement nécessaires, alors ignorez-les et effectuez l'installation.

Comment utiliser

Ajoutez le répertoire lib dans lequel google-perftool est installé à LD_LIBRARY_PATH. Écrivez-le dans ./bash_profile etc.

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

Liez libprofiler.so lors de la compilation du programme que vous souhaitez profiler.

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

Exécutez le programme en spécifiant le nom du fichier d'analyse de la destination de sortie.

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

Cela générera prof.out, spécifiez donc le programme d'origine et le fichier d'analyse et affichez le résultat. Jetez un œil en haut de la fonction dont l'exécution prend beaucoup de temps.

$ 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
・
・
・

La deuxième colonne à partir de la gauche correspond au pourcentage de temps d'exécution occupé par la fonction. Puisque __write_nocancel est une fonction qui est finalement appelée par write (2), ce programme sait que write (2) est le goulot d'étranglement.

Créer un graphe d'appel

Créez un graphique d'appel qui montre le rapport entre le temps d'exécution et la taille de l'objet et l'affiche visuellement au format comme un organigramme dans l'ordre dans lequel les fonctions sont appelées comme suit.

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

Autres outils de profilage

Certains des plus couramment utilisés sont:

Si vous pouvez utiliser yum ou apt-get (avec cette permission), il peut être facile d'installer et d'utiliser perf ou oprofile. (Parce que quand j'ai essayé d'installer perf à partir du code source dans mon répertoire personnel, j'ai raté configure ou make et j'ai abandonné.)

Si google-perftool est le noyau Linux 2.6.31 ou supérieur, je pense qu'il est facile à utiliser en ce sens qu'il est moins susceptible de trébucher lors de l'installation à partir des sources.

Recommended Posts

[Profile] Identifiez les domaines où le programme prend beaucoup de temps (google-perftool)
Créer une liste lorsque la nomenclature est pour une certaine période de temps
Expérience de collecte de tweets pendant une longue période (préparation du programme (3))
Expérience pour collecter des tweets pendant une longue période (préparation du programme (1))
Expérience pour collecter des tweets pendant une longue période (préparation du programme (2))
Expérience pour collecter des tweets pendant une longue période (préparation du programme (5))
L'image est Namekuji
Il y a un long chemin à parcourir pour développer une application web
L'histoire de l'exportation d'un programme
Découvrez où se trouve l'entité Java sur Linux (CentOS cette fois)