GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Comment analyser les données de profil à partir de `perf Record -a` (collection à l'échelle du système) ?

J'utilise perf depuis linux-2.6.36-gentoo-r4. Le /proc/sys/kernel/perf_event_paranoid est défini sur 0, il ne devrait donc pas y avoir de problème à partir de là.

Étant donné que l'application de longue durée que je profile se bloque parfois pour une raison indéterminée (aucune information sur la raison de son arrêt de travail n'a pu être trouvée par moi), je me suis tourné vers le profilage à l'échelle du système avec des événements de performance.

L'application en question effectue des calculs numériques parallélisés, en utilisant MPI (Message Passing Interface) pour la communication. Avant de lancer l'application (avec mpirun ) J'ai commencé à enregistrer des données de profil à l'échelle du système sur one de nœuds avec lesquels il est exécuté :

$ perf record -o perf.all.cycles,graph.data -g -e cycles -a &

Après avoir réalisé que l'application s'est écrasée, j'ai tué le perf tâche.

Il était parti

$ du -sh perf.all.cycles,graph.data 
14G     perf.all.cycles,graph.data

14 Go de données. Malheureusement perf report ne prend pas en charge le -a commutateur.

Comment puis-je analyser les données de profilage à l'échelle du système à partir de perf ? outil ?

Exécution simple du perf report ne produit pas de sortie utile :

$ perf report -i perf.all.cycles,graph.data
#
# (For a higher level overview, try: perf report --sort comm,dso)
#

C'est l'ensemble de la sortie des données de profil de 14 Go…

Réponse acceptée :

Si vous distribuez les calculs avec MPI, l'utilisation d'un outil compatible MPI vous donnerait des résultats plus sensibles :avec une application distribuée, vous pourriez avoir des problèmes de déséquilibre de charge, où un processus MPI est inactif en attendant que les données proviennent d'autres processus. . S'il vous arrive de profiler exactement ce processus MPI, votre profil de performance sera complètement faux.

Ainsi, la première étape consiste généralement à connaître le modèle de communication et d'équilibrage de charge de votre programme et à identifier un exemple d'entrée qui vous donne la charge de travail souhaitée (par exemple, gourmand en CPU au rang 0). Par exemple, mpiP est un MPI outil de profilage qui peut produire un rapport très complet sur le modèle de communication, le temps pris par chaque appel MPI, etc.

Ensuite, vous pouvez exécuter un outil de profilage de code sur un ou plusieurs rangs MPI sélectionnés. Quoi qu'il en soit, en utilisant perf sur un seul rang MPI n'est probablement pas une bonne idée car ses mesures contiendront également les performances du code de la bibliothèque MPI, ce qui n'est probablement pas ce que vous recherchez.


Linux
  1. Comment utiliser journalctl pour analyser les journaux sous Linux

  2. Comment migrer de CentOS 8 vers Rocky Linux 8

  3. Comment enregistrer de l'audio avec ffmpeg sous Linux ?

  4. Comment obtenir le nom d'hôte de l'IP (Linux) ?

  5. Comment obtenir un masque de réseau à partir de bash ?

Comment accéder aux partitions Linux à partir de Windows 10

Comment afficher les données d'un fichier texte sous Linux

Comment supprimer une commande de l'historique sous Linux

Comment installer un logiciel à partir de la source sous Linux

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment construire le noyau Linux à partir de zéro