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

Buku Putih Lag Game › Akar penyebab retransmisi TCP

Pengaturan RTO tidak sesuai dengan lingkungan RTO min too low or too high

ID penyebab rt-rto-setting · Penanggung jawab utama Infrastruktur server (Tim Infrastruktur) · Turut terlibat Pengembangan server (Tim Pengembang Game)

Buka kartu interaktif dengan gambar dan simulasi →

Jika nilai minimum RTO diturunkan terlalu rendah, keterlambatan kecil saja sudah memicu retransmisi yang tidak perlu. Sebaliknya, nilai default (200 ms) terlalu panjang untuk game sehingga setiap kali paket hilang, game berhenti lama.

Mengapa Nilai minimum RTO diturunkan drastis untuk keperluan data center, atau nilai default dipakai apa adanya di jalur internet → Akibatnya Terlalu rendah: retransmisi membanjir bahkan saat latensi naik sesaat. Terlalu tinggi: setiap packet loss harus ditunggu lama → Di layar Dengan nilai default, satu kali packet loss membuat freeze ratusan ms lalu fast forward; jika diturunkan terlalu rendah, freeze memendek, tetapi retransmisi yang tidak perlu melonjak dan memboroskan bandwidth

Gejala
Freeze, Fast forward, Input lag
Faktor
Latensi
Siapa yang mengalami
Seluruh server
Kapan
Selalu
Penanggung jawab
Penanggung jawab utama Infrastruktur server (Tim Infrastruktur) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Di Linux 6.15 ke atas, pertimbangkan menurunkan batas atas RTO untuk koneksi game dengan TCP_RTO_MAX_MS (waktu sampai koneksi menyerah juga ikut memendek, jadi tentukan sekalian waktu deteksi terputus dengan TCP_USER_TIMEOUT), turunkan nilai minimum RTO hanya untuk koneksi internal antarserver dengan opsi socket TCP_RTO_MIN_US (6.15 ke atas), pertimbangkan opsi socket TCP_THIN_LINEAR_TIMEOUTS agar RTO berturut-turut tidak berlipat dua khusus pada koneksi game.
Tugas Tim Infrastruktur
Turunkan rto_min per rute hanya untuk koneksi internal antarserver, pertahankan nilai default di jalur internet dan lengkapi dengan RACK-TLP serta pengaturan thin stream (tcp_thin_linear_timeouts).
Kisaran angka
RTO di Linux = round-trip time + max(200 ms, deviasi RTT × 4). Nilainya berlipat dua setiap kali gagal, maksimal 120 detik. Di Linux 6.15 ke atas, batas atas ini bisa diturunkan hingga 1 detik dengan TCP_RTO_MAX_MS.
Di grafik
Selalu tinggi sejak awal · RTO per koneksi, jumlah RTO yang tidak perlu
Yang diperiksa
Periksa pengaturan nilai minimum RTO di server (rto_min di ip route show; di Linux 6.11 ke atas, sysctl net.ipv4.tcp_rto_min_us) serta rto dan rtt di ss -ti, lalu periksa kenaikan TcpExtTCPSpuriousRTOs di nstat
Cocok jika
Di server yang nilai minimumnya diturunkan, rto koneksi internet menempel ketat pada rtt dan TcpExtTCPSpuriousRTOs naik banyak. Dengan nilai default, rto koneksi game 200 ms atau lebih di atas rtt, dan setiap packet loss membuat game berhenti selama itu
Tidak cocok jika
rto sesuai perhitungan default (sekitar rtt + 200 ms) dan RTO yang tidak perlu juga sedikit, tetapi jedanya sangat lama: lebih mungkin packet loss berturut-turut atau cara pemulihannya (“Pemulihan lambat pada thin stream”, “Opsi TCP dihapus oleh perangkat perantara”)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)

Sumber

  1. RFC 6298: Computing TCP's Retransmission Timer IETF
    RTO = SRTT + max(G, 4·RTTVAR), minimum yang direkomendasikan 1 detik, berlipat dua setiap kali gagal, dan jika ada nilai maksimum, nilainya minimal 60 detik
  2. include/net/tcp.h Linux kernel
    TCP_RTO_MIN di Linux 200 ms, TCP_RTO_MAX 120 detik
  3. net/ipv4/tcp_input.c Linux kernel
    RTO di Linux adalah SRTT + rttvar, dan rttvar tidak pernah turun di bawah nilai minimum RTO (default 200 ms)
  4. tcp: add the ability to control max RTO Linux kernel
    Penambahan opsi socket TCP_RTO_MAX_MS (1–120 detik), mulai Linux 6.15
  5. tcp: add sysctl_tcp_rto_min_us Linux kernel
    Penambahan tcp_rto_min_us, nilai minimum RTO default untuk seluruh server, mulai Linux 6.11
  6. tcp: support TCP_RTO_MIN_US for set/getsockopt use Linux kernel
    Penambahan opsi socket TCP_RTO_MIN_US untuk menentukan nilai minimum RTO per socket, mulai Linux 6.15
  7. IP Sysctl Linux kernel
    Default tcp_rto_min_us 200000 (opsi rute rto_min dan opsi socket TCP_RTO_MIN_US lebih diutamakan), tcp_rto_max_ms 1.000–120.000 (default 120.000), tcp_thin_linear_timeouts
  8. ip-route(8) — Linux manual page iproute2
    Opsi rto_min per rute: nilai minimum RTO yang dipakai saat berkomunikasi dengan tujuan itu
  9. Thin-streams and TCP Linux kernel
    TCP_THIN_LINEAR_TIMEOUTS bisa mematikan exponential backoff khusus untuk koneksi thin stream
  10. tcp(7) — Linux manual page Linux man-pages
    TCP_USER_TIMEOUT: lama menunggu data yang belum dikonfirmasi sebelum koneksi ditutup
  11. ss(8) — Linux manual page iproute2
    rto (ms) dan rtt di ss -i
  12. SNMP counter Linux kernel
    TcpExtTCPSpuriousRTOs: RTO tidak perlu yang dideteksi F-RTO

Lihat juga

Lapisan yang sama: Akar penyebab retransmisi TCP

Penyebab di lapisan lain dengan gejala yang sama (Freeze)

Lihat kartu interaktif dengan gambar dan simulasi