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

Game-Lag-Whitepaper › L1 Spielprozess auf dem Client

Engpass bei der Paketverarbeitung im Main-Thread Network processing on the main thread

Ursachen-ID cg-net-mainthread · Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Verarbeitet der Client empfangene Pakete pro Frame nur bis zu einer festen Menge, schieben sich angestaute Pakete immer weiter in die nächsten Frames.

Warum An belebten Orten treffen Tausende Updates pro Sekunde ein → Folge Main-Thread stößt an die Verarbeitungsgrenze pro Frame und kommt mit dem Lesen nicht nach → Auf dem Bildschirm Bewegungen anderer Spieler werden immer später und gebündelt übernommen

Symptome
Zeitraffer, Input-Lag
Faktoren
Stillstand, Latenz
Wer ist betroffen
Bestimmter Ort oder Kanal, Nur ich
Wann
Bei großem Andrang
Zuständigkeit
Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Client: Empfang und Parsing in einen eigenen Thread verlegen, ältere Positions-Updates desselben Objekts zusammenfassen und nur das neueste anwenden. Server: an belebten Orten Updates entfernter Charaktere seltener senden und so die Datenmenge reduzieren.
Größenordnungen
Stauen sich unverarbeitete Pakete, reichen wenige Sekunden, um eine ganze Sekunde in Rückstand zu geraten.
Im Graphen
Steigt mit Spielerzahl und Last · Anzahl unverarbeiteter empfangener Pakete, Verzögerung zwischen Empfang und Anwendung
Wo nachsehen
Im Client protokollieren, wie viele Pakete pro Frame unverarbeitet liegen bleiben und wie lange es vom Eintreffen eines Pakets bis zur Anwendung im Spiel dauert, und beides der Spielerzahl in der Umgebung gegenüberstellen
Spricht dafür
An belebten Orten wachsen die Zahl liegengebliebener Pakete und die Anwendungsverzögerung stetig, Ping und Sendeintervall des Servers sind zur selben Zeit normal
Spricht dagegen
Keine Anwendungsverzögerung, aber die Pakete selbst kommen spät an: Netzwerkstrecke. Frametime steigt stark: „Renderlast durch große Spielermengen“
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig

Quellen

  1. Actor Priority in Unreal Engine Epic Games
    Bei knapper Bandbreite priorisiert die Engine Actors nach Entfernung zum Betrachter und Zeit seit der letzten Replikation und repliziert nicht jeden Actor bei jedem Durchlauf
  2. Replication Graph in Unreal Engine Epic Games
    Spiele mit vielen Spielern und Replikationsobjekten (etwa MMORPGs) müssen nach Position gruppieren und nur die nötigen Objekte senden, um einen CPU-Engpass auf dem Server zu vermeiden

Verwandte Ursachen

Gleiche Schicht: L1 Spielprozess auf dem Client

Ursachen aus anderen Schichten mit demselben Symptom (Zeitraffer)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen