Guia de rastreamento dinâmico Solaris

change-pri

A preempção é baseada em prioridades, por isso, talvez você queira observar alterações na prioridade ao longo do tempo. O exemplo a seguir usa o teste change-pri para exibir estas informações:

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

O script de exemplo captura o grau para o qual a prioridade é elevada ou diminuída e agrega por classe de agendamento. Executar o script acima resultará numa saída semelhante ao exemplo seguinte:


# 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

O resultado mostra a manipulação de prioridade da classe de agendamento Interactive (IA). Em vez de ver a manipulação de prioridade, talvez você queira ver os valores de prioridade de um determinado processo e segmento ao longo do tempo. O script a seguir usa o teste change-pri para exibir estas informações:

#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 as alterações em prioridades ao longo do tempo, digite o seguinte comando em uma janela:


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

Em outra janela, execute o script e redirecione o resultado para um arquivo:


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

Você pode usar o arquivo /tmp/pritime.out que é gerado acima como entrada para um software de plotagem para exibir a prioridade graficamente ao longo do tempo. O gnuplot é um pacote de plotagem disponível livremente que está incluído no CD complementar do Solaris Freeware. Por padrão, o gnuplot é instalado em /opt/sfw/bin.