Jika container diberi batas CPU, begitu kuota dalam satu periode (biasanya 100 ms) habis, container dipaksa berhenti selama sisa periode itu (throttling).
Mengapa Batas CPU (limit) dipasang pada container server game, misalnya di Kubernetes → Akibatnya Saat perhitungan tick menumpuk, kuota habis dan proses berhenti puluhan ms sampai periode berikutnya → Di layar Rata-rata CPU rendah tetapi tick melonjak secara berkala, sehingga terjadi patah-patah atau slow motion
Saat banyak pemain berkumpul, Sesekali secara acak
Penanggung jawab
Penanggung jawab utama Infrastruktur server (Tim Infrastruktur) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Sesuaikan jumlah worker thread dengan batas CPU (agar runtime tidak membuat thread sebanyak seluruh core host).
Tugas Tim Infrastruktur
Beri batas CPU yang longgar atau hapus batasnya dan alokasikan core khusus, pantau jumlah throttling (nr_throttled).
Kisaran angka
Pada server dengan batas 2 core, jika 8 thread bekerja bersamaan, kuota periode 100 ms habis dalam 25 ms dan proses berhenti selama 75 ms.
Di grafik
Naik mengikuti beban · Jumlah throttling (nr_throttled), waktu tick server
Yang diperiksa
Periksa kenaikan nr_throttled dan throttled_usec (di cgroup v1: nr_throttled dan throttled_time) di cpu.stat cgroup container bersama waktu tick server
Cocok jika
Rata-rata utilisasi CPU di bawah batas, tetapi nr_throttled dan throttled_usec terus naik dan waktunya bertepatan dengan lonjakan tick
Tidak cocok jika
nr_throttled tidak naik: bukan penyebab ini. Virtual machine itu sendiri yang tertahan: lebih mungkin “CPU steal (virtual machine)”
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Sumber
CFS Bandwidth ControlLinux kernel Jika kuota yang diterima di setiap periode habis, thread berhenti sampai periode berikutnya (throttling); periode default 100 ms; statistik nr_throttled
Control Group v2Linux kernel cpu.max berformat “$MAX $PERIOD” (kuota, periode), dengan nilai default “max 100000” (periode 100 ms)