Manuel de suivi dynamique Solaris

Démarrage

DTrace vous aide à comprendre un système logiciel en vous permettant de modifier de manière dynamique le noyau du système d'exploitation et les processus utilisateur afin d'enregistrer les données que vous indiquez à des emplacements choisis, appelés sondes. Une sonde est un emplacement ou une activité à laquelle DTrace peut lier une requête pour effectuer une série d'actions, comme l'enregistrement d'un suivi de pile, d'un horodatage ou d'un argument à une fonction. Les sondes s'apparentent à des capteurs programmables répartis sur l'ensemble de votre système Solaris, à des emplacements stratégiques. Si vous souhaitez en comprendre le fonctionnement, utilisez DTrace pour programmer les capteurs appropriés afin d'enregistrer les informations que vous estimez utiles. Ensuite, dès qu'une sonde se déclenche, DTrace rassemble les données obtenues et les consigne dans un rapport. Si vous ne spécifiez pas d'action à effectuer pour une sonde, DTrace se contentera de prendre note de chaque déclenchement de sonde.

Dans DTrace, chaque sonde porte deux noms : un ID unique sous forme de nombre entier et une chaîne interprétable par l'utilisateur. Notre apprentissage de DTrace va commencer par la création de requêtes très simples avec la sonde appelée BEGIN, qui se déclenche à chaque nouvelle requête de suivi. Vous pouvez utiliser l'option -n de l'utilitaire dtrace(1M) pour activer une sonde utilisant son nom de chaîne. Tapez la commande suivante :


# dtrace -n BEGIN

Après un court instant, DTrace vous informe de l'activation de la sonde et une ligne de sortie s'affiche, indiquant que la sonde BEGIN s'est déclenchée. Dès l'affichage de cette sortie, dtrace reste à l'état de pause dans l'attente du déclenchement d'autres sondes. Puisque vous n'avez pas activé d'autres sondes et que BEGIN ne se déclenche qu'une seule fois, appuyez sur Control-C dans votre shell pour quitter dtrace et revenir à votre invite de shell :


# dtrace -n BEGIN
dtrace: description 'BEGIN' matched 1 probe
CPU     ID		      FUNCTION:NAME
  0      1                  :BEGIN
^C
#

La sortie indique que la sonde appelée BEGIN s'est déclenchée une fois et son nom ainsi que son ID de nombre entier, 1, sont affichés. Notez que, par défaut, le nom sous forme de nombre entier de la CPU sur laquelle la sonde s'est déclenchée s'affiche. Dans cet exemple, la colonne CPU indique que la commande dtrace était en cours d'exécution sur la CPU 0 lors du déclenchement de la sonde.

Vous pouvez créer des requêtes DTrace avec n'importe quel nombre de sondes et d'actions. Procédons à la création d'une requête simple avec deux sondes en ajoutant la sonde END à la commande de l'exemple précédent. La sonde END se déclenche lors de l'achèvement de l'opération de suivi. Saisissez la commande suivante, puis appuyez à nouveau sur Control-C dans votre shell après l'affichage de la ligne de sortie pour la sonde BEGIN :


# dtrace -n BEGIN -n END
dtrace: description 'BEGIN' matched 1 probe
dtrace: description 'END' matched 1 probe
CPU     ID		      FUNCTION:NAME
  0      1                  :BEGIN
^C
  0      2                    :END
#

Vous constaterez qu'en appuyant sur Control-C pour quitter dtrace la sonde END se déclenche. dtrace signale le déclenchement de cette sonde avant la fermeture du programme.

Maintenant que vous en savez un peu plus sur le nommage et l'activation de sondes, vous êtes prêt à écrire la version DTrace du programme classique “Hello, World.” Vous pouvez non seulement saisir les tentatives DTrace sur la ligne de commande, mais également les écrire dans des fichiers texte avec le langage de programmation D. Dans un éditeur de texte, créez un nouveau fichier appelé hello.d et saisissez votre premier programme D :


Exemple 1–1 hello.d : Hello, World en langage de programmation D

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

Après avoir enregistré votre programme, vous pouvez l'exécuter avec l'option -s de dtrace. Tapez la commande suivante :


# dtrace -s hello.d
dtrace: script 'hello.d' matched 1 probe
CPU     ID		      FUNCTION:NAME
  0	    1                  :BEGIN   hello, world
#

Comme vous pouvez le constater, dtrace affiche la même sortie que précédemment, suivie du texte “hello, world”. Contrairement à l'exemple précédent, vous n'avez pas eu besoin d'attendre ou d'appuyer sur Control-C. Ces modifications ont été le résultat des actions spécifiées pour la sonde BEGIN dans hello.d. Procédons à l'exploration de la structure de votre programme D de façon plus détaillée afin de comprendre ce qui s'est produit.

Chaque programme D se compose d'une série de clauses, chacune d'entre elles décrivant une ou plusieurs sondes à activer et un ensemble d'actions facultatives à exécuter lors du déclenchement de la sonde. Ces actions sont répertoriées sous la forme d'une série d'instructions entre accolades { } précédées du nom de la sonde. Chaque instruction se termine par un point-virgule (;). Votre première instruction utilise la fonction trace() pour indiquer que DTrace doit enregistrer l'argument spécifié, la chaîne “hello, world”, lors du déclenchement de la sonde BEGIN puis afficher le résultat. La seconde instruction utilise la fonction exit() pour indiquer que DTrace doit interrompre le suivi et quitter la commande dtrace. DTrace fournit un ensemble de fonctions utiles telles que trace() et exit() pour appeler vos programmes D. Pour appeler une fonction, spécifiez son nom suivi d'une liste d'arguments entre parenthèses. Toutes les fonctions D sont décrites au·Chapitre10Actions et sous-routines.

À présent, si vous connaissez le langage de programmation C, vous avez dû vous rendre compte, à la lumière des exemples et des noms utilisés, que le langage de programmation D présentait de fortes similarités avec C. En effet, D est dérivé d'un grand sous-ensemble de C, combiné à un ensemble spécial de fonctions et de variables permettant de faciliter le suivi. Ces fonctionnalités vous seront présentées plus en détails dans les chapitres suivants. Si vous avez déjà écrit un programme C auparavant, vous pourrez transférer immédiatement la plupart de vos connaissances pour créer des programmes de suivi en D. Dans le cas contraire, l'apprentissage de D reste très accessible. À la fin de ce chapitre, vous maîtriserez l'ensemble de la syntaxe. Mais pour commencer, oublions un peu les règles du langage pour nous intéresser au fonctionnement de DTrace, avant de revenir à l'apprentissage de la création de programmes D plus intéressants.