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
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
Introduction to Iris in Unreal EngineEpic Games Hält den zu replizierenden Zustand als eine einzige quantisierte Kopie, spart so teure Arbeit, und mehrere Verbindungen nutzen das Ergebnis gemeinsam
VALORANT's 128-Tick ServersRiot 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
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