Handbuch zur dynamischen Ablaufverfolgung in Solaris

Die Richtlinie switch

Standardmäßig gilt für den Hauptpuffer die Pufferrichtlinie switch. Unter dieser Richtlinie wird je CPU ein Pufferpaar zugewiesen: Ein Puffer ist aktiv, der andere inaktiv. Wenn ein DTrace-Verbraucher versucht, in einem Puffer zu lesen, vertauscht der Kernel zuerst den inaktiven und den aktiven Puffer (engl. switch). Dieser Wechsel der Puffer erfolgt so, dass kein Zeitfenster entsteht, in dem überwachte Daten verloren gehen könnten. Nach dem Wechsel der Puffer wird der jetzt inaktive Puffer an den DTrace-Verbraucher kopiert. Diese Richtlinie gewährleistet, dass der Verbraucher stets einen in sich stimmigen Puffer sieht: Es werden nie gleichzeitig Daten in einen Puffer geschrieben und aus ihm kopiert. Durch diese Technik werden außerdem Zeitfenster verhindert, in welchen die Ablaufverfolgung pausiert oder auf andere Weise behindert wird. Die Frequenz, mit der die Puffer vertauscht und ein Puffer ausgelesen wird, steuert der Verbraucher mithilfe der Option switchrate. Wie jede Frequenzoption kann auch switchrate mit einem beliebigen Zeitsuffix angegeben werden. Standardmäßig gilt Häufigkeit pro Sekunde. Weitere Informationen zu switchrate und anderen Optionen finden Sie in Kapitel 16Optionen und Tunables .


Hinweis –

Damit der Hauptpuffer auf Benutzerebene schneller als einmal pro Sekunde (der Standardwert) verarbeitet werden kann, sollten Sie den Wert von switchrate entsprechend anpassen. Die System verarbeitet Aktionen, die Aktivitäten auf Benutzerebene einleiten (wie z. B. printa () und system()), wenn der entsprechende Datensatz im Hauptpuffer verarbeitet wird. Der Wert von switchrate legt die Geschwindigkeit fest, mit der das System solche Aktionen verarbeiten kann.


Wenn unter der Richtlinie switch ein bestimmter aktivierter Prüfpunkt mehr Daten protokolliert, als Speicherplatz im aktiven Hauptpuffer verfügbar ist, werden die Daten ausgelassen und ein entsprechender Zähler für die jeweilige CPU wird erhöht. Kommt es zu einer oder mehreren solcher Auslassungen (engl. drops), zeigt dtrace(1M) eine Meldung wie in folgendem Beispiel an:


dtrace: 11 drops on CPU 0

Wenn eine Aufzeichnung die Gesamtgröße des Puffers übersteigt, wird diese unabhängig von der Pufferrichtlinie ausgelassen. Auslassungen können Sie reduzieren oder ganz umgehen, indem Sie entweder mit der Option bufsize die Größe des Hauptpuffers oder mit der Option switchrate die Frequenz des Pufferwechsels erhöhen.

Im Rahmen der Richtlinie switch wird dem Scratch-Bereich für copyin(), copyinstr() und alloca() Speicherplatz außerhalb des aktiven Puffers zugewiesen.