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

Game-Lag-Whitepaper › Grundursachen von TCP-Retransmissions

RTO-Einstellung passt nicht zur Umgebung RTO min too low or too high

Ursachen-ID rt-rto-setting · Hauptzuständig Server-Infrastruktur (Infrastrukturteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Ist das RTO-Minimum zu weit gesenkt, kommt es schon bei leichter Verspätung zu unnötigen Retransmissions. Der Standardwert (200 ms) ist für Spiele zu lang, jeder einzelne Verlust führt zu einem langen Stillstand.

Warum RTO-Minimum für den Rechenzentrumsbetrieb stark gesenkt, oder Standardwert unverändert auf Internetstrecken → Folge Zu niedrig: Flut von Retransmissions schon bei kurzen Verzögerungen. Zu hoch: lange Wartezeit bei jedem Verlust → Auf dem Bildschirm Mit Standardwert pro Verlust einige hundert ms Freeze, dann Zeitraffer. Zu weit gesenkt: weniger Freeze, aber unnötige Retransmissions nehmen sprunghaft zu und verschwenden Leitungskapazität

Symptome
Freeze, Zeitraffer, Input-Lag
Faktoren
Latenz
Wer ist betroffen
Ganzer Server
Wann
Immer
Zuständigkeit
Hauptzuständig Server-Infrastruktur (Infrastrukturteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Ab Linux 6.15 prüfen, ob sich die RTO-Obergrenze für Spielverbindungen mit TCP_RTO_MAX_MS senken lässt (dadurch wird auch die Zeit bis zur Aufgabe kürzer, daher zugleich per TCP_USER_TIMEOUT festlegen, wann eine Verbindung als abgebrochen gilt), das RTO-Minimum nur für interne Verbindungen zwischen Servern per Socket-Option TCP_RTO_MIN_US (ab 6.15) senken, prüfen, ob sich per Socket-Option TCP_THIN_LINEAR_TIMEOUTS nur für Spielverbindungen das Verdoppeln bei aufeinanderfolgenden RTOs abschalten lässt.
Aufgaben Infrastrukturteam
rto_min pro Route nur für interne Verbindungen zwischen Servern senken, auf Internetstrecken den Standardwert beibehalten und mit RACK-TLP und Thin-Stream-Einstellungen (tcp_thin_linear_timeouts) ergänzen.
Größenordnungen
Linux-RTO = Umlaufzeit + max(200 ms, RTT-Abweichung × 4). Bei jedem Fehlschlag doppelt so lang, maximal 120 s. Ab Linux 6.15 lässt sich diese Obergrenze mit TCP_RTO_MAX_MS bis auf 1 s senken.
Im Graphen
Von Anfang an dauerhaft hoch · RTO pro Verbindung, unnötige RTOs
Wo nachsehen
Eingestelltes RTO-Minimum des Servers (rto_min in ip route show, ab Linux 6.11 sysctl net.ipv4.tcp_rto_min_us) sowie rto und rtt in ss -ti prüfen, Zuwachs von TcpExtTCPSpuriousRTOs in nstat ansehen
Spricht dafür
Auf Servern mit gesenktem Minimum liegt rto bei Internetverbindungen dicht an rtt, und TcpExtTCPSpuriousRTOs steigt stark. Mit Standardwert ist rto bei Spielverbindungen mindestens 200 ms größer als rtt, und jeder Verlust bedeutet einen Stillstand dieser Länge
Spricht dagegen
rto entspricht der Standardberechnung (rtt + ca. 200 ms), wenige unnötige RTOs, aber auffallend lange Stillstände: Verluste in Folge oder Wiederherstellungsverfahren („Langsame Wiederherstellung bei Thin Streams“, „Zwischengeräte entfernen TCP-Optionen“)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)

Quellen

  1. RFC 6298: Computing TCP's Retransmission Timer IETF
    RTO = SRTT + max(G, 4·RTTVAR), Empfehlung mindestens 1 s, bei jedem Fehlschlag doppelt, ein Maximum muss, falls vorhanden, mindestens 60 s betragen
  2. include/net/tcp.h Linux kernel
    Linux: TCP_RTO_MIN 200 ms, TCP_RTO_MAX 120 s
  3. net/ipv4/tcp_input.c Linux kernel
    Linux-RTO ist SRTT + rttvar, und rttvar sinkt nicht unter das RTO-Minimum (standardmäßig 200 ms)
  4. tcp: add the ability to control max RTO Linux kernel
    Socket-Option TCP_RTO_MAX_MS hinzugefügt (1–120 s), ab Linux 6.15
  5. tcp: add sysctl_tcp_rto_min_us Linux kernel
    Serverweites Standard-RTO-Minimum tcp_rto_min_us hinzugefügt, ab Linux 6.11
  6. tcp: support TCP_RTO_MIN_US for set/getsockopt use Linux kernel
    Socket-Option TCP_RTO_MIN_US für ein RTO-Minimum pro Socket hinzugefügt, ab Linux 6.15
  7. IP Sysctl Linux kernel
    tcp_rto_min_us standardmäßig 200000 (Routenoption rto_min und Socket-Option TCP_RTO_MIN_US haben Vorrang), tcp_rto_max_ms 1000–120000 (standardmäßig 120000), tcp_thin_linear_timeouts
  8. ip-route(8) — Linux manual page iproute2
    Option rto_min pro Route: RTO-Minimum für die Kommunikation mit diesem Ziel
  9. Thin-streams and TCP Linux kernel
    Mit TCP_THIN_LINEAR_TIMEOUTS lässt sich das exponentielle Backoff nur für Thin-Stream-Verbindungen abschalten
  10. tcp(7) — Linux manual page Linux man-pages
    TCP_USER_TIMEOUT: wie lange auf unbestätigte Daten gewartet wird, bis die Verbindung geschlossen wird
  11. ss(8) — Linux manual page iproute2
    rto (ms) und rtt bei ss -i
  12. SNMP counter Linux kernel
    TcpExtTCPSpuriousRTOs: von F-RTO erkannte unnötige RTOs

Verwandte Ursachen

Gleiche Schicht: Grundursachen von TCP-Retransmissions

Ursachen aus anderen Schichten mit demselben Symptom (Freeze)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen