Handbuch zur dynamischen Ablaufverfolgung in Solaris

Spinlock-Prüfpunkte

In einigen Kernel-Kontexten wie beispielsweise Interrupts auf hoher Ebene oder in jedem den Dispatcher-Zustand manipulierenden Kontext können Threads nicht blockiert werden. In diesen Kontexten wird die Verwendung von adaptiven Sperren durch diese Einschränkung verhindert. Stattdessen wird der Mutex in diesen Kontexten anhand von Spinlocks ausgesprochen. Das Verhalten dieser Sperren bei Konkurrenz besteht im Durchlaufen einer Warteschleife, bis die Sperre vom Besitzer-Thread freigegeben wird. Die drei Prüfpunkte im Zusammenhang mit Spinlocks sind in Tabelle 18–2 beschrieben.

Tabelle 18–2 Spinlock-Prüfpunkte

spin-acquire

Hold-event-Prüfpunkt, der unmittelbar nach dem Erlangen eines Spinlocks ausgelöst wird. 

spin-spin

Contention-event-Prüfpunkt, der ausgelöst wird, nachdem ein Thread, der durch einen belegten Spinlock in eine Warteschleife gestellt wurde, den Spinlock erfolgreich erlangt hat. Wenn beide Prüfpunkte aktiviert sind, wird spin-spin vor spin-acquire ausgelöst. arg1 für spin-spin enthält die Spin-Zeit: die Zeit in Nanosekunden, die im Spin-Status vor dem Erlangen der Sperre verbracht wurde. Die Spin-Anzahl an sich ist nicht sehr bedeutungsvoll, kann aber zum Vergleich von Wartezeiten genutzt werden.

spin-release

Hold-event-Prüfpunkt, der unmittelbar nach der Freigabe eines Spinlocks ausgelöst wird. 

Adaptive Sperren sind sehr viel häufiger als Spinlocks. Um diese Beobachtung auf Daten zu stützen, greifen wir auf das folgende Skript zurück, das die Gesamtzahl beider Lock-Typen anzeigt.

lockstat:::adaptive-acquire
/execname == "date"/
{
	@locks["adaptive"] = count();
}

lockstat:::spin-acquire
/execname == "date"/
{
	@locks["spin"] = count();
}

Führen Sie dieses Skript in einem Fenster aus und den Befehl date(1) in einem anderen. Wenn Sie das DTrace-Skript beenden, erhalten Sie eine Ausgabe wie im nächsten Beispiel:


# dtrace -s ./whatlock.d
dtrace: script './whatlock.d' matched 5 probes 
^C
spin                                                             26
adaptive                                                       2981

Wie diese Ausgabe zeigt, sind über 99 Prozent der bei der Ausführung des Befehls date erlangten Sperren adaptive Sperren. Es überrascht Sie vielleicht, dass bei einer einfachen Aktion wie date so viele Sperren erlangt werden. Die große Anzahl der Sperren ist ein natürlicher Nebeneffekt der in einem so extrem skalierbaren System wie dem Solaris-Kernel erforderlichen feinkörnigen Sperrstrukturen.