Manuel de suivi dynamique Solaris

Sondes profile-n

Une sonde profile-n se déclenche à chaque intervalle défini sur chaque CPU à un niveau élevé d'interruption. L'intervalle de déclenchement de la sonde est indiqué par la valeur de n : la source d'interruption se déclenche n fois par seconde. n peut également porter un suffixe de temps facultatif, auquel cas n est dans les unités exprimées par le suffixe. Les suffixes valides et les unités qu'ils expriment sont répertoriés dans le Tableau 19–1.

Tableau 19–1 Suffixes d'heure valides

Suffixe 

Unités de temps 

nsec ou ns

nanosecondes 

usec ou us

microsecondes 

msec ou ms

millièmes de seconde 

sec ou s

secondes 

min ou m

minutes 

hour ou h

heures 

day ou d

jours 

hz

hertz (fréquence par seconde) 

L'exemple suivant crée une sonde se déclenchant à 97 hertz pour échantillonner le processus en cours d'exécution :

#pragma D option quiet

profile-97
/pid != 0/
{
	@proc[pid, execname] = count();
}

END
{
	printf("%-8s %-40s %s\n", "PID", "CMD", "COUNT");
	printa("%-8d %-40s %@d\n", @proc);
}

L'exécution de l'exemple ci-dessus sur une courte période donne une sortie similaire à l'exemple suivant :


# dtrace -s ./prof.d
^C
PID      CMD                                      COUNT
223887   sh                                       1
100360   httpd                                    1
100409   mibiisa                                  1
223887   uname                                    1
218848   sh                                       2
218984   adeptedit                                2
100224   nscd                                     3
3        fsflush                                  4
2        pageout                                  6
100372   java                                     7
115279   xterm                                    7
100460   Xsun                                     7
100475   perfbar                                  9
223888   prstat                                   15

Vous pouvez également utiliser le fournisseur profile-n pour échantillonner des informations sur le processus en cours d'exécution. L'exemple suivant de script D utilise une sonde profile de 1 001 hertz pour échantillonner la priorité actuelle d'un processus spécifié :

profile-1001
/pid == $1/
{
	@proc[execname] = lquantize(curlwpsinfo->pr_pri, 0, 100, 10);
}

Pour voir cet exemple de script en action, entrez les commandes suivantes dans une fenêtre :


$ echo $$
12345
$ while true ; do let i=0 ; done

Dans une autre fenêtre, exécutez le script D sur une courte durée, en remplaçant 12345 par l'ID de processus renvoyé par la commande echo :


# dtrace -s ./profpri.d 12345
 dtrace: script './profpri.d' matched 1 probe
^C
ksh                                               
           value  ------------- Distribution ------------- count    
             < 0 |                                         0        
               0 |@@@@@@@@@@@@@@@@@@@@@                    7443     
              10 |@@@@@@                                   2235     
              20 |@@@@                                     1679     
              30 |@@@                                      1119     
              40 |@                                        560      
              50 |@                                        554      
              60 |                                         0 

Cette sortie illustre la polarisation de la classe de planification du partage de temps. Le processus de shell étant en rotation sur la CPU, sa priorité est sans cesse diminuée par le système. Si le processus de shell était exécuté moins fréquemment, sa priorité serait supérieure. Pour voir ce résultat, appuyez sur Ctrl+C dans le shell en rotation, puis réexécutez le script :


# dtrace -s ./profpri.d 494621
 dtrace: script './profpri.d' matched 1 probe

Dans le shell, entrez maintenant quelques caractères. Une fois le script DTrace terminé, une sortie similaire à l'exemple suivant s'affiche :


ksh                                               
           value  ------------- Distribution ------------- count    
              40 |                                         0        
              50 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 14       
              60 |                                         0

Le processus de shell étant auparavant au repos dans l'attente d'une saisie utilisateur plutôt qu'en rotation sur la CPU, son exécution s'est faite à une priorité bien plus élevée.