Profilage Linux avec Analyseur de performances

Profilage Linux avec Analyseur de performances


Chers collègues, je trouve utile de parler d'un profileur de code pratique et gratuit pour Linux / Solaris. Il fait partie du package Sun / Oracle Developer Studio [1]. À mon avis, d'autres parties de cet environnement de développement sont quelque peu inutiles, mais le profileur, appelé Performance Analyzer, est très efficace. Il est facile à utiliser, une analyse claire et pratique des résultats. À mon avis, le profileur est toujours supérieur à de nombreux homologues Linux. Avec cet outil, l'utilisation de gprof semble être un caprice étrange et une perte de temps.


Si vous ne prévoyez pas d'utiliser Performance Analyzer immédiatement, vous ne pouvez pas continuer à lire. N'oubliez pas qu'un tel produit existe. S'il est intéressant d'y jeter un coup d'œil, alors bienvenue.


Le profileur se compose de deux parties: collecter - lance l'application et collecte les données, enregistre les résultats de l'expérience; analyseur est une interface graphique qui lit les données d'expérience et offre des opportunités pour une analyse pratique des points chauds et des arborescences d'appels de fonction.


En bref sur les avantages et inconvénients importants:


Avantages:


  • gratuit;
  • ne nécessite pas de recompilation du code et de liaison du fichier exécutable;
  • fonctionne avec des compilateurs gnu et sun;
  • ne modifie pas le temps d'exécution du programme lors de la collecte des données;
  • Il a une interface graphique intuitive;
  • Équipé d'une interface de ligne de commande avancée pour l'analyse automatique;
  • vous permet de regarder rapidement le résultat du compilateur;
  • possède un profileur statistique suffisamment précis même pour les pièces pas particulièrement laborieuses;
  • analyse et analyse comparative de plusieurs lancements de programmes;
  • ne déforme pas les résultats.

Quelques inconvénients:


  • L'interface graphique est écrite en Java. Parfois, il se bloque au démarrage, un simple redémarrage aide;
  • seul le temps CPU est mesuré, s'il est possible de réparer le noyau, alors cette restriction peut être supprimée;
  • dans les applications multi-thread, le temps pris par la fonction est la somme des temps passés dans cette fonction dans chaque thread;
  • le profileur statistique est bruyant et rend difficile l'optimisation des cycles.

Plateformes


Formellement, Oracle Developer Studio ne prend en charge que Solaris et Oracle Linux. De facto, je l'ai utilisé avec succès sur Redhat, CentOS et Ubuntu. Collecte / analyseur que j'ai utilisé uniquement pour optimiser les applications C / C ++ / Fortran. La documentation indique que l'outil gère également les projets Java.


Exécutez et analysez les résultats


Bien entendu, l'analyse de code commence par la création d'un fichier exécutable. Les noms de fonctions ne doivent pas y être supprimés, sinon il n'y aura rien à analyser. Les symboles de débogage sont nécessaires si vous souhaitez consulter les lignes de code de l'analyseur. Bien sûr, en premier lieu, il est logique de profiler avec vos options d'optimisation préférées. Il existe des scénarios où il est utile de profiler du code sans optimisation, mais cela est rare. Par exemple, si vous avez juste besoin de regarder le graphique des appels et de ne pas mesurer les performances.


Donc, pour commencer, vous devez, comme d'habitude, collecter le fichier exécutable, par exemple:


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

La deuxième étape consiste à exécuter depuis collect:


 $pathToSunStudio/collect ./ex 

À la suite du travail du profileur, un sous-répertoire de l'expérience test.N.er est créé dans le répertoire courant, où N est le numéro de départ. (Important: si votre programme a été interrompu, le répertoire de l'expérience sera cassé).


L'étape la plus agréable est de lancer l'interface graphique:


 $pathToSunStudio/analyzer test.1.er 

Dans le cas de notre exemple simple, nous apprendrons à connaître le code directement à partir de l'analyseur GUI. Notre exemple calcule la somme des logarithmes naturel et décimal des entiers de 2 à 20 000 000. Les lignes "chaudes" sont surlignées en jaune.



Passons à la liste des "fonctions lourdes". Initialement, les fonctions sont triées en fonction du temps passé dans la fonction elle-même (temps exclusif). Vous pouvez trier par la somme du temps dans la fonction et dans ses enfants (temps inclus).



Comme prévu, vous pouvez parcourir la pile d'appels. Dans notre exemple simple, nous voyons que dans t1 () nous venons de main () , et la fonction sumlog () prend la moitié du temps d'exécution de tout le programme.



Il est très pratique pour l'automatisation de pouvoir extraire des données à l'aide de la ligne de commande. Par exemple:


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

imprime le temps d'exécution des fonctions à partir de deux démarrages.


table avec heures
 <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. En examinant attentivement le graphique des appels de programme, vous pouvez découvrir de nombreux travaux utiles et l'architecture d'une nouvelle base de code pour vous. Je commence très souvent à travailler avec un nouveau projet en lançant Performance Analyzer, car vous pouvez immédiatement comprendre quel code s'exécute réellement et dans quels scénarios.


Conclusion


Sun / Oracle Studion Performance Analyzer est un outil puissant et pratique. Dans la note, j'ai montré le cas d'utilisation le plus simple et, bien sûr, Performance Analyzer peut faire beaucoup plus. Si vous souhaitez en savoir plus, reportez-vous à la documentation [2]. La principale conclusion: un tel outil existe et peut être très utile à vos projets.


Références:


  1. Oracle Developer Studio
  2. Oracle Developer Studio 12.6: Analyseur de performances
  3. Analyseur de performances

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


All Articles