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.