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. p>
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? p>
En particulier voici ce que nous sommes intéressés par: p>
Quelles sont les meilleures techniques et outils disponibles pour la même chose? p>
4 Réponses :
1) Je ne sais pas. Certains profileurs sont disponibles pour Linux. P>
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. P>
3) identique à (2), sauf s'il existe une question de synchronisation distincte avec certaines données globales ou autre. P>
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. P>
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. P>
J'ai travaillé sur un système similaire il y a quelques années. Voici comment je l'ai fait: p>
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) . p>
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. P>
À 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. P>
Regardez à Amplificateur Intel VTune XE A> (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 . P>
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 forte> 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." EM> P>
Avez-vous essayé des outils commerciaux? Par exemple: logiciel.intel.com/en-us/en- Articles / Intel-Parallel-Studio-Xe