it-swarm.com.de

Wie viele Kontextschalter sind "normal" (in Abhängigkeit von CPU-Kernen (oder anderen))?

Hallo Linux/UNIX-Overlords,

Hat einer von Ihnen eine Faustregel, wie viele Kontextwechsel (pro Prozessorkern) Normal auf einem Linux-Server sind?

Mein College hier hat es angesprochen, und er sieht 16K auf einem 8-Kern x86_64 Maschine.

Hier sind einige Statistiken von Sarface der letzten Tage ...

Alternativtext http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png

Um die Statistiken zur Prozesserstellung anzuzeigen, sehen Sie hier eine logarithmische Ansicht desselben Diagramms ...

Alternativtext http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png

Und die 8 Kerne sind zu Tode gelangweilt ...

Alternativtext http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png

CS vs IOwait (x10000 Skala)

Alternativtext http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png

Weitere nutzlose Informationen für den Fall, dass jemand danach fragt.

  • Der Speicher, auf dem der Server arbeitet, ist 0,5 TB SAN via FC)
  • Es gibt 8 GB RAM, meistens Cache - kein Austausch.
37
Xerxes

Dies hängt stark von der Art der Anwendung ab, die Sie ausführen. Wenn Sie Anwendungen haben, die sehr triggerfreudige WRT-Systemaufrufe sind, können Sie mit einer starken Kontextumschaltung rechnen. Wenn die meisten Ihrer Anwendungen inaktiv sind und nur dann aufwachen, wenn auf einem Socket etwas passiert, können Sie mit niedrigen Kontextwechselraten rechnen.

Systemaufrufe

Systemaufrufe verursachen von Natur aus Kontextwechsel. Wenn ein Prozess einen Systemaufruf ausführt, weist er den Kernel grundsätzlich an, von seinem aktuellen Zeitpunkt und Speicher die Aufgaben zu übernehmen, für die der Prozess keine Berechtigung hat, und nach Abschluss an denselben Ort zurückzukehren.

Wenn wir uns die Definition des write (2) -Syscalls unter Linux ansehen, wird dies sehr deutlich:

 NAME 
 Schreiben - Schreiben in einen Dateideskriptor 
 
 ÜBERSICHT 
 #Include 
 
 Ssize_t write (int fd, const void * buf, size_t count); 
 
 BESCHREIBUNG 
 write () schreibt bis zu Bytes aus dem Puffer, der buf auf die Datei 
 zeigt, auf die verwiesen wird durch den Dateideskriptor fd. [..] 
 
 RÜCKGABEWERT 
 Bei Erfolg wird die Anzahl der geschriebenen Bytes zurückgegeben (Null bedeutet, dass 
 Nichts geschrieben wurde). Bei einem Fehler wird -1 zurückgegeben und errno wird entsprechend 
 Eingestellt. 
 [..] 

Dies weist den Kernel grundsätzlich an, die Operation aus dem Prozess zu übernehmen und bis zu count Bytes zu wechseln, beginnend mit der Speicheradresse, auf die *buf Zeigt, bis zum Dateideskriptor fd des aktuellen Prozess und kehren Sie dann zum Prozess zurück und sagen Sie ihm, wie es gelaufen ist.

Ein schönes Beispiel dafür ist der dedizierte Spieleserver für Valve Source-basierte Spiele, hlds . http://nopaste.narf.at/f1b22dbc9 zeigt Syscalls im Wert von einer Sekunde, die von einer einzelnen Instanz eines Spieleservers ausgeführt wurden, auf dem keine Spieler installiert waren. Dieser Vorgang benötigt auf einem Xeon X3220 (2,4 GHz) etwa 3% CPU-Zeit, um Ihnen ein Gefühl dafür zu geben, wie teuer dies ist.

Multitasking

Eine weitere Quelle für die Kontextumschaltung sind möglicherweise Prozesse, die keine Systemaufrufe ausführen, jedoch von einer bestimmten CPU entfernt werden müssen, um Platz für andere Prozesse zu schaffen.

Eine gute Möglichkeit, dies zu visualisieren, ist cpuburn . cpuburn führt selbst keine Systemaufrufe durch, sondern iteriert nur über den eigenen Speicher, sodass kein Kontextwechsel verursacht werden sollte.

Nehmen Sie einen inaktiven Computer, starten Sie vmstat und führen Sie dann für jeden CPU-Kern des Systems einen burnMMX (oder einen anderen Test als das cpuburn-Paket) aus. Sie sollten bis dahin die volle Systemauslastung haben, aber kaum mehr Kontextwechsel. Versuchen Sie dann, einige weitere Prozesse zu starten. Sie werden sehen, dass die Kontextwechselrate zunimmt, wenn die Prozesse beginnen, um CPU-Kerne zu konkurrieren. Das Ausmaß der Umschaltung hängt vom Prozess/Kern-Verhältnis und der Multitasking-Auflösung Ihres Kernels ab.

Weiterführende Literatur

linfo.org hat eine nette Beschreibung, was Kontextwechsel und Systemaufrufe sind. Wikipedia enthält allgemeine Informationen und eine Sammlung netter Links zu Systemaufrufen.

26
Michael Renner

mein mäßig geladener Webserver befindet sich die meiste Zeit bei etwa 100-150 Schaltern pro Sekunde mit Spitzen in den Tausenden.

Hohe Kontextwechselraten sind selbst kein Problem, können jedoch den Weg zu einem größeren Problem weisen.

bearbeiten: Kontextwechsel sind ein Symptom, keine Ursache. Was versuchst du auf dem Server auszuführen? Wenn Sie einen Multiprozessor-Computer haben, möchten Sie möglicherweise versuchen, die CPU-Affinität für Ihre Hauptserverprozesse festzulegen.

Wenn Sie X ausführen, versuchen Sie alternativ, in den Konsolenmodus zu wechseln.

erneut bearbeiten: Bei 16k cs pro Sekunde mittelt jede CPU durchschnittlich zwei Schalter pro Millisekunde - das ist ein halbes bis ein Sechstel der normalen Zeitscheibe. Könnte er viele IO gebundene Threads) ausführen?

nach Grafikgrafiken erneut bearbeiten: Sieht auf jeden Fall aus IO gebunden. Verbringt das System die meiste Zeit in SYS, wenn die Kontextwechsel hoch sind?

noch einmal bearbeiten: High iowait und System in diesem letzten Diagramm - den Benutzerraum vollständig in den Schatten stellen. Sie haben IO Probleme.
Welche FC-Karte verwenden Sie?

bearbeiten: hmmm. Gibt es eine Chance, einige Benchmarks für Ihren SAN Zugriff mit bonnie ++ oder dbench während der Totzeit in Gang zu bringen? Ich wäre interessiert zu sehen, ob sie ähnliche Ergebnisse haben.

edit: Ich habe über das Wochenende darüber nachgedacht und ich habe ähnliche Verwendungsmuster gesehen, als bonnie den Pass "Schreiben Sie ein Byte nach dem anderen" durchführt. Dies könnte die große Menge an Schaltvorgängen erklären, da für jeden Schreibvorgang ein separater Systemaufruf erforderlich wäre.

7
jay_dubya

Aus diesem Grund sollten Sie versuchen, die Leistungsbasis für Ihre Server beizubehalten. Auf diese Weise können Sie Dinge, die Sie plötzlich bemerken, mit Dingen vergleichen, die Sie in der Vergangenheit aufgezeichnet haben.

Das heißt, ich habe Server (hauptsächlich nicht sehr ausgelastete Oracle-Server), die konstant um 2k mit einigen 4k-Peaks liegen. Für meine Server ist das normal, für die Server anderer Leute, die möglicherweise viel zu niedrig oder zu hoch sind.

Wie weit können Sie in Ihren Daten zurückgehen?

Welche Art von CPU-Informationen können Sie uns geben?

1
wzzrd

Ich bin eher geneigt, mir Sorgen über die CPU-Auslastung des Systemstatus zu machen. Wenn es nahe bei 10% oder höher liegt, bedeutet dies, dass Ihr Betriebssystem zu viel Zeit mit den Kontextwechseln verbringt. Obwohl das Verschieben einiger Prozesse auf einen anderen Computer viel langsamer ist, verdient es dies.

1
hashei

Es gibt keine Faustregel. Ein Kontextwechsel ist nur die CPU, die von der Verarbeitung eines Threads zum anderen wechselt. Wenn Sie viele Prozesse ausführen (oder einige mit hohem Thread), werden mehr Schalter angezeigt. Glücklicherweise müssen Sie sich keine Gedanken darüber machen, wie viele Kontextwechsel vorhanden sind - die Kosten sind gering und mehr oder weniger unvermeidbar.

0
Alex J