Guía de seguimiento dinámico de Solaris

Resolución del temporizador

El proveedor profile utiliza temporizadores de intervalo de resolución arbitraria en el sistema operativo. En arquitecturas que no admitan auténticas interrupciones basadas en el tiempo de resolución arbitraria, la frecuencia está limitada por la frecuencia de reloj del sistema, especificada por la variable del núcleo hz. Los sondeos de frecuencia superior a hz se activarán en este tipo de arquitecturas un cierto número de veces cada 1/hz segundos. Por ejemplo, un sondeo profile de 1.000 hercios en dicha arquitectura, con hz definido en 100, se activará diez veces en una rápida sucesión cada diez milisegundos. En plataformas que admitan resolución arbitraria, un sondeo profile de 1.000 hercios se activará exactamente cada un milisegundo.

El siguiente ejemplo prueba la resolución de una arquitectura determinada:

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

En una arquitectura que admita sondeos profile con resolución arbitraria, la ejecución de la secuencia de comandos de ejemplo ofrecerá una distribución equilibrada:


# 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

En una arquitectura que no admita sondeos profile con resolución arbitraria, la ejecución de la secuencia de comandos de ejemplo ofrecerá una distribución desigual:


# 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

En estas arquitecturas, hz podría ajustarse manualmente en /etc/system para mejorar la resolución profile efectiva.

Actualmente, todas las variantes de UltraSPARC (sun4u) admiten sondeos profile con resolución arbitraria. Diversas variantes de la arquitectura x86 (i86pc) admiten también sondeos profile con resolución arbitraria, aunque algunas variantes más antiguas no lo hacen.