Question

Il existe de nombreux outils d'instrumentation statiques et dynamiques. Suie est un outil d'instrumentation statique pour Java bytecode. Pin et Valgrind sont des outils d'instrumentation dynamique pour les binaires.

Quels sont les avantages et les inconvénients pour les outils d'instrumentation statiques et dynamiques? Je pense que les outils d'instrumentation statiques sont mieux en termes de performances d'exécution, alors que les outils dynamiques sont plus puissants. S'il vous plaît les comparer en termes de capacité et de performance.

De plus, quelle est la différence en utilisant des outils d'instrumentation de l'écriture passe LLVM?

Était-ce utile?

La solution

Je suppose que le besoin est de découvrir le code qui prend beaucoup de temps et que vous pouvez optimiser pour sauver ce temps. C'est un objectif différent de routines juste de synchronisation.

Je suis sceptique des analyseurs statiques car tout dépend de la combinaison de données d'entrée.

instrumentation dynamique tente de mesurer les propriétés des fonctions telles que: le temps d'autonomie et le temps total, absolu, moyenne, et pour cent. Appellent également compte, et le rôle de chaque routine dans le graphe d'appel.

instrumentation dynamique (à la gprof ) a été la norme de fait depuis des décennies, mais il est très loin d'être le dernier mot. D'une part, il est important de se rendre compte que la plupart des statistiques, il vous donne manque le point en termes de votre besoin initial.

Ces jours (à mon humble avis), vous avez besoin d'un profileur d'échantillonnage qui échantillonne la pile d'appel, non seulement le compteur de programme. Il faut goûter à temps-horloge murale, pas seulement le temps CPU. Les échantillons ne doivent pas être tirés à haute fréquence. Il faut supprimer l'échantillonnage lorsque l'application est en attente d'entrée utilisateur. Il devrait vous donner des informations à la ligne ou au niveau instruction, non seulement au niveau de la fonction. La statistique la plus importante, il devrait vous donner une ligne de code est le pourcentage d'échantillons contenant, parce que c'est la mesure la plus directe du temps qui peut être sauvé si cette ligne est optimisée.

Quelques profileurs peuvent le faire, et Oprofile RotateRight / Zoom en particulier.

Autres conseils

Les avantages de l'instrumentation statique est le fait que l'analyse ne dépend pas de l'entrée. L'analyse se produit sur le code original et comprend tous les chemins du code. Couverture totale. Ce type d'instrumentation réécrit habituellement le binaire qui est prêt à être exécuté sans avoir besoin d'un autre processus lors de l'exécution. Cela signifie également que le code courir vite, avec la seule tête provenant du code injecté. L'inconvénient de l'instrumentation statique est l'analyse non détaillée qui est due à l'absence d'informations d'exécution et à cause de cela, est parfois très difficile d'atteindre vos objectifs.

De l'autre côté, l'instrumentation dynamique ne comprend tous les détails et informations au cours de la période de temps du code. Dans la plupart des cas, les outils qui effectuent l'instrumentation dynamique sont faciles à écrire. D'autre part, ne sont pas en mesure d'obtenir une couverture complète du code en raison du fait que le chemin d'exécution dépend des entrées données. De plus, le fait qu'il ya un besoin d'un processus externe à fixer et instrument l'original rend les choses plus lentement.

AFAIC, passe LLVM sont utilisés pour l'instrumentation statique, car le code généré est au moment de la compilation et est déjà écrit dans le binaire final et comprend que tous les avantages et les inconvénients des techniques d'instrumentation statiques.

Pour conclure, il est une question de ce que vous avez besoin. Vous devez choisir le bon outil pour votre travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top