Handbuch zur dynamischen Ablaufverfolgung in Solaris

Abschneiden von Aggregaten

Bei der Betrachtung von Aggregatergebnissen interessieren häufig nur die oberen Resultate. Die zu allen anderen außer den höchsten Werten gehörenden Schlüssel und Werte sind irrelevant. Auch kann es nützlich sein, durch Entfernen der Schlüssel und der Werte ein ganzes Aggregatergebnis zu löschen. Zu beiden Zwecken dient die DTrace-Funktion trunc().

Die Parameter für trunc() sind ein Aggregat und ein optionaler Kürzungswert. Ohne Kürzungswert verwirft trunc() sowohl die Aggregatwerte als auch die Aggregatschlüssel für das gesamte Aggregat. Ist ein Kürzungswert n vorhanden, löscht trunc() die Aggregatwerte und -schlüssel mit Ausnahme der Werte und Schlüssel, die zu den n höchsten Werten gehören. Das heißt, dass trunc(@foo, 10) das Aggregat namens foo nach den zehn höchsten Werten abschneidet, während trunc(@foo) das gesamte Aggregat löscht. Es wird auch dann das gesamte Aggregat gelöscht, wenn als Kürzungswert 0 angegeben wurde.

Um anstelle der n oberen die n unteren Werte anzuzeigen, übergeben Sie der Funktion trunc() einen negativen Kürzungswert. So schneidet beispielsweise trunc(@foo, -10) das Aggregat foo hinter den zehn niedrigsten Werten ab.

Erweitern wir nun das Systemaufruf-Beispiel so, dass über einen Zeitraum von zehn Sekunden die Häufigkeit der Systemaufrufe pro Sekunde für die zehn oberen aufrufenden Anwendungen angezeigt wird:

#pragma D option quiet

BEGIN
{
	last = timestamp;
}

syscall:::entry
{
	@func[execname] = count();
}

tick-10sec
{
	trunc(@func, 10);
	normalize(@func, (timestamp - last) / 1000000000);
	printa(@func);
	clear(@func);
	last = timestamp;
}

Das nächste Beispiel zeigt die Ausgabe des obigen Skripts bei Ausführung auf einem Laptop mit geringer Systemlast:


  FvwmAuto                                                          7
  telnet                                                           13
  ping                                                             14
  dtrace                                                           27
  xclock                                                           34
  MozillaFirebird-                                                 63
  xterm                                                           133
  fvwm2                                                           146
  acroread                                                        168
  Xsun                                                            616

  telnet                                                            4
  FvwmAuto                                                          5
  ping                                                             14
  dtrace                                                           27
  xclock                                                           35
  fvwm2                                                            69
  xterm                                                            70
  acroread                                                        164
  MozillaFirebird-                                                491
  Xsun                                                           1287