한국어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

Vượt tick budget Tick overrun

ID nguyên nhân sp-tick-overrun · 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 →

Khi khối lượng việc trong một tick vượt budget, chu kỳ tick của server bị kéo dài, và cả khu vực đó chạy chậm lại hoặc giật khựng.

Vì sao Việc cần xử lý trong một tick (ví dụ 50 ms) vượt budget → Dẫn đến Trạng thái game lẽ ra được tính 20 lần trong 1 giây chỉ được tính 8 lần → Trên màn hình Cả khu vực bị quay chậm (tùy thiết kế server có thể là giật khựng), skill phản hồi chậm

Triệu chứng
Quay chậm, Trễ thao tác, Giật khựng
Yếu tố
Ngưng trệ
Ai gặp phải
Một địa điểm hoặc kênh, Cả server
Khi nào
Khi đông người, Giờ cao điểm buổi tố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 các phép tính tốn kém, chia tick ra nhiều thread, phân tán người chơi (kênh), ghi thời gian xử lý tick thành chỉ số.
Việc cần làm (Đội hạ tầng)
Thêm thời gian tick và mức sử dụng CPU theo từng core vào giám sát và cảnh báo, cân nhắc CPU hoặc instance có hiệu năng đơn nhân (xung nhịp) cao.
Con số tham khảo
Budget của server 20 tick là 50 ms, 30 tick là 33 ms, 60 tick là 16,7 ms. Để phòng lúc người chơi đột ngột dồn về, an toàn hơn là chừa khoảng dư: bình thường chỉ dùng khoảng một nửa budget.
Trên đồ thị
Tăng theo số người và tải · Thời gian tick của server, số người theo từng zone và kênh, CPU của game thread
Chỗ cần xem
Thời gian xử lý tick (p99) và số lần vượt tick do server ghi lại, đặt cùng đồ thị với số người theo từng zone và kênh. Nếu không có chỉ số tick, xem mức sử dụng CPU của một game thread bằng pidstat -t 1
Đúng nếu
vào lúc người chơi dồn về, thời gian tick vượt budget (20 tick thì 50 ms), và trong lúc đó mức sử dụng CPU của game thread dính sát 100%
Loại trừ nếu
tick bị vượt nhưng CPU của game thread thấp → nguyên nhân thuộc loại chờ (GC pause, lock, gọi đồng bộ). Độ trễ run queue trong bcc runqlat dài nghĩa là thread không được cấp CPU → thiếu CPU hoặc quá nhiều thread
Cách kiểm tra
Cần log và chỉ số của server, client game
Tìm hiểu thêm
Tick trễ trông ra sao là tùy thiết kế server. Server tiến trạng thái game thêm một khoảng thời gian cố định (ví dụ 50 ms) mỗi tick thì bản thân thời gian trong game chậm lại, thành quay chậm. Server di chuyển mọi thứ một lần theo đúng thời gian thực đã trôi qua thì giữ được tốc độ game, nhưng gói tin thưa và mỗi lần di chuyển một đoạn lớn, nên trông như giật khựng hoặc dịch chuyển tức thời. Dù kiểu nào, phản hồi thao tác cũng chậm đi. Nếu một game thread phụ trách cả server thì cả server chậm; nếu chia thread theo khu vực thì khu vực đó chậm. Có game như EVE Online cố ý làm chậm thời gian trong game tới 10 lần trong các trận đánh lớn (Time Dilation) để phần tính toán theo kịp.
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. VALORANT's 128-Tick Servers Riot Games
    Server 128 tick phải xong một frame trong 7,8125 ms; đo thời gian frame của server theo từng hệ thống con và chia budget để quản lý
  2. HED-GP Technical Retrospective: What a HED-ache CCP Games
    EVE Online dùng Time Dilation làm chậm thời gian game khi quá tải, mức sàn là 10% (chậm 10 lần); bình thường CPU của node dưới 80%
  3. Handling variation in time Unity
    Khi mô phỏng bước cố định bị tụt lại, các bước đuổi theo được chạy dồn một lượt, phần thời gian vượt giới hạn bị bỏ, nên thời gian game trôi chậm hơn thực tế
  4. pidstat(1) — Linux manual page sysstat
    -t hiển thị kèm thống kê theo từng thread thuộc tiến trình (mức sử dụng CPU, v.v.)
  5. Demonstrations of runqlat, the Linux eBPF/bcc version IO Visor
    Hiển thị độ trễ run queue của bộ lập lịch (thời gian tác vụ chờ đến khi được cấp CPU) dưới dạng histogram

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 (Quay chậm)

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