Hallo Linux / UNIX Overlords,
Hat einer von Ihnen eine Faustregel, wie viele Kontextwechsel (pro Prozessorkern) auf einem Linux-Server normal sind ?
Mein College hier hat es angesprochen und er sieht 16K auf einem 8-Core- x86_64
Rechner.
Hier sind einige Statistiken von sarface der letzten Tage ...
Alternativtext http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png
Und um die Prozesserstellungsstatistiken zu sehen, ist hier eine logarithmische Ansicht desselben Graphen ...
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
Mehr nutzlose Informationen für den Fall, dass jemand fragt ..
- Der Speicher, auf dem der Server arbeitet, ist ein 0,5-TB-SAN über FC
- Es gibt 8 GB RAM, meistens Cache - kein Auslagern.
quelle
Antworten:
Dies hängt stark von der Art der Anwendung ab, die Sie ausführen. Wenn Sie Anwendungen haben, die sehr auslöserfreundliche WRT-Systemaufrufe ausführen, ist mit einem hohen Grad an Kontextwechsel zu rechnen. Wenn die meisten Ihrer Anwendungen im Leerlauf ausgeführt werden und nur dann aktiviert werden, wenn an einem Socket etwas passiert, ist mit niedrigen Kontextwechselraten zu rechnen.
Systemaufrufe
Systemaufrufe verursachen von Natur aus Kontextwechsel. Wenn ein Prozess einen Systemaufruf ausführt, weist er den Kernel an, den aktuellen Zeitpunkt und den aktuellen Arbeitsspeicher zu übernehmen, um die Aufgaben zu erledigen, für die der Prozess keine Berechtigung hat, und an dieselbe Stelle zurückzukehren, wenn er fertig ist.
Wenn wir uns die Definition des write (2) -Syscalls von Linux ansehen, wird dies sehr deutlich:
Dies weist den Kernel grundsätzlich an, die Operation vom Prozess zu übernehmen, auf
count
Bytes aufzusteigen , beginnend mit der Speicheradresse, auf die von gezeigt wird*buf
, um den Deskriptorfd
des aktuellen Prozesses abzulegen, und dann zum Prozess zurückzukehren und ihm mitzuteilen, wie er gelaufen ist.Ein gutes Beispiel dafür ist der dedizierte Spieleserver für Valve Source-basierte Spiele, hlds . http://nopaste.narf.at/f1b22dbc9 zeigt einen Sekundenwert von Systemaufrufen, die von einer einzelnen Instanz eines Spielservers ausgeführt wurden, auf dem keine Spieler installiert waren. Dieser Vorgang benötigt auf einem Xeon X3220 (2,4 GHz) ca. 3% CPU-Zeit, um Ihnen ein Gefühl dafür zu vermitteln, wie teuer dies ist.
Multitasking
Eine weitere Ursache für das Wechseln des Kontexts können Prozesse sein, die keine Systemaufrufe ausführen, jedoch von einer bestimmten CPU entfernt werden müssen, um Platz für andere Prozesse zu schaffen.
Ein guter Weg, dies zu visualisieren, ist cpuburn . cpuburn führt selbst keine Systemaufrufe durch, sondern iteriert nur über den eigenen Speicher, sodass keine Kontextumschaltung erfolgen sollte.
Nehmen Sie einen inaktiven Rechner, starten Sie vmstat und führen Sie dann für jeden CPU-Kern des Systems einen burnMMX (oder einen anderen Test aus dem Paket cpuburn) aus. Sie sollten bis dahin die volle Systemauslastung haben, aber kaum eine erhöhte Kontextumschaltung. Versuchen Sie dann, ein paar weitere Prozesse zu starten. Sie werden feststellen, dass die Kontextwechselrate zunimmt, wenn die Prozesse um CPU-Kerne konkurrieren. Der Umfang der Umschaltung hängt vom Verhältnis von Prozessen zu Kern und von der Multitasking-Auflösung Ihres Kernels ab.
Weitere Lektüre
linfo.org hat einen guten Überblick darüber, was Kontextwechsel und Systemaufrufe sind. Wikipedia bietet allgemeine Informationen und eine schöne Linksammlung zu Systemaufrufen.
quelle
System calls cause context switches by their very own nature
scheint falsch zu sein. Systemaufrufe verursachen einen Moduswechsel, wie von linfo.org/context_switch.htmlMein mäßig belasteter Webserver ist die meiste Zeit zwischen 100 und 150 Mal in der Sekunde mit Spitzenwerten zwischen Tausend.
Hohe Kontextwechselraten sind selbst kein Problem, können jedoch den Weg zu einem größeren Problem weisen.
edit: Kontextwechsel sind ein Symptom, keine Ursache. Was versuchst du auf dem Server auszuführen? Wenn Sie einen Multiprozessor-Computer haben, können Sie versuchen, die CPU-Affinität für Ihre Hauptserverprozesse festzulegen.
Wenn Sie X ausführen, können Sie auch versuchen, in den Konsolenmodus zu wechseln.
nochmals editieren: bei 16k cs pro sekunde bildet jede cpu durchschnittlich zwei switch pro millisekunde - das ist ein halbsechstel der normalen zeitscheibe. Könnte er viele IO-gebundene Threads ausführen?
editiere nochmal poste graphs: Sieht auf jeden Fall IO-gebunden aus. verbringt das System die meiste Zeit in SYS, wenn die Kontextwechsel hoch sind?
Bearbeiten Sie noch einmal: Hohe iowait und System in diesem letzten Diagramm - vollständig in den Schatten der Benutzer. Sie haben IO-Probleme.
Welche FC-Karte verwenden Sie?
edit: hmmm. Haben Sie eine Chance, einige Benchmarks in Ihrem SAN-Zugriff mit Bonnie ++ oder Dbench während der Totzeit in Gang zu bringen? Ich würde gerne sehen, ob sie ähnliche Ergebnisse haben.
edit: Ich habe über das Wochenende darüber nachgedacht und ich habe ähnliche Gebrauchsmuster gesehen, als bonnie den Pass "schreibe ein Byte auf einmal" macht. Dies erklärt möglicherweise den hohen Umschaltaufwand, da für jeden Schreibvorgang ein separater Systemaufruf erforderlich ist.
quelle
Ich bin eher besorgt über die CPU-Auslastung des Systemstatus. Wenn der Prozentsatz bei 10% oder höher liegt, bedeutet dies, dass Ihr Betriebssystem zu viel Zeit für die Ausführung der Kontextwechsel verwendet. Das Verschieben einiger Prozesse auf einen anderen Computer ist zwar viel langsamer, verdient dies jedoch.
quelle
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 bei etwa 2.000 mit einigen 4.000 Peaks stabil sind. Für meine Server ist das normal, für die Server anderer Leute ist es möglicherweise viel zu niedrig oder zu hoch.
Wie weit können Sie in Ihren Daten zurückgehen?
Welche Art von CPU-Informationen können Sie uns geben?
quelle
Es gibt keine Faustregel. Ein Kontextwechsel ist nur die CPU, die von einem Thread zum nächsten wechselt. Wenn Sie viele Prozesse ausführen (oder einige Prozesse mit hohem Threading), sehen Sie mehr Schalter. Zum Glück müssen Sie sich keine Gedanken darüber machen, wie viele Kontextwechsel es gibt - die Kosten sind gering und mehr oder weniger unvermeidlich.
quelle