Game-Lag-Whitepaper › Nach Symptom suchen
Zeitraffer: 36 Ursachen und Zuständigkeiten
Auch genannt: Schlag auf Schlag, Vorspulen, alles auf einmal
Im interaktiven Symptomkatalog mit Grafiken öffnen →
Das stehengebliebene Bild läuft wieder an, und aufgestaute Bewegungen, Treffer und Schaden rauschen im Schnelldurchlauf vorbei.
Monster und Spieler bewegen sich wie beim Vorspulen, Schadenszahlen und Effekte prasseln alle auf einmal herein.
Irgendwo haben sich Pakete angestaut und wurden auf einen Schlag freigegeben. Typisch sind das Warten auf eine TCP-Retransmission, ein Server, der Rückstand aufholt, und ein Client, der mit der Verarbeitung nicht hinterherkommt.
Ursachen dieses Symptoms
L1 Spielprozess auf dem Client
- Engpass bei der Paketverarbeitung im Main-Thread: Verarbeitet der Client empfangene Pakete pro Frame nur bis zu einer festen Menge, schieben sich angestaute Pakete immer weiter in die nächsten Frames. (Client-Entwicklung (Entwicklungsteam))
- Aufholspirale bei festem Zeitschritt: Nach einem einzelnen Stillstand rechnet das Spiel die aufgelaufenen Schritte im Block nach und gerät genau dadurch erneut in Rückstand. (Client-Entwicklung (Entwicklungsteam))
L2 Client-OS und Gerät
- CPU-Belegung durch Hintergrundprozesse: Belegen Virenscans, Windows Update, Streaming-Software oder Videos im Browser die Kerne, bekommt der Game-Thread keine CPU-Zeit und muss warten. (Extern (Extern))
- Überlauf des Empfangspuffers: Ist das Spiel zu beschäftigt und holt Pakete zu spät aus dem Socket (der vom OS bereitgestellten Netzwerkschnittstelle zum Senden und Empfangen), läuft der Puffer des OS über. (Client-Entwicklung (Entwicklungsteam))
- Bandbreitenbelegung durch andere Apps auf demselben Gerät: Laufen Cloud-Synchronisation, große Downloads oder Spiel-Patches auf demselben PC, warten die Spielpakete in der Warteschlange. (Extern (Extern))
- Drosselung bei minimiertem oder inaktivem Fenster: Wechselt man in ein anderes Fenster oder minimiert das Spiel, lassen Spiel und Windows es zum Stromsparen langsamer laufen. Bei der Rückkehr kommen die aufgestauten Pakete auf einmal, oder die Verbindung ist schon abgebrochen. (Client-Entwicklung (Entwicklungsteam))
L3 Heimnetz
- Bufferbloat (Warteschlange im Router): Lädt jemand im Haushalt ein Video hoch oder eine große Datei herunter, stauen sich im Router Pakete für mehrere hundert ms, und die Spielpakete warten dahinter. (Extern (Extern))
L6 Netzwerkkarte des Servers
- Wartung des Cloud-Hosts und Live-Migration: Wartet der Cloud-Anbieter einen physischen Server (Host), verschiebt er die VMs auf einen anderen Host (Live-Migration) oder hält sie kurz an. Währenddessen steht der ganze Server still, und dauert der Stillstand lange, brechen Verbindungen ab. (Server-Infrastruktur (Infrastrukturteam))
L7 Server-OS (Kernel)
- Zu kleine Socket-Puffer im Kernel: Sind Sende- und Empfangspuffer zu klein, werden bei Burst-Traffic per UDP empfangene Pakete verworfen, und das Senden per TCP blockiert, weil im Puffer kein Platz mehr ist. (Server-Infrastruktur (Infrastrukturteam))
- Sprung der Systemuhr (NTP-Step): Wird die Serveruhr auf einen Schlag um einige Sekunden vor- oder zurückgestellt, lösen Timer, die von der Systemuhr abhängen, gesammelt aus oder bleiben stehen. (Server-Entwicklung (Entwicklungsteam))
L8 Sockets und Protokolle
- TCP-Head-of-Line-Blocking: Um die Reihenfolge einzuhalten, gibt TCP später eingetroffene Pakete erst an das Spiel weiter, wenn ein verlorenes Paket erneut angekommen ist. (Server-Entwicklung (Entwicklungsteam))
- Retransmission-Einstellungen bei zuverlässigem UDP: Sind die selbst gebauten Retransmission-Regeln auf UDP zu vorsichtig, erholt sich die Übertragung erst spät. Sind sie zu aggressiv, verstopfen sie die Leitung zusätzlich. (Server-Entwicklung (Entwicklungsteam))
- Einbruch der Senderate durch Congestion Control: TCP wertet Paketverlust als Zeichen von Überlast und senkt die Senderate um 30–50 %. Auf Paketverlust im WLAN reagiert es genauso. (Server-Infrastruktur (Infrastrukturteam))
L9 Spielprozess auf dem Server
- Explodierende Broadcast-Last: Wird jede Bewegung eines Spielers an alle geschickt, die ihn sehen, wächst die Zahl der zu sendenden Updates mit dem Quadrat der versammelten Spieler. (Server-Entwicklung (Entwicklungsteam))
- Auf ein Ziel konzentrierter Kampf (Weltboss): Greifen Hunderte Spieler gleichzeitig einen einzigen Boss an, ballt sich die Berechnung auf diesen einen Boss, und jeder Treffer wird an alle gesendet, die ihn sehen. (Server-Entwicklung (Entwicklungsteam))
- Spawn-Flut beim Betreten belebter Gebiete: Reist man per Teleport in eine volle Stadt, muss der Server Aussehen, Ausrüstung und Zustand von Hunderten neu sichtbarer Spieler auf einmal senden. (Server-Entwicklung (Entwicklungsteam))
L10 Arbeitsspeicher
- Stop-the-World-GC-Pause auf dem Server: Während ein Java- oder C#-Server alle Threads anhält, um Garbage einzusammeln (Stop-the-World), steht der gesamte Server still. (Server-Entwicklung (Entwicklungsteam))
Synchronisationsdesign
- Wiedergabe bei Ankunft ohne Zeitstempel: Bekommen Server-Events keinen Entstehungszeitpunkt und werden sofort bei Ankunft abgespielt, überträgt sich der Netzwerk-Jitter direkt auf das Timing der Darstellung. (Client-Entwicklung (Entwicklungsteam))
Probleme, die nur einige betreffen
- Laggender Spieler bewegt sich auf fremden Bildschirmen schubweise: Die Eingaben eines Spielers mit schlechter Leitung kommen unregelmäßig und gebündelt beim Server an. Wendet der Server pro Tick alles an, was gerade eingetroffen ist, sehen andere diesen Charakter stocken und dann mehrere Schritte auf einmal machen. (Server-Entwicklung (Entwicklungsteam))
- Zeitraffer bei Servern, die sofort bei Ankunft verarbeiten: Auf einem Server, der Pakete sofort bei Ankunft verarbeitet und weitermeldet, werden die gebündelt eintreffenden Aktionen eines langsamen Spielers direkt hintereinander ausgeführt. (Server-Entwicklung (Entwicklungsteam))
- Autorität über Monster bei einem langsamen Client: Manche Spiele übertragen die Berechnung von Monsterbewegungen an den Client eines Spielers in der Nähe, um den Server zu entlasten. Hat dieser Spieler eine schlechte Leitung, bewegt sich das Monster auf allen Bildschirmen seltsam. (Server-Entwicklung (Entwicklungsteam))
- Drosselung von Hintergrundfenstern: Bei einem Client im Hintergrundfenster reduzieren Spiel, Engine und OS Frames und Verarbeitung. Empfangene Pakete werden nicht rechtzeitig verarbeitet, stauen sich oder laufen über. (Client-Entwicklung (Entwicklungsteam))
Grundursachen von TCP-Retransmissions
- Verlust auf der Funkstrecke: WLAN und Mobilfunknetz wiederholen eine Übertragung auf der Funkstrecke einige Male und verwerfen das Paket, wenn es dann immer noch nicht klappt. Verworfene Pakete sendet TCP erst deutlich später erneut. (Extern (Extern))
- Warteschlangenüberlauf am Engpass (Verlust durch Überlast): Ist die Warteschlange an der engsten Stelle voll, etwa am Router, am Übergabepunkt zwischen Providern oder an der Leitung des Rechenzentrums, werden neu ankommende Pakete verworfen. (Netzwerk-Infrastruktur (Infrastrukturteam))
- Überlauf flacher Puffer durch Sende-Bursts: Sendet der Server in jedem Tick die Updates für Tausende Spieler im selben Augenblick, laufen kleine Switch-Puffer oder kurzfristige Limits in der Cloud in weniger als 1 ms über, und ein Teil der Pakete wird verworfen. (Server-Entwicklung (Entwicklungsteam))
- Policer verwirft Überschuss: Provider-Tarife, Limits von Cloud-Instanzen und DDoS-Schutzgeräte verwerfen Pakete oberhalb einer festgelegten Rate teils sofort, ohne sie in eine Warteschlange zu stellen. (Netzwerk-Infrastruktur (Infrastrukturteam))
- Physische Fehler (defekte Kabel, optische Module, Stecker): Beschädigte Kabel, verschmutzte optische Stecker und gealterte optische Module verursachen Bitfehler, und beschädigte Pakete verwerfen die Geräte stillschweigend. (Netzwerk-Infrastruktur (Infrastrukturteam))
- Duplex-Mismatch: Nutzt eine Seite Autonegotiation und hat die andere Geschwindigkeit und Duplex fest eingestellt, arbeitet eine Seite im Halbduplex und verliert unter Last durch Kollisionen Pakete. (Netzwerk-Infrastruktur (Infrastrukturteam))
- Verworfene Pakete auf dem empfangenden Server-Host: Die Pakete erreichen den Server, werden aber verworfen, weil der Ringpuffer der NIC (ein Puffer, der ankommende Pakete kurz zwischenspeichert) überläuft oder der CPU-Kern, auf dem der Kernel den Empfang verarbeitet, voll ausgelastet ist. (Server-Infrastruktur (Infrastrukturteam))
- Überschrittenes Verarbeitungslimit von Zwischengeräten (Firewall, IPS, DDoS-Schutz): Firewalls, Intrusion-Prevention-Systeme (IPS) und DDoS-Schutzgeräte prüfen jedes durchlaufende Paket einzeln. Sobald ihre Prüfkapazität überschritten ist, verwerfen sie die Pakete, die sie nicht mehr verarbeiten können. (Netzwerk-Infrastruktur (Infrastrukturteam))
- Routenwechsel oder defekter ECMP-Pfad: Pakete verschwinden in den Sekunden, in denen sich die Internet-Route ändert, oder auf Verbindungen, die unter mehreren ECMP-Pfaden einem defekten Pfad zugeordnet sind. (Netzwerk-Infrastruktur (Infrastrukturteam))
- Unnötige Retransmission durch Latenzsprünge: Das Paket ist gar nicht verschwunden, es kommt nur kurz sehr spät an. Dauert diese Verzögerung länger als das RTO, wertet der Sender das als Verlust und sendet erneut. (Extern (Extern))
- RTO-Einstellung passt nicht zur Umgebung: Ist das RTO-Minimum zu weit gesenkt, kommt es schon bei leichter Verspätung zu unnötigen Retransmissions. Der Standardwert (200 ms) ist für Spiele zu lang, jeder einzelne Verlust führt zu einem langen Stillstand. (Server-Infrastruktur (Infrastrukturteam))
- Langsame Wiederherstellung bei Thin Streams: Sendet eine Verbindung wie bei Spielen nur vereinzelt kleine Pakete, läuft das RTO ab, bevor „3 nachfolgende Pakete“ beisammen sind. Beim selben Verlust steht sie deutlich länger still als eine große Übertragung. (Server-Entwicklung (Entwicklungsteam))
- Zwischengeräte entfernen TCP-Optionen: Entfernen oder verändern manche Firewalls und WAN-Beschleuniger TCP-Optionen, wird bei mehreren Verlusten nur ein Paket pro Round Trip wiederhergestellt, oder das Window (die Menge, die auf einmal gesendet werden darf) schrumpft, und alles wird langsamer. (Netzwerk-Infrastruktur (Infrastrukturteam))
- Zero Window (Stillstand, der wie eine Retransmission aussieht): Liest das empfangende Programm den Socket nicht rechtzeitig und läuft der Puffer voll, stellt der Sender die Übertragung ein und schickt nur noch Zero-Window-Probes. Die Leitung ist in Ordnung. (Client-Entwicklung (Entwicklungsteam))
Interaktiven Symptomkatalog mit Grafiken ansehen