Manuel de suivi dynamique Solaris

Fournisseurs et sondes

Dans les exemples précédents, vous avez appris à utiliser deux sondes simples appelées BEGIN et END. Mais d'où ces sondes proviennent-elles ? Les sondes DTrace proviennent d'un ensemble de modules de noyau appelés fournisseurs, dont chacun exécute une instrumentation particulière pour créer des sondes. Lorsque vous utilisez DTrace, chaque fournisseur a la possibilité de publier les sondes qu'il peut fournir dans la structure DTrace. Vous pouvez ensuite activer vos actions de suivi et les lier à n'importe quelle sonde publiée. Pour répertorier toutes les sondes disponibles sur votre système, tapez la commande suivante :


# dtrace -l
  ID   PROVIDER            MODULE          FUNCTION NAME
   1     dtrace                                     BEGIN
   2     dtrace                                     END
   3     dtrace                                     ERROR
   4   lockstat           genunix       mutex_enter adaptive-acquire
   5   lockstat           genunix       mutex_enter adaptive-block
   6   lockstat           genunix       mutex_enter adaptive-spin
   7   lockstat           genunix       mutex_exit  adaptive-release

   ... many lines of output omitted ...

#

Vous risquez de devoir patienter quelques instants avant que la sortie ne s'affiche. Pour connaître le nombre total de sondes, vous pouvez taper la commande suivante :


# dtrace -l | wc -l
        30122

Il est possible que le total affiché par votre machine ne soit pas le même car le nombre de sondes dépend de votre plate-forme d'exploitation ainsi que des logiciels installés. Comme vous pouvez le constater, le nombre de sondes disponibles est très élevé, permettant ainsi d'observer les moindres recoins, autrefois obscurs, de votre système. En fait, même cette sortie n'est pas la liste complète car, comme vous le verrez ultérieurement, certains fournisseurs offrent la possibilité de créer de nouvelles sondes à la volée, en fonction de vos requêtes de suivi, rendant ainsi le nombre réel de sondes DTrace presque illimité.

Revenez maintenant à la sortie de dtrace -l dans la fenêtre de votre terminal. Vous pouvez remarquer que chaque sonde comporte les deux noms mentionnés précédemment, à savoir un ID sous forme de nombre entier et un nom interprétable par l'utilisateur. Le nom interprétable par l'utilisateur se compose de quatre parties, présentées sous la forme de colonnes séparées dans la sortie dtrace. Un nom de sonde se compose des quatre parties suivantes :

Fournisseur 

Nom du fournisseur DTrace publiant cette sonde. Il correspond généralement au nom du module de noyau DTrace qui exécute l'instrumentation permettant d'activer la sonde. 

Module 

Si cette sonde correspond à l'emplacement d'un programme spécifique, nom du module dans lequel se situe la sonde. Il s'agit soit du nom d'un module de noyau, soit du nom d'une bibliothèque utilisateur. 

Fonction 

Si cette sonde correspond à l'emplacement d'un programme spécifique, nom de la fonction du programme dans laquelle se situe la sonde. 

Nom 

Le composant final du nom de la sonde est un nom vous donnant une idée approximative de la signification sémantique de la sonde, comme BEGIN ou END.

Lors de l'écriture du nom complet d'une sonde, interprétable par l'utilisateur, écrivez les quatre parties du nom séparées par deux points, comme suit :

nom:fonction:module:fournisseur

Vous remarquerez que certaines sondes de la liste n'ont ni module ni fonction, comme les sondes BEGIN et END utilisées précédemment. Dans le cas de certaines sondes, ces champs restent vides car elles ne correspondent ni à une fonction ni à un emplacement de programme instrumenté. À la place, ces sondes font référence à un concept plus abstrait comme l'idée de fin de votre requête de suivi. Les sondes dont le nom est composé d'un module ou d'une fonction sont appelées sondes ancrées, tandis que les autres sont qualifiées de non ancrées.

Par convention, si vous ne spécifiez pas tous les champs d'un nom de sonde, DTrace effectue la recherche sur l'ensemble des sondes dont les parties du nom spécifiées correspondent aux critères. En d'autres termes, lorsque vous avez utilisé précédemment le nom de sonde BEGIN, cela revenait en fait à demander à DTrace de rechercher n'importe quelle sonde dont le champ de nom correspondait à BEGIN, quelle qu'ait été la valeur des champs fournisseur, module et fonction. Dans le cas présent, une seule sonde correspond à ces critères ; le résultat reste donc identique. Mais vous savez désormais que le vrai nom de la sonde BEGIN est dtrace:::BEGIN, ce qui indique que cette sonde est fournie par la structure DTrace elle-même et qu'elle n'est ancrée à aucune fonction. Par conséquent, le programme hello.d aurait pu être écrit comme suit et donner un résultat identique :

dtrace:::BEGIN
{
	trace("hello, world");
	exit(0);
}

Maintenant que vous avez compris d'où viennent les sondes et comment elles sont nommées, nous allons en apprendre davantage sur ce qui se produit lorsque vous activez des sondes et que vous demandez à DTrace d'exécuter des actions. Nous reprendrons ensuite notre présentation de D.