한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game-Lag-Whitepaper › L7 Server-OS (Kernel)

Zu viele Threads und Kontextwechsel Thread oversubscription, context switching

Ursachen-ID so-context · Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Server-Infrastruktur (Infrastrukturteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Laufen weit mehr Threads als Kerne, verbraucht das OS CPU-Zeit allein damit, sie abwechselnd auszuführen.

Warum Hunderte bis Tausende Threads, etwa ein eigener Thread pro Verbindung → Folge Mehr Aufwand für Kontextwechsel (Wechsel des laufenden Threads) und mehr Cache-Misses → Auf dem Bildschirm CPU ausgelastet, aber geringer Durchsatz und unregelmäßige Ticks: Ruckeln und Zeitlupe

Symptome
Ruckeln, Zeitlupe
Faktoren
Stillstand, Jitter
Wer ist betroffen
Ganzer Server
Wann
Bei großem Andrang
Zuständigkeit
Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Server-Infrastruktur (Infrastrukturteam)
Aufgaben Entwicklungsteam
Thread-Zahl an die Kernzahl anpassen, asynchrone I/O (epoll, IOCP).
Aufgaben Infrastrukturteam
Zahl der Kontextwechsel und der auf CPU-Zeit wartenden Threads überwachen (cs und r in vmstat).
Größenordnungen
Ein Kontextwechsel kostet einige µs, mit den anschließenden Cache-Misses noch mehr.
Im Graphen
Steigt mit Spielerzahl und Last · Kontextwechsel pro Sekunde, auf CPU-Zeit wartende Threads
Wo nachsehen
In vmstat 1 cs (Kontextwechsel pro Sekunde) und r (laufende oder auf CPU-Zeit wartende Prozesse) mit der Kernzahl vergleichen, mit pidstat -w -t freiwillige (cswch/s) und unfreiwillige (nvcswch/s) Kontextwechsel pro Thread des Spielservers prüfen
Spricht dafür
Mit steigender Spielerzahl wächst r weit über die Kernzahl, cs schießt mit hoch, und Hunderte Threads haben viele unfreiwillige Kontextwechsel
Spricht dagegen
r bleibt höchstens bei der Kernzahl: diese Ursache scheidet aus. Nur viele freiwillige Wechsel: Threads warten auf Locks oder I/O („Lock-Contention“, „Blockierende I/O-Architektur“)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)

Quellen

  1. Quantifying The Cost of Context Switch (ExpCS 2007) ACM
    Direkte Kosten eines Kontextwechsels ca. 3,8 µs, indirekte Kosten einschließlich Cache-Effekten von einigen µs bis über 1.000 µs (in der Messumgebung)
  2. vmstat(8) — Linux manual page procps-ng
    Spalten cs (Kontextwechsel pro Sekunde) und r (Zahl der laufenden oder auf Ausführung wartenden Prozesse)
  3. I/O Completion Ports Microsoft
    Viele asynchrone I/O-Vorgänge mit einem vorab erzeugten Thread-Pool und IOCP abwickeln, Zahl gleichzeitig laufender Threads an die Parallelität der CPU anpassen
  4. pidstat(1) — Linux manual page sysstat
    cswch/s bei -w: freiwillige Kontextwechsel, bei denen ein Thread beim Warten auf Ressourcen selbst anhält, nvcswch/s: unfreiwillige Kontextwechsel, erzwungen nach Ablauf der Zeitscheibe, -t: pro Thread

Verwandte Ursachen

Gleiche Schicht: L7 Server-OS (Kernel)

Ursachen aus anderen Schichten mit demselben Symptom (Ruckeln)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen