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

Sách trắng lag game › Nguyên nhân gốc của truyền lại TCP

Tràn hàng đợi ở điểm nghẽn (mất gói do tắc nghẽn) Tail drop at a congested bottleneck

ID nguyên nhân rt-queue-drop · Phụ trách chính Hạ tầng mạng (Đội hạ tầng) · Phối hợp Bên ngoài (Bên ngoài), Phát triển client (Đội phát triển game)

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

Khi hàng đợi ở chỗ hẹp nhất trên đường đi (router, chặng kết nối giữa các nhà mạng, đường truyền của trung tâm dữ liệu) đầy, gói tin mới đến sẽ bị bỏ.

Vì sao Video, tải file hoặc lưu lượng của người dùng khác làm điểm nghẽn đầy → Dẫn đến Trong lúc hàng đợi đầy, các gói mới đến liên tiếp bị bỏ (tail drop). Gói không bị bỏ cũng phải chờ ở cuối hàng đợi đang đầy → Trên màn hình Nhiều gói biến mất cùng lúc nên đứng hình lâu rồi tua nhanh, hay gặp vào buổi tối

Triệu chứng
Đứng hình, Tua nhanh, Kéo ngược
Yếu tố
Mất gói, Độ trễ
Ai gặp phải
Cùng một nhà, Một khu vực hoặc nhà mạng, Cả server
Khi nào
Giờ cao điểm buổi tối, Khi đông người
Phụ trách
Phụ trách chính Hạ tầng mạng (Đội hạ tầng) · Phối hợp Bên ngoài (Bên ngoài), Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Khi mất gói dồn lại hoặc ping tăng vọt thì hiển thị trạng thái mạng trên màn hình (báo khả năng có thiết bị đang truyền dữ liệu dung lượng lớn trên cùng đường truyền).
Việc cần làm (Đội hạ tầng)
Bảo đảm dư băng thông cho đường truyền trung tâm dữ liệu, kiểm tra counter gói bị bỏ ở hàng đợi (output drops) trên đường truyền và cổng switch của mình, nếu chặng nhà mạng bị nghẽn thì đi vòng qua đường truyền hoặc peering khác.
Việc cần làm (Bên ngoài)
Hướng dẫn người chơi bật SQM (fq_codel, CAKE) và ECN trên router (để giảm tốc trước khi hàng đợi tràn), yêu cầu nhà mạng nâng cấp điểm nghẽn.
Con số tham khảo
Vào lúc hàng đợi tràn, trong vài chục ms một phần lớn gói tin đi vào bị mất cùng lúc. Vì gói mất liên tiếp và gói gửi lại cũng dễ bị mất, nhiều trường hợp phải chờ tới RTO.
Trên đồ thị
Chỉ cao vào một khung giờ · Tỷ lệ truyền lại, RTT (ping)
Chỗ cần xem
Tỷ lệ truyền lại của server (phần tăng của TcpRetransSegs ÷ TcpOutSegs khi chạy nstat cách nhau 1 phút) và RTT từng kết nối, chia theo khu vực, nhà mạng, khung giờ; xem kèm số gói bị bỏ ở chiều ra (ifOutDiscards) trên đường truyền và cổng switch của mình. Chạy mtr tới khu vực có vấn đề vào giờ cao điểm và giờ vắng rồi so sánh
Đúng nếu
tỷ lệ truyền lại chỉ tăng vào giờ cao điểm buổi tối, và ngay trước khi mất gói thì RTT đã tăng lên trước (dấu hiệu hàng đợi đang đầy dần). Trên mtr, chỉ vào giờ cao điểm mới thấy mất gói và độ trễ cùng tăng từ một chặng nào đó cho đến cuối
Loại trừ nếu
RTT không tăng ngay trước khi mất gói → “Policer bỏ phần vượt mức”. Mất gói lúc nào cũng gần như nhau bất kể khung giờ → “Lỗi vật lý” hoặc “Đổi tuyến đường hoặc tuyến ECMP lỗi”
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Sự cố thực tế
Riot Games 2015: Lưu lượng League of Legends đi đường vòng xa và Riot Direct

Nguồn

  1. RFC 7567: IETF Recommendations Regarding Active Queue Management IETF
    Giải thích rằng tail drop giữ hàng đợi đầy trong thời gian dài, làm tăng độ trễ và gây mất gói theo loạt, kèm khuyến nghị dùng AQM
  2. RFC 8290: The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm IETF
    fq_codel: dùng hàng đợi theo từng luồng và AQM để giữ hàng đợi ngắn, giảm bufferbloat
  3. RFC 3168: The Addition of Explicit Congestion Notification (ECN) to IP IETF
    ECN: báo tắc nghẽn bằng cách đánh dấu trong IP header thay vì bỏ gói tin
  4. Smart Queue Management Bufferbloat.net
    SQM: cách kết hợp lập lịch theo từng luồng, quản lý độ dài hàng đợi (AQM) và shaping
  5. Cake Bufferbloat.net
    CAKE: SQM dành cho router, kết hợp shaper với cơ chế quản lý hàng đợi họ fq_codel
  6. net/ipv4/proc.c Linux kernel
    TcpRetransSegs và TcpOutSegs trong nstat (RetransSegs và OutSegs của mục Tcp)
  7. nstat(8) — Linux manual page iproute2
    Mặc định nstat hiển thị phần tăng kể từ lần chạy trước
  8. RFC 2863: The Interfaces Group MIB IETF
    ifOutDiscards: số gói tin bị bỏ, không được gửi đi dù không có lỗi, vì các lý do như cần giải phóng chỗ trong bộ đệm
  9. An Internet-Wide Analysis of Traffic Policing Google
    Cách phân biệt: tràn hàng đợi thì thời gian chờ và RTT tăng trước khi mất gói, còn policing bỏ phần vượt mức mà RTT không tăng (SIGCOMM 2016)

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

Cùng tầng: Nguyên nhân gốc của truyền lại TCP

Nguyên nhân ở tầng khác gây cùng triệu chứng (Đứng hình)

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