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

Sách trắng lag game › L7 OS server (kernel)

CPU throttling trong container (CFS quota) Container CPU throttling (CFS quota)

ID nguyên nhân so-cpu-quota · 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)

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

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

Triệu chứng
Giật khựng, Quay chậm
Yếu tố
Ngưng trệ, Jitter
Ai gặp phải
Cả server
Khi nào
Khi đông người, Thỉnh thoảng bất chợt
Phụ trách
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

  1. CFS Bandwidth Control Linux 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
  2. Control Group v2 Linux kernel
    cpu.max có dạng “$MAX $PERIOD” (quota, chu kỳ), giá trị mặc định là “max 100000” (chu kỳ 100 ms)
  3. Resource Management for Pods and Containers Kubernetes
    CPU limit của container là giới hạn cứng mà kernel áp đặt bằng CPU throttling

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

Cùng tầng: L7 OS server (kernel)

Nguyên nhân ở tầng khác gây cùng triệu chứng (Giật khựng)

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