Handbuch zur dynamischen Ablaufverfolgung in Solaris

Kapitel 31 Der Provider plockstat

Der Provider plockstat stellt Prüfpunkte zum Beobachten des Verhaltens von Synchronisierungsgrundeinheiten auf Benutzerebene, einschließlich Lock-Contentions und Hold-Zeiten, bereit. Der Befehl plockstat(1M) ist ein DTrace-Verbraucher, der mithilfe des Providers plockstat Daten über Sperrereignisse auf Benutzerebene erfasst.

Überblick

Der Provider plockstat stellt Prüfpunkte für die folgenden Ereignisarten zur Verfügung:

Contention-Ereignisse

Diese Prüfpunkte sprechen auf Konkurrenzsituationen (Contentions, Kollisionen) an einer Synchronisierungsgrundeinheit auf Benutzerebene an und werden ausgelöst, wenn ein Thread gezwungen ist, zu warten, bis eine Ressource verfügbar wird. Solaris ist im Allgemeinen für den konkurrenzfreien Betrieb (ohne Contentions) optimiert. Länger andauernde Konkurrenzsituationen sind folglich nicht zu erwarten. Diese Prüfpunkte helfen Ihnen, Fälle zu verstehen, in welchen es trotzdem zu Konkurrenz kommt. Da Konkurrenzsituationen architekturgemäß (relativ) selten sind, bewirkt die Aktivierung von contention-event-Prüfpunkten in der Regel keine starke Prüfaktivität. Sie können ohne Bedenken bezüglich einer größeren Leistungsbeeinträchtigung aktiviert werden.

Hold-Ereignisse

Diese Prüfpunkte sprechen auf das Erhalten, Freigeben oder eine andere Art der Manipulation von Synchronisierungsgrundeinheiten auf Benutzerebene an. Als solche können diese Prüfpunkte helfen, beliebige Fragen über die Art und Weise der Manipulation von Synchronisierungsgrundeinheiten auf Benutzerebene zu beantworten. Da Synchronisierungsgrundeinheiten üblicherweise sehr häufig von Anwendungen erworben und freigegeben werden, kann die Aktivierung von hold-event-Prüfpunkten eine intensivere Prüfaktivität verursachen als contention-event-Prüfpunkte. Diese Aktivität kann zwar beträchtlich ausfallen, ist aber nicht schädlich. Die Prüfpunkte können trotzdem gefahrlos auf Produktionsanwendungen aktiviert werden.

Fehlerereignisse

Diese Prüfpunkte sprechen auf jede Art von ungewöhnlichem Verhalten beim Erwerben oder Freigeben einer Synchronisierungsgrundeinheit auf Benutzerebene an. Mithilfe dieser Ereignisse können Fehler festgestellt werden, die auftreten, wenn ein Thread durch eine Synchronisierungsgrundeinheit auf Benutzerebene blockiert wird. Fehlerereignisse sollten äußerst selten auftreten, sodass ihre Aktivierung keine ernst zu nehmende Prüfaktivität auslösen dürfte.

Mutex-Prüfpunkte

Mutexe schützen kritische Abschnitte durch gegenseitigen Ausschluss. Wenn ein Thread versucht, über mutex_lock(3C) oder pthread_mutex_lock(3C) einen von einem anderen Thread belegten Mutex zu erhalten, wird zunächst festgestellt, ob der Besitzer-Thread auf einer anderen CPU läuft. Ist dies der Fall, tritt der fordernde Thread für kurze Zeit in eine Warteschleife ein und wartet, bis der Mutex verfügbar wird. Wenn der Besitzer nicht auf einer anderen CPU läuft, wird der fordernde Thread blockiert.

Die vier plockstat-Prüfpunkte für Mutexe sind in Tabelle 31–1 aufgeführt. arg0 enthält für jeden Prüfpunkt einen Zeiger auf die Struktur mutex_t oder pthread_mutex_t (identische Typen), die den Mutex darstellen.

Tabelle 31–1 Mutex-Prüfpunkte

mutex-acquire

Hold-event-Prüfpunkt, der unmittelbar nach dem Erlangen eines Mutex ausgelöst wird. arg1 enthält einen booleschen Wert, der angibt, ob es sich um einen rekursiven Erwerb eines rekursiven Mutex handelt. arg2 gibt an, wie oft der fordernde Thread die Warteschleife für diesen Mutex durchlaufen hat. arg2 ist nur dann nicht Null, wenn der Prüfpunkt mutex-spin für diesen Mutex-Erwerb ausgelöst wurde.

mutex-block

Contention-event-Prüfpunkt, der ausgelöst wird, bevor ein Thread durch einen belegten Mutex blockiert wird. Für das Erlangen einer einzigen Sperre können sowohl mutex-block als auch mutex-spin ausgelöst werden.

mutex-spin

Contention-event-Prüfpunkt, der ausgelöst wird, bevor ein Thread durch einen belegten Mutex in den Wartezustand versetzt wird. Für das Erlangen einer einzigen Sperre können sowohl mutex-block als auch mutex-spin ausgelöst werden.

mutex-release

Hold-event-Prüfpunkt, der unmittelbar nach der Freigabe eines Mutex ausgelöst wird. arg1 enthält einen booleschen Wert, der angibt, ob es sich bei dem Ereignis um eine rekursive Freigabe eines rekursiven Mutex handelt.

mutex-error

Fehlerereignis-Prüfpunkt, der bei Fehlern in einer Mutex-Operation ausgelöst wird. arg1 ist der errno-Wert für den aufgetretenen Fehler.

Prüfpunkte für Leser/Schreiber-Sperren

Leser/Schreiber-Sperren erlauben entweder mehreren Lesern oder einem einzigen Schreiber den gleichzeitigen Zugriff auf einen kritischen Abschnitt. Diese Sperren kommen in der Regel in Strukturen vor, die häufiger durchsucht als geändert werden, oder bei Threads, die viel Zeit im kritischen Abschnitt verbringen. Benutzer interagieren mit Leser/Schreiber-Sperren über die Solaris-Schnittstelle rwlock(3C) oder die POSIX-Schnittstelle pthread_rwlock_init(3C).

Tabelle 31–2 zeigt die Prüfpunkte für Leser/Schreiber-Sperren. arg0 enthält für jeden Prüfpunkt einen Zeiger auf die Struktur rwlock_t oder pthread_rwlock_t (identische Typen), die die adaptive Sperre darstellen. arg1 enthält einen booleschen Wert, aus dem hervorgeht, ob es sich bei der Operation um einen Schreiber handelt.

Tabelle 31–2 Prüfpunkte für Leser/Schreiber-Sperren

rw-acquire

Hold-event-Prüfpunkt, der unmittelbar nach dem Erlangen einer Leser/Schreiber-Sperre ausgelöst wird. 

rw-block

Contention-event-Prüfpunkt, der ausgelöst wird, bevor ein Thread in dem Versuch, eine Sperre zu erlangen, blockiert wird. Wenn sie aktiviert sind, werden die Prüfpunkte rw-acquire und rw-error nach rw-block ausgelöst.

rw-release

Hold-event-Prüfpunkt, der unmittelbar nach der Freigabe einer Leser/Schreiber-Sperre ausgelöst wird. 

rw-error

Fehlerereignis-Prüfpunkt, der bei Fehlern während einer Operation mit einer Leser/Schreiber-Sperre ausgelöst wird. arg1 ist der errno-Wert des aufgetretenen Fehlers.

Stabilität

Der Provider plockstat beschreibt die verschiedenen Stabilitäten anhand des DTrace-Stabilitätsmechanismus gemäß der folgenden Tabelle. Weitere Informationen zum Stabilitätsmechanismus finden Sie in Kapitel 39Stabilität.

Element 

Namensstabilität 

Datenstabilität 

Abhängigkeitsklasse 

Provider 

Evolving 

Evolving 

ISA

Modul 

Private 

Private 

Unknown 

Funktion 

Private 

Private 

Unknown 

Name 

Evolving 

Evolving 

ISA

Argumente 

Evolving 

Evolving 

ISA