Khi container bị đặt giới hạn CPU, ngay lúc dùng hết quota trong một chu kỳ cố định (thường là 100 ms), container bị buộc dừng trong phần thời gian còn lại của chu kỳ đó (throttling).
Vì sao Container server game bị đặt giới hạn CPU (limit), ví dụ trên Kubernetes → Dẫn đến Lúc tính toán tick dồn lại, container dùng hết quota và dừng vài chục ms cho đến chu kỳ sau → Trên màn hình CPU trung bình thấp nhưng tick vọt lên theo chu kỳ, gây giật khựng và quay chậm
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)
Chỉnh số worker thread khớp với giới hạn CPU (không để runtime tạo số thread bằng tổng số core của host).
Việc cần làm (Đội hạ tầng)
Đặt giới hạn CPU rộng rãi, hoặc bỏ giới hạn và gán core riêng, giám sát số lần bị throttle (nr_throttled).
Con số tham khảo
Trên server giới hạn 2 core, nếu 8 thread cùng làm việc, quota của chu kỳ 100 ms sẽ hết sau 25 ms và server dừng 75 ms.
Trên đồ thị
Tăng theo số người và tải · Số lần bị throttle (nr_throttled), thời gian tick của server
Chỗ cần xem
Mức tăng nr_throttled và throttled_usec (cgroup v1 là nr_throttled và throttled_time) trong cpu.stat của cgroup container, xem cùng thời gian tick của server
Đúng nếu
mức sử dụng CPU trung bình thấp hơn giới hạn nhưng nr_throttled và throttled_usec liên tục tăng, trùng với lúc tick vọt lên
Loại trừ nếu
nr_throttled không tăng. Bản thân máy ảo bị chậm lại → “CPU steal (máy ảo)”
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Nguồn
CFS Bandwidth ControlLinux kernel Dùng hết quota được cấp trong một chu kỳ thì thread dừng đến chu kỳ sau (throttling); chu kỳ mặc định 100 ms; thống kê nr_throttled
Control Group v2Linux kernel cpu.max có dạng “$MAX $PERIOD” (quota, chu kỳ), giá trị mặc định là “max 100000” (chu kỳ 100 ms)