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
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.
VALORANT's 128-Tick ServersRiot 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ý
Handling variation in timeUnity 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ế
pidstat(1) — Linux manual pagesysstat -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.)