7
votes

Analyse et profilage de l'application multi-thread

Nous disposons d'une application multithreadée qui a un traitement de paquets lourds sur plusieurs étapes de pipeline. L'application est en C sous Linux.

L'application complète fonctionne bien et n'a pas de solution de mémoire ni de problèmes de sécurité. Cependant, afin d'analyser l'application, comment pouvons-nous profiler et analyser les threads?

En particulier voici ce que nous sommes intéressés par:

  1. L'utilisation des ressources effectuée par chaque thread
  2. Fréquence et chronométrage avec lesquels les threads ont eu des contenances pour acquérir des serrures
  3. quantité de frais généraux due à la synchronisation
  4. Tous les goulots d'étranglement dans le système
  5. Quel est le meilleur débit de système que nous pouvons obtenir

    Quelles sont les meilleures techniques et outils disponibles pour la même chose?


1 commentaires

Avez-vous essayé des outils commerciaux? Par exemple: logiciel.intel.com/en-us/en- Articles / Intel-Parallel-Studio-Xe


4 Réponses :


0
votes

1) Je ne sais pas. Certains profileurs sont disponibles pour Linux.

2) Si vous êtes pipeline, chaque étape devrait faire suffisamment de travail pour que la conflit sur les files d'attente P-C soit minimale. Vous pouvez creuser cela avec quelques timings - si une étape prend 10 ms + pour traiter un paquet, vous pouvez oublier les problèmes de contentions / de verrouillage. Si cela prend 100US, vous devriez envisager de fusionner quelques étapes de sorte que chaque étape fonctionne plus.

3) identique à (2), sauf s'il existe une question de synchronisation distincte avec certaines données globales ou autre.

4) Dumping / Lancement des comptes de la file d'attente Chaque seconde serait utile. La file d'attente la plus longue sera avant la scène avec le cou le plus étroit.

5) Aucune idée - Ne sais pas comment votre système actuel fonctionne, quel matériel il marche sur etc. Il existe des optimisations «normales» - éliminant les appels de Memory-Manager avec des pools d'objets, ajoutant des fils supplémentaires aux étapes les plus lourdes Chargements processeurs, des choses comme ça, mais 'Quel est le meilleur débit de système que nous pouvons obtenir' - trop éthéré à dire.


0 commentaires


0
votes

Avez-vous une flexibilité à développer sous Darwin (OSX) et déployez-vous sur Linux? Les outils d'analyse de la performance sont excellents et faciles à utiliser ( Viewer de requin et de fil sont utiles à votre objectif) .

Il existe de nombreux outils de performance Linux, bien sûr. gprof, Valgrind (avec cachegrind, callgrind, massif) et VTUNE fera de quoi vous avez besoin.

À ma connaissance, il n'y a aucun outil qui répondra directement à vos questions. Cependant, les réponses peuvent être trouvées par la croisée de la croisée des points de données et des métriques des solutions basées sur l'instrumentation et l'échantillonnage.


0 commentaires

3
votes

Regardez à Amplificateur Intel VTune XE (anciennement ... Profileur de fil Intel) pour voir si cela répondra à vos besoins. Ceci et d'autres outils de développement Intel Linux sont disponibles gratuitement pour non commercial Utilisez .

dans la vidéo Utilisation de la timeline dans Intel VTune Amplificateur XE Une chronologie d'une application multi-threadée est démontrée. Le présentateur utilise un affichage graphique pour afficher l'activité Serrure et comment creuser jusqu'à la ligne source de la sertisseuse particulière provoquant la sérialisation. À 9h20, le présentateur mentionne "avec l'API de cadre, vous pouvez marquer de manière programmable certains événements ou phases de votre code. Et ces marques apparaîtront sur la chronologie."


0 commentaires