Qu'est-ce que l'instrumentation?

j'ai entendu ce terme beaucoup utilisé dans le même contexte que l'exploitation forestière, mais je n'arrive pas à trouver une définition claire de ce qu'il est réellement.

s'agit-il simplement d'une catégorie plus générale d'outils et d'activités d'enregistrement et de surveillance?

veuillez fournir un exemple de code ou de scénario quand et comment l'instrumentation doit être utilisée.

18
demandé sur Jon Seigel 2010-03-12 20:22:38

4 réponses

j'écris des outils qui exécutent l'instrumentation. Voici donc ce que je pense c'est.

  • DLL réécriture. C'est ce que font des outils comme purifier et quantifier. Une réponse précédente à cette question dit qu'ils instrument post-compilation/lien. Ce n'est pas correct. Purifier et quantifier l'instrument DLL la première fois qu'il est exécuté après un cycle de compilation/lien, puis mettre en cache le résultat pour qu'il puisse être utilisé plus rapidement la prochaine fois. Pour les grands applications, le profilage des DLLs peut prendre beaucoup de temps. Il est également problématique - dans une entreprise à laquelle j'ai travaillé entre 1998-2000, nous avions une grande application de ligne de 2 millions qui prendrait 4 heures à l'instrument, et 2 des DLLs se serait écrasé au hasard pendant l'instrumentation et si l'un ou l'autre a échoué, vous auriez supprimer les deux d'entre eux, puis recommencer.

  • À la place de l'instrumentation. Ceci est similaire à la réécriture DLL, sauf que la DLL n'est pas modifié et le l'image sur le disque reste intacte. Les fonctions DLL sont accrochées de manière appropriée à la tâche requise lorsque la DLL est chargée pour la première fois (soit pendant le démarrage ou après un appel à LoadLibrary(Ex). Vous pouvez voir des techniques similaires dans la bibliothèque de Microsoft détours.

  • À la volée de l'instrumentation. Semblable à en place, mais seulement Instrumente réellement une méthode la première fois que la méthode est exécutée. Il s'agit d'une opération plus complexe qu'en place et qui retarde la pénalité d'instrumentation jusqu'à la première rencontre de la méthode. Selon ce que vous faites, cela pourrait être une bonne ou une mauvaise chose.

  • langage Intermédiaire de l'instrumentation. C'est ce qui est souvent fait avec les langages Java et .Net (C~, VB.Net, F#, etc). Le langage est compilé en langage intermédiaire qui est ensuite exécuté par une machine virtuelle. La machine virtuelle fournit une interface (JVMTI pour Java, ICorProfiler (2) pour .Net) qui vous permet de surveiller ce que fait la machine virtuelle. Certaines de ces options vous permettent de modifier la langue intermédiaire juste avant qu'elle ne soit compilée dans des instructions exécutables.

  • langage Intermédiaire de l'instrumentation par la réflexion. Java et .Net fournissent tous deux des API de réflexion qui permettent la découverte de métadonnées sur les méthodes. En utilisant ces données, vous pouvez créer de nouvelles méthodes à la volée et les méthodes existantes de l'instrument tout comme avec le instrumentation de langue Intermédiaire déjà mentionnée.

  • Compilation time instrumentation. Cette technique est utilisée au moment de la compilation pour insérer des instructions appropriées dans l'application pendant la compilation. Peu utilisée, une fonction de profilage de Visual Studio fournit cette fonctionnalité. Nécessite une reconstruction complète et lien.

  • code Source de l'instrumentation. Cette technique est utilisée pour modifier le code source insérez le code approprié (généralement compilé conditionnellement pour pouvoir l'éteindre).

  • moment de la Liaison de l'instrumentation. Cette technique n'est vraiment utile que pour remplacer les allocateurs de mémoire par défaut par des allocateurs de traçage. Le détecteur de fuites de mémoire Sentinel sur Solaris/HP au début des années 1990 en est un exemple précoce.

les diverses méthodes d'instrumentation en place et en vol sont pleines de danger comme il est très difficile d'arrêter tous les threads en toute sécurité et de modifier le code sans courir le risque d'exiger un appel API qui pourrait vouloir accéder à une serrure qui est tenue par un thread que vous venez de mettre en pause - vous ne voulez pas faire cela, vous obtiendrez une impasse. Vous devez également vérifier si l'un des autres threads sont en exécution de cette méthode, parce que si vous ne pouvez pas le modifier.

les méthodes d'instrumentation basées sur la machine virtuelle sont beaucoup plus faciles à utiliser que la machine virtuelle garantit que vous pouvez modifier le code en toute sécurité à ce point.

  • (modifier - cet article ajouté plus tard) IAT hooking instrumentation. Cela impliquait de modifier la table d'ajout d'import pour les fonctions liées dans d'autres bibliothèques DLLs/partagées. Ce type d'instrumentation est probablement la méthode la plus simple pour travailler, vous n'avez pas besoin de savoir comment démonter et modifier les binaires existants, ou faire la même chose avec les opcodes machines virtuelles. Tu n'as qu'à patcher la table d'importation. avec votre propre adresse de fonction et l'appel de la fonction réelle de votre crochet. Utilisé dans de nombreux outils commerciaux et open source.

je pense que je les ai tous couverts, j'espère que ça aidera.

12
répondu Stephen Kellett 2010-03-15 11:09:28

c'est un terme général pour faire quelque chose à votre code nécessaire pour une analyse plus poussée.

spécialement pour les langages comme C ou C++, il y a des outils comme Purify ou Quantify that profile memory usage, performance statistics, etc. Pour que ces programmes de profilage fonctionnent correctement, une étape d '"instrumentation" est nécessaire pour insérer les compteurs, les vérifications des limites des réseaux, etc. qui sont utilisés par les programmes de profilage. Notez que dans le scénario purifier/quantifier, l'instrumentation est faite automatiquement comme une étape de post-compilation (en fait, c'est une étape ajoutée au processus de lien) et vous ne touchez pas votre code source.

une partie de cela est moins nécessaire avec le code dynamique ou VM (c'est-à-dire que des outils de profilage comme OptimizeIt sont disponibles pour Java qui fait beaucoup de ce que Quantum fait, mais aucun lien spécial n'est requis) mais cela ne nie pas le concept.

5
répondu Matt 2010-03-12 17:32:53

instrumentation est habituellement utilisé dans l'analyse de code dynamique.

il diffère de la journalisation car l'instrumentation est habituellement faite automatiquement par le logiciel, alors que la journalisation a besoin de l'intelligence humaine pour insérer le code de journalisation.

3
répondu Yin Zhu 2010-03-12 17:25:54

un extrait de wikipedia article

dans le contexte de la programmation informatique, l'instrumentation se réfère à un capacité de surveiller ou de mesurer le niveau de performance d'un produit, diagnostiquer les erreurs et écrire des informations de trace. Les programmeurs mettent en œuvre instrumentation sous forme d'instructions codées qui surveillent des composants d'un système (par exemple, les instructions peuvent journalisation de sortie informations devant figurer sur écran.) Lorsqu'une demande contient instrumentation code, il peut être géré à l'aide d'un outil de gestion. L'Instrumentation est nécessaire pour examiner les performances des application. Les approches d'Instrumentation peuvent être de deux types, source instrumentation et instrumentation binaire.

1
répondu Shajo 2015-02-04 09:06:05