Handbuch zur dynamischen Ablaufverfolgung in Solaris

Timerauflösung

Der Provider profile stützt sich auf Intervall-Timer mit frei wählbarer Auflösung im Betriebssystem. Auf Architekturen, die keine wirklich auf arbiträren Intervallen beruhenden Interrupts unterstützen, ist die Frequenz durch den Systemuhrtakt begrenzt, die von der Kernelvariable hz vorgegeben ist. Prüfpunkte mit einer höheren Frequenz als hz werden auf diesen Architekturen mehrmals alle 1/hz Sekunden ausgelöst. Beispielsweise wird ein profile-Prüfpunkt mit 1000 Hertz auf einer solchen Architektur, auf der hz auf 100 gesetzt ist, alle zehn Millisekunden zehnmal schnell hintereinander ausgelöst. Auf einer Plattform, die arbiträre Auflösungen unterstützt, würde der profile-Prüfpunkt mit 1000 Hertz genau jede Millisekunde einmal ausgelöst werden.

Die Auflösung einer Architektur lässt sich wie folgt testen:

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

Auf einer Architektur, die profile-Prüfpunkte mit arbiträrer Auflösung unterstützt, ergibt die Ausführung des Beispielskripts eine gleichmäßige Verteilung:


# 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

Auf einer Architektur, die profile-Prüfpunkte mit arbiträrer Auflösung nicht unterstützt, ergibt die Ausführung des Beispielskripts eine ungleichmäßige Verteilung:


# 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

Auf diesen Architekturen kann hz zur Verbesserung der effektiven Profilauflösung unter /etc/system manuell angepasst werden.

Derzeit unterstützen alle Varianten von UltraSPARC (sun4u) profile-Prüfpunkte mit arbiträrer Auflösung. Auch zahlreiche Varianten der x86-Architektur (i86pc) bieten Unterstützung für profile-Prüfpunkte mit frei wählbarer Auflösung, einige ältere Varianten jedoch nicht.