Schon mal von Kontextwechsel (context switches) gehört? Wenn ja, dann sicher weil Sie Administrator für eine Citrix Presentation Server Farm sind. Das ist kein Citrix bedingtes Problem aber Kontextwechsel gehören zu den Standard Werten die vom Citrix Resource Manager überwacht werden und führen offensichtlich häufig zu Alarm Meldungen.

Andere Systeme können auch Probleme mit den Kontextwechseln haben, jedoch ohne Monitoring bekommt es niemand mit.

Kontextwechsel verstehen

Ich werde hier nicht in Details verfallen und die Beschreibung soll auf einfache Weise die Grundlagen zu Kontextwechsel erklären.

Prozesse bestehen aus so genannten "Threads" die die eigentliche Arbeit verrichten. Threads werden geplant und auf der System CPU ausgeführt (auf einer CPU nicht auf allen im System vorhandenen CPU's), wobei immer nur ein Thread je CPU zurzeit ausgeführt werden kann. Zudem kann ein Prozess eine Vielzahl von Threads haben. Die vorgegebene Dauer der Ausführung heißt "Quantum" bedeutet aber nicht, dass ein Thread unbedingt das gesamte Quantum nutzen darf, noch dass nach Ablauf des Quatum's die Arbeit des Threads beendet ist. Allerdings wenn das Quatum beendet ist, wird ein Kontextwechsel auf den nächsten geplanten Thread vollzogen (nur ein Grund für einen Kontextwechsel, auch das vorzeitige beenden ist ein Kontextwechsel).


Sollte der Performance Zähler für Kontextwechsel (pro Sekunde) einen hohen Wert aufweisen, dann bedeute es das Threads weniger Zeit für ihre Arbeit haben und damit kann die Performance des gesamten Systems fallen.


Zwei andere Definitionen von Kontextwechsel:


Microsoft
"Die durchschnittliche Rate pro Sekunde, in der der Prozessor den Kontext zwischen Threads wechselt. Eine hohe Rate impliziert das viele Threads um Prozessor Zeit ringen."


Windows Internals
"Mit Kontextwechsel ist der Vorgang gemeint, bei dem der temporäre Prozessorstatus des aktiven Threads gespeichert, der temporäre Prozessorstatus eines anderen Threads geladen und die Ausführung des neuen Threads gestartet wird."

 

Grund für hohe Kontextwechsel Raten

Oft ist der Grund eine zu kleine Auslagerungsdatei oder wo die Auslagerungsdatei dynamisch wachsen kann. Auch möglich ist der schreib Zwischenspeicher der (RAID) Kontroller das mit dem Microsoft Utility (oder vom Hersteller) dskcache verändert werden kann. Hohe aktive Raten können auch durch ineffiziente Hardware- oder schlecht Programmierte Anwendungen hervorgerufen werden.

 

Behebung von Problemen mit Kotextwechseln

Wie so oft gibt es unterschiedliche Wege das Problem aufzufinden und zu beheben aber Hauptziel ist das Auffinden des Prozess der eine hohe Rate an Kontextwechsel verursacht. Dabei ist zu berücksichtigen, dass evtl. bessere Hardware notwendig ist.


Wie kann nun der aktuelle Wert des Kontextwechsels für das System festgestellt werden? Die Antwort ist mit Microsoft’s Perforamnce Zählern (perfmon.msc) unter System/Kontextwechsel oder Threads/Kontextwechsel. Wer sich im Performance Monitor die Kontextwechsel basierend auf Thread ansieht, wird feststellen das es nicht einfach ist den Prozess mit hohen Raten zu finden.


Deutlich besser ist hier Sysinternals Prozess Explorer (kostenfrei). Als Standard zeigt der Prozess Explorer aber keine Kontextwechsel an und muss erst aktiviert werden.

Das geht unter view | select columns | Process Performance | aktivieren von Context Switches und Context Switch Delta


 

Beide Werte sollten nun je Prozess im Hauptfenster des Prozess Explorer sichtbar sein. Die Spalte der Kontextwechsel (Context Switches) zeigt die Gesamtzahl an Wechsel seit dem Start des Systems. Diese Spalte nach dem höchsten Wert sortieren und nach a) hohe Werte- und b) schnell wachsende Werte schauen. Beides sind gute Indikatoren für Prozesse mit hohen Kontextwechseln. 

Prozess Explorer - Spalte der Context Switches

 

Dann sollte die Spalte CSwitch Delta geprüft werden, da diese den Kontextwechsel Wert pro Aktualisierungsintervall des Prozess Explorers anzeigt (mit "update speed" = 1 Sekunde ergibt sich Kontextwechsel pro Sekunde). Wurde der Prozess gefunden, so ist zu prüfen warum dieser so hohe Kontextwechsel aufweist.

Prozess Explorer - Spalte der CSwitches Deltas

 

Werte für "schlechte" Kontextwechsel

Der Standardwert für Kontextwechsel "Roter Alarm" beim Citrix Resource Manager ist 14.000 gilt aber für eine CPU. Der Wert ist je Prozessor und mit zwei CPU’s sollte der Wert 28.000 oder 42.000 mit drei CPU's bzw. 56.000 für ein Quad CPU System. Das sind trotzdem nur Basis Werte und um einen guten Wert zu erhalten muß das System eine gewisse Zeit betrachtet werden.


Auf dem BriForum 2006 EU habe ich mit Tim Mangan gesprochen und er sagte, das Kontextwechsel eine nicht zu hohe Beachtung bekommen sollten.
 

Referenzen


Kommentar schreiben