Handbuch zur dynamischen Ablaufverfolgung in Solaris

Verwenden von Aggregaten

Wie bereits in Kapitel 9Aggregate besprochen, bieten DTrace-Aggregate die Möglichkeit, Daten auf skalierbare Art und Weise zusammenzufassen - zu aggregieren. Auf den ersten Blick könnte man annehmen, dass auch assoziative Vektoren eine ähnliche Funktion haben. Doch da es sich dabei um globale Allzweckvariablen handelt, lässt sich mit ihnen nicht die lineare Skalierbarkeit von Aggregaten erzielen. Wo dies möglich ist, sollten also Aggregate den assoziativen Vektoren vorgezogen werden. Das folgende Beispiel ist nicht empfehlenswert:

syscall:::entry
{
	totals[execname]++;
}

syscall::rexit:entry
{
	printf("%40s %d\n", execname, totals[execname]);
	totals[execname] = 0;
}

Dieses Beispiel ist dem obigen vorzuziehen:

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

END
{
	printa("%40s %@d\n", @totals);
}