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

Game-Lag-Whitepaper › L9 Spielprozess auf dem Server

Kosten für Serialisierung und Kompression Serialization / compression cost

Ursachen-ID sp-serialize · Hauptzuständig Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Auch das Umwandeln der Sendedaten in Bytes und ihre Kompression kosten CPU-Zeit. Bei vielen Spielern schießen diese Kosten in die Höhe.

Warum Für jedes Update werden Strukturen in Bytes umgewandelt und komprimiert → Folge Kosten wachsen mit dem Quadrat der Spielerzahl → Auf dem Bildschirm Senden verzögert sich: Input-Lag

Symptome
Input-Lag
Faktoren
Stillstand, Latenz
Wer ist betroffen
Bestimmter Ort oder Kanal
Wann
Bei großem Andrang
Zuständigkeit
Hauptzuständig Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Einmal erzeugte Pakete für mehrere Empfänger wiederverwenden, schlanke Formate nutzen.
Im Graphen
Steigt mit Spielerzahl und Last · CPU-Auslastung des Servers, CPU der Threads, die Pakete erzeugen
Wo nachsehen
Mit perf top -p den Anteil von Serialisierungs-, Kompressions- und Verschlüsselungsfunktionen (einschließlich Bibliotheksfunktionen wie zlib, LZ4, OpenSSL) an der CPU-Zeit des Spielprozesses bei wenigen und bei vielen Spielern vergleichen
Spricht dafür
Je mehr Spieler zusammenkommen, desto größer der Anteil der Serialisierungs-, Kompressions- und Verschlüsselungsfunktionen, und die CPU der paketerzeugenden Threads ist als Erstes ausgelastet
Spricht dagegen
Anteil dieser Funktionen gering: eher Sichtbereichsberechnung oder Spiellogik
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Mehr dazu
Werden Pakete verschlüsselt (TLS, DTLS u. a.), kosten auch Ver- und Entschlüsselung CPU-Zeit. Verschlüsselt wird pro Verbindung. Auch wenn ein einmal erzeugtes Paket an mehrere Empfänger geht, fallen die Verschlüsselungskosten deshalb für jeden Empfänger an. Symmetrische Verfahren wie AES-GCM sind schnell: Ein Kern schafft mehrere GB pro Sekunde, im Normalbetrieb ist ihr Anteil also gering. Die Geschwindigkeit hängt aber stark von der Größe der Einheit ab, die auf einmal verschlüsselt wird (Record). Bei vielen kleinen Paketen, wie sie in Spielen üblich sind, steigen deshalb die Kosten pro Byte. Beim Handshake, der einmal pro Verbindung stattfindet, signiert der Server mit dem Schlüssel seines Zertifikats und berechnet den Schlüsselaustausch (ECDHE). Ein Kern schafft pro Sekunde etwa 1.100 (RSA 2048) bis 18.000 (ECDSA P-256) Signaturen und etwa 9.000 Schlüsselaustausche. Bei einem Login-Ansturm wird das zur Last.

Quellen

  1. Introduction to Iris in Unreal Engine Epic Games
    Hält den zu replizierenden Zustand als eine einzige quantisierte Kopie, spart so teure Arbeit, und mehrere Verbindungen nutzen das Ergebnis gemeinsam
  2. VALORANT's 128-Tick Servers Riot Games
    Replizierte Variablen in jedem Frame pro Client zu vergleichen und geänderte Werte zu bündeln, erfordert langsame, verstreute Speicherzugriffe und kostet viel Server-CPU
  3. How "expensive" is crypto anyway? Cloudflare
    Messung mit BoringSSL: AES-128-GCM etwa 3,7 GB pro Sekunde (stark abhängig von der Record-Größe), ein Kern schafft pro Sekunde 1.120 RSA-2048-Signaturen, 18.477 ECDSA-P-256-Signaturen und 9.394 P-256-ECDHE-Operationen, auf den Edge-Servern von Cloudflare verbrauchte die TLS-Bibliothek etwa 1,8 % der CPU
  4. perf-top(1) — Linux manual page perf
    Zeigt den CPU-Anteil eines laufenden Prozesses (-p) pro Funktion (Symbol) in Echtzeit

Verwandte Ursachen

Gleiche Schicht: L9 Spielprozess auf dem Server

Ursachen aus anderen Schichten mit demselben Symptom (Input-Lag)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen