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.
Warum Jede Änderung eines Spielers geht an alle, die ihn sehen können → Folge Sehen sich 1.000 Spieler gegenseitig, sind es 1 Million Updates pro Tick → Auf dem Bildschirm Sende-Warteschlange und Bandbreite laufen voll: Latenz und Paketverlust (Input-Lag, Zeitraffer, Teleportieren)
Update-Frequenz nach Entfernung und Wichtigkeit senken (nahe Gegner jeden Tick, entfernte Spieler einige Male pro Sekunde), Datenmenge pro Empfänger begrenzen und mit dem Wichtigsten zuerst füllen, mehrere Updates in ein Paket bündeln, Zahl der angezeigten Spieler begrenzen.
Aufgaben Infrastrukturteam
Sendebandbreite und Pakete pro Sekunde je Server mit den Netzwerklimits von NIC und Instanz vergleichen und alarmieren, vor großen Events die Reserven prüfen.
Größenordnungen
1.000 Spieler × 1.000 Spieler × 20 Ticks = 20 Millionen Updates pro Sekunde. Bei 40 Byte pro Update sind das für den ganzen Server etwa 6,4 Gbps, pro Empfänger etwa 6,4 Mbps. Begrenzt man die sichtbaren Spieler auf 150, sind es insgesamt etwa 1 Gbps und pro Spieler etwa 1 Mbps.
Im Graphen
Steigt mit Spielerzahl und Last · Gesendete Pakete und Bytes des Servers, Spieler an einem Ort
Wo nachsehen
txpck/s und txkB/s aus sar -n DEV 1 (von der Server-NIC pro Sekunde gesendete Pakete und KB) zusammen mit dem Graphen der Spielerzahl betrachten. Bei Cloud-Instanzen die Zähler für Limitüberschreitungen in ethtool -S prüfen (bei AWS ENA bw_out_allowance_exceeded und pps_allowance_exceeded)
Spricht dafür
Mit wachsender Spielerzahl steigen gesendete Pakete und Bytes steiler als die Spielerzahl (annähernd quadratisch), ab Erreichen des Limits steigen die Zähler für Limitüberschreitungen oder die beim Senden verworfenen Pakete
Spricht dagegen
Sendevolumen unverändert, nur die Tick-Zeit steigt: eher Sichtbereichsberechnung oder Spiellogik
HED-GP Technical Retrospective: What a HED-acheCCP Games Die O(n²)-Übertragung, bei der n Spieler die Aktionen von n Spielern sehen müssen, ist der unvermeidliche limitierende Faktor großer Flottenschlachten
Actor Priority in Unreal EngineEpic Games Ist die Bandbreite einer Verbindung ausgeschöpft, erhält jeder Actor eine Priorität (Entfernung, Blickrichtung, Zeit seit der letzten Übertragung), und die Bandbreite wird nach Wichtigkeit verteilt
Detailed Actor Replication Flow in Unreal EngineEpic Games NetUpdateFrequency legt die Update-Frequenz pro Actor fest, gesendet wird nach Priorität, und ist die Verbindung ausgeschöpft, wird der Rest auf den nächsten Tick verschoben
sar(1) — Linux manual pagesysstat rxpck/s und txpck/s in sar -n DEV (empfangene und gesendete Pakete pro Sekunde), rxkB/s und txkB/s (empfangene und gesendete KB pro Sekunde)