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

Game-Lag-Whitepaper › L9 Spielprozess auf dem Server

Überschrittenes Tick-Budget Tick overrun

Ursachen-ID sp-tick-overrun · Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Server-Infrastruktur (Infrastrukturteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Passt die Arbeit eines Ticks nicht mehr ins Budget, dehnt sich das Tick-Intervall des Servers. Das ganze Gebiet läuft dann langsamer oder ruckelt.

Warum Arbeit für einen Tick (z. B. 50 ms) übersteigt das Budget → Folge Spielzustand, der 20-mal pro Sekunde berechnet werden soll, wird nur 8-mal berechnet → Auf dem Bildschirm Ganzes Gebiet in Zeitlupe (je nach Serverdesign Ruckeln), Skills reagieren verzögert

Symptome
Zeitlupe, Input-Lag, Ruckeln
Faktoren
Stillstand
Wer ist betroffen
Bestimmter Ort oder Kanal, Ganzer Server
Wann
Bei großem Andrang, Abendliche Stoßzeit
Zuständigkeit
Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Server-Infrastruktur (Infrastrukturteam)
Aufgaben Entwicklungsteam
Teure Berechnungen reduzieren, den Tick auf mehrere Threads verteilen, Spieler verteilen (Kanäle), Tick-Verarbeitungszeit als Metrik erfassen.
Aufgaben Infrastrukturteam
Tick-Zeit und CPU-Auslastung pro Kern in Monitoring und Alarmierung aufnehmen, CPUs und Instanzen mit hoher Single-Core-Leistung (Takt) prüfen.
Größenordnungen
Bei einem Server mit 20 Ticks pro Sekunde beträgt das Budget 50 ms, bei 30 Ticks 33 ms, bei 60 Ticks 16,7 ms. Für plötzlichen Andrang ist es sicherer, im Normalbetrieb nur etwa die Hälfte des Budgets zu nutzen und den Rest als Reserve zu lassen.
Im Graphen
Steigt mit Spielerzahl und Last · Server-Tick-Zeit, Spieler pro Zone und Kanal, CPU des Game-Threads
Wo nachsehen
Vom Server erfasste Tick-Verarbeitungszeit (p99) und Zahl der Tick-Überschreitungen im selben Graphen wie die Spielerzahl pro Zone und Kanal darstellen. Ohne Tick-Metriken mit pidstat -t 1 die CPU-Auslastung des einzelnen Game-Threads prüfen
Spricht dafür
Zum Zeitpunkt des Andrangs überschreitet die Tick-Zeit das Budget (50 ms bei 20 Ticks), und die CPU-Auslastung des Game-Threads klebt währenddessen nahe 100 %
Spricht dagegen
Tick überschreitet das Budget, CPU des Game-Threads aber niedrig: Ursache liegt im Warten (GC-Pause, Locks, synchrone Aufrufe). Lange Run-Queue-Latenz in bcc runqlat: Threads bekommen keine CPU-Zeit, also eher CPU-Mangel oder zu viele Threads
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig
Mehr dazu
Wie sich ein verspäteter Tick zeigt, hängt vom Serverdesign ab. Rückt der Server den Spielzustand pro Tick um eine feste Zeitspanne vor (z. B. 50 ms), verlangsamt sich die Spielzeit selbst, und alles läuft in Zeitlupe. Rückt der Server um die tatsächlich vergangene Zeit auf einmal vor, bleibt die Spielgeschwindigkeit erhalten. Dafür kommen Pakete seltener, und Objekte springen jeweils weit, was als Ruckeln oder Teleportieren erscheint. In beiden Fällen reagieren Eingaben verzögert. Bedient ein einzelner Game-Thread den ganzen Server, wird der ganze Server langsamer. Hat jedes Gebiet einen eigenen Thread, trifft es nur dieses Gebiet. Manche Spiele wie EVE Online verlangsamen in großen Schlachten die Spielzeit absichtlich um bis zu den Faktor 10 (Time Dilation), damit die Berechnung hinterherkommt.
Reale Fälle
CCP Games 2014: EVE Online: Serverüberlast in der großen Flottenschlacht um HED-GP

Quellen

  1. VALORANT's 128-Tick Servers Riot Games
    Ein Server mit 128 Ticks muss einen Frame in 7,8125 ms abschließen, die Server-Frame-Zeit wird pro Subsystem gemessen und das Budget aufgeteilt
  2. HED-GP Technical Retrospective: What a HED-ache CCP Games
    EVE Online verlangsamt bei Überlast die Spielzeit per Time Dilation, Untergrenze 10 % (10-mal langsamer), Node-CPU im Normalbetrieb unter 80 %
  3. Handling variation in time Unity
    Gerät eine Simulation mit festem Zeitschritt in Rückstand, werden Aufholschritte gebündelt ausgeführt, Zeit über dem Limit wird verworfen, dadurch läuft die Spielzeit langsamer als die reale Zeit
  4. pidstat(1) — Linux manual page sysstat
    -t zeigt zusätzlich Statistiken pro Thread des Prozesses an (CPU-Auslastung u. a.)
  5. Demonstrations of runqlat, the Linux eBPF/bcc version IO Visor
    Zeigt die Run-Queue-Latenz des Schedulers (Wartezeit, bis eine Aufgabe CPU-Zeit bekommt) als Histogramm

Verwandte Ursachen

Gleiche Schicht: L9 Spielprozess auf dem Server

Ursachen aus anderen Schichten mit demselben Symptom (Zeitlupe)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen