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

Game-Lag-Whitepaper › L2 Client-OS und Gerät

Überlauf des Empfangspuffers Socket receive buffer overflow

Ursachen-ID co-rcvbuf · Hauptzuständig Client-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

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.

Warum Frames verzögern sich, das Spiel liest den Socket zu spät → Folge Empfangspuffer des OS voll, UDP-Pakete werden verworfen, bei TCP wird das Receive Window verkleinert und der Sender gestoppt → Auf dem Bildschirm Teleportieren (UDP) oder Zeitraffer (TCP)

Symptome
Teleportieren, Zeitraffer
Faktoren
Paketverlust, Stillstand
Wer ist betroffen
Nur ich
Wann
Bei großem Andrang
Zuständigkeit
Hauptzuständig Client-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Eigener Empfangs-Thread, Puffergröße anpassen (SO_RCVBUF).
Größenordnungen
Der Standard-Empfangspuffer liegt je nach OS und Einstellung bei einigen Dutzend bis einigen hundert KB. Updates an belebten Orten erreichen mitunter mehrere hundert KB pro Sekunde.
Im Graphen
Steigt mit Spielerzahl und Last · Verworfene UDP-Pakete im Empfangspuffer, Frametime
Wo nachsehen
In der Windows-Leistungsüberwachung Microsoft Winsock BSP\Dropped Datagrams (wegen zu kleinen Socket-Empfangspuffers verworfene UDP-Pakete) und UDPv4\Datagrams Received Errors zusammen mit der Frametime aufzeichnen, im Spiel Lücken in den Sequenznummern empfangener Pakete zählen
Spricht dafür
An belebten Orten oder direkt nach langen Frames steigt Dropped Datagrams, im selben Moment entstehen Lücken in den Sequenznummern des Spiels. Zur selben Zeit kein Verlust auf der Leitung
Spricht dagegen
Dropped Datagrams unverändert, aber Sequenznummern fehlen: Verlust unterwegs auf der Route
Prüfmittel
Prüfung in der Umgebung des Spielers

Quellen

  1. socket(7) — Linux manual page Linux man-pages
    SO_RCVBUF ist die maximale Größe des Socket-Empfangspuffers, Standardwert aus rmem_default, Maximum aus rmem_max (auch Android nutzt den Linux-Kernel)
  2. SOL_SOCKET Socket Options (Winsock2.h) Microsoft
    Windows SO_RCVBUF: Pufferplatz, der pro Socket für den Empfang reserviert wird
  3. RFC 9293: Transmission Control Protocol (TCP) IETF
    Das Window-Feld von TCP gibt an, wie viele Bytes der Empfänger noch aufnehmen kann. Bei 0 sendet der Sender nur Zero-Window-Probes und wartet
  4. Low Latency Workloads Management and Operations Microsoft
    Dropped Datagrams und Dropped Datagrams/sec im Leistungsindikatorsatz Microsoft Winsock BSP: verworfene UDP-Pakete, weil sie schneller eintreffen, als die App sie verarbeitet, oder weil der Socket-Empfangspuffer zu klein ist
  5. Network-Related Performance Counters Microsoft
    Leistungsindikatoren UDPv4/UDPv6: Datagrams Received Errors und Microsoft Winsock BSP: Dropped Datagrams

Verwandte Ursachen

Gleiche Schicht: L2 Client-OS und Gerät

Ursachen aus anderen Schichten mit demselben Symptom (Teleportieren)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen