Guia de rastreamento dinâmico Solaris

Resolução do temporizador

O provedor profile usa temporizadores de intervalo de resolução arbitrário no sistema operacional. Em arquiteturas que não aceitam interrupções baseadas em tempo de resolução realmente arbitrário, a freqüência é limitada pela freqüência do relógio do sistema, que é especificada pela variável do kernel hz. Os testes de freqüência mais alta que hz em tais arquiteturas serão acionados algumas vezes a cada 1/ hz segundos. Por exemplo, um teste profile de 1000 hertz em uma arquitetura como tal com hz definido como 100 será acionado dez vezes em sucessão rápida a cada dez milessegundos. Em plataformas que aceitam resolução arbitrária, um teste profile de 1000 hertz seria acionado exatamente a cada um milissegundo.

O exemplo seguinte testa uma determinada resolução de arquitetura:

profile-5000
{
	/*
	 * We divide by 1,000,000 to convert nanoseconds to milliseconds, and
	 * then we take the value mod 10 to get the current millisecond within
	 * a 10 millisecond window.  On platforms that do not support truly
	 * arbitrary resolution profile probes, all of the profile-5000 probes
	 * will fire on roughly the same millisecond.  On platforms that
	 * support a truly arbitrary resolution, the probe firings will be
	 * evenly distributed across the milliseconds.
	 */
	@ms = lquantize((timestamp / 1000000) % 10, 0, 10, 1);
}

tick-1sec
/i++ >= 10/
{
	exit(0);
}

Em uma arquitetura que aceita testes profile de resolução arbitrária, executar o script de exemplo produzirá uma distribuição uniforme:


# dtrace -s ./restest.d
 dtrace: script './restest.d' matched 2 probes
CPU     ID                    FUNCTION:NAME
  0  33631                       :tick-1sec 


           value  ------------- Distribution ------------- count    
             < 0 |                                         0        
               0 |@@@                                      10760    
               1 |@@@@                                     10842    
               2 |@@@@                                     10861    
               3 |@@@                                      10820    
               4 |@@@                                      10819    
               5 |@@@                                      10817    
               6 |@@@@                                     10826    
               7 |@@@@                                     10847    
               8 |@@@@                                     10830    
               9 |@@@@                                     10830

Em uma arquitetura que não aceita testes profile de resolução arbitrária, executar o script de exemplo produzirá uma distribuição não-uniforme:


# dtrace -s ./restest.d
 dtrace: script './restest.d' matched 2 probes
 CPU     ID                    FUNCTION:NAME
  0  28321                       :tick-1sec 


           value  ------------- Distribution ------------- count    
               4 |                                         0        
               5 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  107864   
               6 |                                         424      
               7 |                                         255      
               8 |                                         496      
               9 |                                         0

Nestas arquiteturas, hz pode ser ajustado manualmente em /etc/system para aprimorar a resolução efetiva de profile.

Atualmente, todas as variantes de UltraSPARC (sun4u) aceitam testes profile de resolução arbitrária. Muitas variantes da arquitetura x86 (i86pc) também aceitam testes profile de resolução arbitrária, embora algumas variantes mais antigas não aceitem.