Handbuch zur dynamischen Ablaufverfolgung in Solaris

Spekulationsoptionen und Abstimmung

Sollte ein spekulativer Puffer bei einem Versuch einer spekulativen Ablaufverfolgung bereits voll sein, werden keine Daten in dem Puffer gespeichert und der Auslassungszähler wird erhöht. In diesem Fall wird eine dtrace-Meldung wie in folgendem Beispiel generiert:


dtrace: 38 speculative drops

Auslassungen von Spekulationen verhindern nicht, dass der volle spekulative Puffer in den Hauptpuffer kopiert wird, wenn eine Übergabe stattfindet. Ebenso können Ausfälle von Spekulationen selbst dann auf einem spekulativen Puffer vorkommen, wenn dieser bereits verworfen wurde. Ausfälle von Spekulationen lassen sich durch Vergrößern des spekulativen Puffers mit der Option specsize herabsetzen. Die Option specsize kann mit jedem Größensuffix angegeben werden. Die Richtlinien zur Veränderung der Größe dieses Puffers wird von der Option bufresize vorgegeben.

Es ist denkbar, dass beim Aufruf von speculation() kein spekulativer Puffer verfügbar ist. Wenn Puffer vorliegen, die noch nicht übergeben oder verworfen wurden, generiert dtrace eine Meldung wie in folgendem Beispiel:


dtrace: 1 failed speculation (no speculative buffer available)

Sie können die Wahrscheinlichkeit, dass Spekulationen auf diese Weise scheitern, durch Erhöhung der Anzahl spekulativer Puffer mit der Option nspec verringern. Der Standardwert von nspec beträgt 1.

Andererseits ist es auch möglich, dass speculation() fehlschlägt, weil alle spekulativen Puffer ausgelastet sind. In diesem Fall wird eine dtrace-Meldung wie in folgendem Beispiel generiert:


dtrace: 1 failed speculation (available buffer(s) still busy)

Diese Meldung weist darauf hin, dass der speculation()-Aufruf erfolgt ist, nachdem commit() für einen spekulativen Puffer aufgerufen, aber noch bevor dieser Puffer tatsächlich auf allen CPUs übergeben wurde. Sie können die Wahrscheinlichkeit, dass Spekulationen auf diese Weise scheitern, durch Erhöhung der CPU-Bereinigungsfrequenz mit der Option cleanrate verringern. Der Standardwert von cleanrate beträgt 101hz.


Hinweis –

Die Werte für die Option cleanrate sind in Anzahl pro Sekunde anzugeben. Verwenden Sie das Suffix hz.