Manuel de suivi dynamique Solaris

change-pri

La préemption est basée sur des priorités. Vous pouvez ainsi souhaiter observer les changements de priorité dans le temps. L'exemple suivant utilise la sonde change-pri pour afficher ces informations :

sched:::change-pri
{
	@[stringof(args[0]->pr_clname)] =
	    lquantize(args[2] - args[0]->pr_pri, -50, 50, 5);
}

L'exemple de script capture le degré auquel la priorité est augmentée ou réduite, et regroupe par classe de planification. Exécuter le script ci-dessus engendre une sortie similaire à l'exemple suivant :


# dtrace -s ./pri.d
dtrace: script './pri.d' matched 10 probes
^C
 IA                                                
           value  -------------- Distribution ------------ count    
           < -50 |                                         20       
             -50 |@                                        38       
             -45 |                                         4        
             -40 |                                         13       
             -35 |                                         12       
             -30 |                                         18       
             -25 |                                         18       
             -20 |                                         23       
             -15 |                                         6        
             -10 |@@@@@@@@                                 201      
              -5 |@@@@@@                                   160      
               0 |@@@@@                                    138      
               5 |@                                        47       
              10 |@@                                       66       
              15 |@                                        36       
              20 |@                                        26       
              25 |@                                        28       
              30 |                                         18       
              35 |                                         22       
              40 |                                         8        
              45 |                                         11       
           >= 50 |@                                        34       

  TS                                                
           value  -------------- Distribution ------------ count    
             -15 |                                         0        
             -10 |@                                        1        
              -5 |@@@@@@@@@@@@                             7        
               0 |@@@@@@@@@@@@@@@@@@@@                     12       
               5 |                                         0        
              10 |@@@@@                                    3        
              15 |                                         0

La sortie illustre la manipulation de priorité de la classe de planification Interactive (IA). Plutôt que d'observer la manipulation de priorité, vous pouvez souhaiter observer les valeurs de priorité d'un processus et d'un thread particuliers dans le temps. Le script suivant utilise la sonde change-pri pour afficher ces informations :

#pragma D option quiet

BEGIN
{
	start = timestamp;
}

sched:::change-pri
/args[1]->pr_pid == $1 && args[0]->pr_lwpid == $2/
{
	printf("%d %d\n", timestamp - start, args[2]);
}

tick-1sec
/++n == 5/
{
	exit(0);
}

Pour observer le changement de priorité dans le temps, entrez la commande suivante dans une fenêtre :


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

Dans une autre fenêtre, exécutez le script et redirigez la sortie vers un fichier :


# dtrace -s ./pritime.d 139208 1 > /tmp/pritime.out
#

Vous pouvez utiliser le fichier /tmp/pritime.out généré ci-dessus en entrée pour tracer le logiciel afin d'afficher sous forme graphique la priorité dans le temps. gnuplot est un package de traçage gratuit inclus sur le CD d'accompagnement du freeware Solaris. Par défaut, gnuplot est installé dans /opt/sfw/bin.