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

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

Lượng gửi giảm mạnh do kiểm soát tắc nghẽn Congestion control backoff

ID nguyên nhân sk-congestion · 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 →

TCP coi mất gói là tín hiệu tắc nghẽn và giảm tốc độ gửi 30–50%. Mất gói do Wi-Fi cũng bị xử lý y như vậy.

Vì sao Có chút mất gói trên Wi-Fi hoặc đường truyền đúng lúc cần gửi nhiều dữ liệu → Dẫn đến TCP giảm mạnh tốc độ gửi rồi hồi phục chậm (CUBIC, thuật toán mặc định của Linux và Windows, giảm 30%) → Trên màn hình Ở nơi đông người, bản cập nhật bị dồn lại, gây tua nhanh và trễ thao tác

Triệu chứng
Tua nhanh, Trễ thao tác
Yếu tố
Độ trễ, Ngưng trệ
Ai gặp phải
Chỉ mình tôi
Khi nào
Khi đông người
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 lượng gửi (vùng quan tâm, chỉ gửi phần thay đổi), chia nhỏ ra gửi để không dồn một lượt.
Việc cần làm (Đội hạ tầng)
Chuyển sang thuật toán kiểm soát tắc nghẽn như BBR (tcp_congestion_control).
Trên đồ thị
Tăng dần rồi rơi thẳng · Cửa sổ tắc nghẽn (cwnd) và tốc độ gửi theo từng kết nối
Chỗ cần xem
Chụp ss -ti nhiều lần cho kết nối của người chơi bị dồn bản cập nhật để xem cwnd, ssthresh thay đổi thế nào và tên thuật toán kiểm soát tắc nghẽn (cubic, bbr), đồng thời xem Send-Q có dồn lên không
Đúng nếu
sau mỗi lần mất gói, cwnd giảm mạnh rồi tăng lại chậm, lặp đi lặp lại; trong lúc cwnd thấp, Send-Q dồn lên, trùng với thời điểm người chơi báo tua nhanh và trễ thao tác
Loại trừ nếu
cwnd dư dả mà vẫn bị dồn → xem cửa sổ của bên nhận (“Zero window (khoảng dừng dễ nhầm là truyền lại)”) hoặc phía gửi của server
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. RFC 9438: CUBIC for Fast and Long-Distance Networks IETF
    Khi mất gói, CUBIC nhân cửa sổ với 0,7 (giảm 30%), Reno nhân với 0,5; CUBIC là mặc định trên Linux, Windows và các nền tảng của Apple
  2. TCP BBR congestion control comes to GCP – your Internet just got faster Google Cloud
    Kiểm soát tắc nghẽn dựa trên mất gói giảm mạnh tốc độ gửi ngay cả với những lần mất gói không do tắc nghẽn; BBR quyết định dựa trên tốc độ truyền tới đích và RTT
  3. IP Sysctl Linux kernel
    tcp_congestion_control chọn thuật toán kiểm soát tắc nghẽn cho các kết nối mới
  4. ss(8) — Linux manual page iproute2
    cwnd, ssthresh và tên thuật toán kiểm soát tắc nghẽn trong -i
  5. net/ipv4/tcp_diag.c (Linux v6.12) Linux kernel
    Giá trị Recv-Q và Send-Q trong ss: với socket đang listen là số kết nối chờ accept và giới hạn backlog; với socket đã kết nối là số byte ứng dụng chưa đọc và số byte đã gửi nhưng chưa nhận được ACK

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 (Tua nhanh)

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