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

Sách trắng lag game › L8 Socket và giao thức

Slow start sau thời gian nhàn rỗi Slow start after idle

ID nguyên nhân sk-slowstart · Phụ trách chính Hạ tầng server (Đội hạ tầng) · Phối hợp Phát triển server (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Khi kết nối nhàn rỗi một lúc, TCP thu nhỏ lại cửa sổ tắc nghẽn (lượng dữ liệu gửi được trong một lần), nên khi đột ngột gửi dữ liệu lớn, TCP phải chia ra gửi nhiều lượt.

Vì sao Gửi dữ liệu lớn (ví dụ khi vào thị trấn) qua một kết nối đang nhàn rỗi → Dẫn đến Cửa sổ tắc nghẽn đã bị thu nhỏ nên dữ liệu bị chia ra gửi qua nhiều lượt khứ hồi → Trên màn hình Ngay sau khi vào, nhân vật và NPC xung quanh hiện ra trễ vài lượt khứ hồi (server càng xa càng dễ thấy)

Triệu chứng
Trễ thao tác, Không hiển thị·đối tượng ma
Yếu tố
Độ trễ
Ai gặp phải
Chỉ mình tôi
Khi nào
Khi di chuyển hoặc chuyển bản đồ, Sau khi để yên một lúc
Phụ trách
Phụ trách chính Hạ tầng server (Đội hạ tầng) · Phối hợp Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Giảm dữ liệu gửi lúc vào (gửi những gì thật sự cần trước).
Việc cần làm (Đội hạ tầng)
Tắt tcp_slow_start_after_idle (Linux, cấu hình cho cả server).
Con số tham khảo
Nhàn rỗi lâu hơn RTO thì cửa sổ tắc nghẽn bắt đầu thu nhỏ; nếu nhàn rỗi lâu, nó giảm xuống khoảng 14 KB (10 gói). Khi đó 100 KB không gửi được trong một lần mà phải chia ra 3 lượt khứ hồi.
Trên đồ thị
Chỉ một phần cao · Thời gian truyền ngay sau khi vào (người chơi có RTT dài)
Chỗ cần xem
Giá trị sysctl net.ipv4.tcp_slow_start_after_idle; lúc người chơi vào một khu vực sau khi nhàn rỗi, cwnd (cửa sổ tắc nghẽn) của kết nối đó trong ss -ti có bị thu nhỏ không
Đúng nếu
cấu hình là 1 (mặc định), và lúc vào sau khi nhàn rỗi, cwnd giảm xuống quanh 10 nên việc truyền bị chia ra nhiều lượt khứ hồi. Người chơi có RTT càng dài thì mọi thứ hiện ra càng trễ, và đổi thành 0 thì hết
Loại trừ nếu
cwnd vẫn giữ ở mức lớn mà mọi thứ vẫn hiện ra trễ → phần xử lý vào khu vực phía server (“Spawn dồn dập khi vào khu vực đông người”)
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)

Nguồn

  1. IP Sysctl Linux kernel
    tcp_slow_start_after_idle mặc định bật; nhàn rỗi trong một khoảng RTO thì thu nhỏ cửa sổ tắc nghẽn (theo cách của RFC 2861)
  2. RFC 5681: TCP Congestion Control IETF
    Nếu không gửi dữ liệu lâu hơn RTO, cửa sổ tắc nghẽn bị giảm xuống tối đa bằng cửa sổ khởi động lại min(IW, cwnd) và slow start lại từ đầu
  3. RFC 6928: Increasing TCP's Initial Window IETF
    Cửa sổ ban đầu 10 segment, tối đa 14.600 byte
  4. ss(8) — Linux manual page iproute2
    cwnd (cửa sổ tắc nghẽn) và ssthresh (ngưỡng slow start) trong -i

Nguyên nhân nên xem cùng

Cùng tầng: L8 Socket và giao thức

Nguyên nhân ở tầng khác gây cùng triệu chứng (Trễ thao tác)

Xem thẻ gốc có hình minh họa và thí nghiệm