Guía de seguimiento dinámico de Solaris

change-pri

La preempción se basa en las prioridades, por lo que puede que desee observar los cambios de prioridad durante un periodo de tiempo. El siguiente ejemplo utiliza el sondeo change-pri para visualizar esta información:

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

La secuencia de comandos de ejemplo captura el grado de aumento o disminución de la prioridad, y realiza adiciones según la clase de planificación. La ejecución de la secuencia de comandos anterior devuelve una salida similar al siguiente ejemplo:


# 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

El resultado muestra la manipulación de prioridad de la clase de planificación Interactive (IA). En lugar de percibir la manipulación de la prioridad, quizá desee ver los valores de prioridad de un proceso y subproceso determinado a lo largo del tiempo. La siguiente secuencia de comandos utiliza el sondeo change-pri para visualizar esta información:

#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);
}

Para ver el cambio sufrido por la prioridad a lo largo del tiempo, escriba el siguiente comando en una ventana:


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

En otra ventana, ejecute la secuencia de comandos y redirija la salida a un archivo:


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

Puede utilizar el archivo /tmp/pritime.out que se genera como entrada para un software de trazos para visualizar gráficamente la prioridad a lo largo del tiempo. gnuplot es un paquete de trazos gratuito que se incluye en el CD compañero freeware de Solaris. De forma predeterminada, gnuplot está instalado en /opt/sfw/bin.