51 votes

Comment profiler une application C++ multithreadée sous Linux ?

J'avais l'habitude de faire tout mon profilage Linux avec gprof .

Cependant, avec mon multithreading mais son résultat semble être incohérent.

Maintenant, j'ai déterré ça :

http://sam.zoy.org/writings/programming/gprof.html

Cependant, cela date d'il y a longtemps et dans ma sortie gprof, il semble que ma gprof liste les fonctions utilisées par les threads non principaux.

Donc, mes questions sont :

  1. En 2010, puis-je facilement utiliser gprof pour profiler des applications Linux C++ multithreadées ? ( Ubuntu 9.10 )
  2. Quels autres outils dois-je envisager pour le profilage ?

5 votes

De préférence quelque chose qui ne soit pas aussi lent que valgrind.

2 votes

S'il vous plaît, dites-moi les alternatives, mais pas les alternatives. Vérifiez.

0 votes

Vous vouliez un profileur, ce dernier charge votre binaire et ajoute des crochets supplémentaires pour suivre l'exécution, ce qui fait qu'il sera toujours plus lent que si vous l'exécutez sans valgrind. Y a-t-il une raison pour laquelle vous avez un problème de ralentissement ? Je pense que valgrind a été utilisé pour profiler de grosses applications et qu'il n'a pas eu de problème - à moins que vous ayez une raison pour laquelle il ne peut pas fonctionner plus lentement pendant le profilage.

16voto

Laurynas Biveinis Points 6305

Edit : ajouté un autre réponse sur le profileur de l'homme pauvre, qui, à mon avis, est meilleur pour les applications multithread.

Jetez un coup d'œil à oprofile . L'overhead de profilage de cet outil est négligeable et il supporte les applications multithreads --- tant que vous ne voulez pas profiler la contention des mutex (qui est une partie très importante du profilage des applications multithreads).

1 votes

Zoom (à télécharger sur rotateright.com ) s'appuie sur oprofile et facilite grandement la compréhension des données.

0 votes

@federal Il semble que vous devez être un utilisateur Root pour installer Zoom +_+.

0 votes

Malheureusement, RotateRight a cessé de maintenir Zoom et n'a pas publié le code source.

7voto

Laurynas Biveinis Points 6305

Jetez un coup d'œil à le profiler du pauvre . Étonnamment, il existe peu d'autres outils qui, pour les applications multithreads, permettent à la fois le profilage du CPU et le profilage de la contention des mutex, et PMP fait les deux, tout en ne nécessitant aucune installation (tant que vous avez gdb).

6voto

Mike Dunlavey Points 25419

A Paul R a dit, jetez un coup d'oeil à Zoom. Vous pouvez également utiliser lsstack Il s'agit d'une approche peu technique mais étonnamment efficace, par rapport à gprof .

Ajouté : Puisque vous avez clarifié que vous exécutez OpenGL à 33ms, ma recommandation précédente est maintenue. De plus, ce que j'ai personnellement fait dans des situations comme celle-ci est à la fois efficace et non intuitif. Faites-le fonctionner avec une charge de travail typique ou problématique, et arrêtez-le, manuellement, dans ses traces, et voyez ce qu'il fait et pourquoi. Faites-le plusieurs fois. Maintenant, si seulement occasionnellement se comporte mal, vous voudriez l'arrêter uniquement pendant qu'il se comporte mal. Ce n'est pas facile, mais j'ai utilisé une interruption de réveil réglée sur le bon délai. Par exemple, si une image sur 100 prend plus de 33ms, au début d'une image, réglez le timer sur 35ms, et à la fin d'une image, éteignez-le. De cette façon, il ne s'interrompra que lorsque le code prendra trop de temps, et il vous montrera pourquoi. Bien sûr, un échantillon peut manquer le code coupable, mais 20 échantillons ne le manqueront pas.

6voto

stefanB Points 27796

Jetez un coup d'œil à Valgrind .

3 votes

Le problème qui m'a conduit à ce fil de discussion est les différences d'ordonnancement étranges de Callgrind et le fait qu'il exécute tout dans un seul fil. J'essaie de trouver des goulots d'étranglement à partir de mes opérations atomiques et de mes spinlocks, le fait de tout faire tourner en single thread tue la contention et les problèmes de performance qui peuvent en découler. Donc Valgrind, malgré mes souhaits contraires, n'est pas toujours le profileur de choix.

6voto

Paul R Points 104036

Jetez un coup d'œil à Zoom .

0 votes

Il semble que si je ne suis pas un Root, je ne peux pas l'installer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X