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

Sách trắng lag game › L9 Tiến trình game phía server

Broadcast bùng nổ Broadcast fan-out (N×N)

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

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

Gửi chuyển động của một người cho tất cả những ai nhìn thấy người đó thì số bản cập nhật phải gửi tăng theo bình phương số người tụ tập.

Vì sao Thay đổi của một người được gửi cho mọi người nhìn thấy người đó → Dẫn đến 1.000 người cùng nhìn thấy nhau thì mỗi tick có 1 triệu bản cập nhật → Trên màn hình Hàng đợi gửi và băng thông bão hòa, gây trễ và mất gói (trễ thao tác, tua nhanh, dịch chuyển tức thời)

Triệu chứng
Trễ thao tác, Dịch chuyển tức thời, Tua nhanh
Yếu tố
Độ trễ, Mất gói
Ai gặp phải
Một địa điểm hoặc kênh, Cả server
Khi nào
Khi đông người
Phụ trách
Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Hạ tầng server (Đội hạ tầng)
Việc cần làm (Đội phát triển game)
Giảm tần suất cập nhật theo khoảng cách và mức độ quan trọng (kẻ địch ở gần thì mỗi tick, người ở xa thì vài lần trong 1 giây), đặt giới hạn lượng gửi cho mỗi người và lấp bằng thứ quan trọng trước, gộp nhiều bản cập nhật vào một gói, giới hạn số người hiển thị.
Việc cần làm (Đội hạ tầng)
So sánh băng thông gửi và số gói mỗi giây của từng server với giới hạn mạng của NIC và instance để cảnh báo, kiểm tra khoảng dư trước các sự kiện lớn.
Con số tham khảo
1.000 người × 1.000 người × 20 tick = 20 triệu bản cập nhật mỗi giây. Nếu mỗi bản 40 byte thì cả server khoảng 6,4 Gbps, mỗi người nhận khoảng 6,4 Mbps. Giới hạn số người hiển thị ở 150 thì cả server còn khoảng 1 Gbps, mỗi người khoảng 1 Mbps.
Trên đồ thị
Tăng theo số người và tải · Số gói và số byte server gửi, số người tụ tập ở một chỗ
Chỗ cần xem
txpck/s và txkB/s (số gói và số KB mà NIC của server gửi mỗi giây) trong sar -n DEV 1, xem cùng đồ thị số người. Với instance trên cloud, xem bộ đếm vượt giới hạn trong ethtool -S (bw_out_allowance_exceeded và pps_allowance_exceeded trên AWS ENA)
Đúng nếu
khi số người tụ tập tăng, số gói và byte gửi tăng dốc hơn số người (gần theo bình phương), và từ lúc chạm giới hạn, bộ đếm vượt giới hạn hoặc số gói gửi bị bỏ tăng lên
Loại trừ nếu
lượng gửi không đổi mà chỉ thời gian tick tăng → tính toán tầm nhìn hoặc logic game
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ế
CCP Games 2014: EVE Online: server quá tải trong trận hạm đội quy mô lớn tại HED-GP

Nguồn

  1. HED-GP Technical Retrospective: What a HED-ache CCP Games
    Việc gửi O(n²), khi hành động của n người phải được n người nhìn thấy, là yếu tố giới hạn không thể tránh trong các trận hạm đội quy mô lớn
  2. Actor Priority in Unreal Engine Epic Games
    Khi băng thông của kết nối bão hòa, mỗi actor được xếp mức ưu tiên (khoảng cách, tầm nhìn, thời gian từ lần gửi cuối) và băng thông được chia cho thứ quan trọng trước
  3. Detailed Actor Replication Flow in Unreal Engine Epic Games
    NetUpdateFrequency đặt tần suất cập nhật cho từng actor; actor được gửi theo thứ tự ưu tiên, khi kết nối bão hòa thì phần còn lại dời sang tick sau
  4. sar(1) — Linux manual page sysstat
    rxpck/s và txpck/s (số gói nhận và gửi mỗi giây), rxkB/s và txkB/s (số KB nhận và gửi mỗi giây) trong sar -n DEV
  5. Monitor network performance for ENA settings on your EC2 instance AWS
    bw_out_allowance_exceeded (vượt giới hạn băng thông gửi) và pps_allowance_exceeded (vượt giới hạn PPS): số gói bị xếp vào hàng đợi hoặc bị bỏ

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

Cùng tầng: L9 Tiến trình game phía server

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