Je cours gprof sur mon exécutable, mais l'exécutable passe beaucoup de temps wait()
ing pour les processus de fils à remplir. Est-ce que le temps passé à attendre est pris en compte dans les horaires gprof?Est-ce que gprof prend le temps passé en compte?
Répondre
Je n'ai pas beaucoup utilisé gprof, mais à ma connaissance, ni les wait
ni les processus fils par voir ne sont profilés.
Voir un exemple simple:
#include <stdlib.h>
#include <unistd.h>
#include <limits.h>
void slow_function()
{
unsigned int i;
for (i = 0; i < UINT_MAX; i++);
}
void quick_function(pid_t child)
{
int status;
waitpid(child, &status, 0);
return;
}
int main(int argc, const char *argv[])
{
pid_t child;
child = fork();
if (child == 0) // child process
{
slow_function();
exit(0);
}
else
quick_function(child);
return 0;
}
La sortie gprof
en est (sur ma machine):
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 1 0.00 0.00 quick_function
Si vous voulez vraiment le profil Childs/fils, je vous suggère this comme point de départ.
Il semble qu'il existe une option pour consigner les processus forkés, this ibm article en parle un peu.
Le même article recommande d'essayer tprof, il est similaire à gprof utilisé, mais utilise différentes méthodes sous le capot qui pourraient donner une image plus précise pour les applications multiprocessus/multithreads.
gprof ne tient compte que du temps CPU réel dans votre processus. Ce qui fonctionne beaucoup mieux est quelque chose qui échantillonne la pile d'appels, et l'échantillonne sur horloge murale temps, pas de temps CPU. Bien sûr, les échantillons ne doivent pas être pris en attendant l'entrée de l'utilisateur (ou s'ils sont pris, ils doivent être éliminés). Certains profileurs peuvent faire tout cela, comme RotateRight/Zoom, ou vous pouvez utiliser pstack ou lsstack, but here's a simple way to do it.
- 1. impossible d'accumuler du temps avec gprof - le profileur gnu
- 2. Dans iPhone, comment calculer le temps passé?
- 3. Python question sur le temps passé
- 4. Temps passé entre les lancements, iPhone
- 5. Est-ce que le compilateur GCC C++ prend en compte les instructions __restrict?
- 6. RENDER_RESPONSE prend beaucoup de temps en couture
- 7. Le cryptage OpenSSL prend beaucoup de temps en charge
- 8. Le basculement DNS prend du temps
- 9. Compilation en g ++ pour gprof
- 10. RtlpNtMakeTemporaryKey - VerySleepy indique que cela prend beaucoup de temps
- 11. Le test de Visual Studio 2008 prend beaucoup de temps
- 12. ASP.NET MVC - Détecter le temps passé sur la page
- 13. Suivre le temps passé sur la page avec cookie
- 14. Comment calculer le temps passé avec PHP ou Zend_Date?
- 15. NSHost prend énormément de temps
- 16. Obtenez gprof au profil en fonction de l'heure de l'horloge murale?
- 17. Django, Haystack: affiche le temps passé par une recherche
- 18. Java: LinkedBlockingQueue prend-il en compte l'ordre des consommateurs?
- 19. Pourquoi le processus RSA Decryption prend plus de temps que le processus de cryptage?
- 20. Utilisation de gprof avec pthreads
- 21. Pourquoi Zend_Date ne prend-il en compte que les fuseaux horaires lors de l'analyse?
- 22. Comment écrire une expression régulière en Java qui prend en compte le contexte de la chaîne que je cherche?
- 23. gprof sur le problème Snow Leopard
- 24. Faire un compte qui prend en compte la vérification nulle - Comment dois-je l'appeler? SafeCount?
- 25. L'itération de liste prend tellement de temps?
- 26. Comment déterminer le temps passé entre deux objets de calendrier dans Java?
- 27. Page d'en-tête en PHP qui prend en compte le répertoire de l'application
- 28. django date filtre passé passé
- 29. Utilisation du type passé en tant que modèle en C++
- 30. MongoDB prend beaucoup de temps pour l'indexation