Jika jumlah thread jauh melebihi jumlah core, OS menghabiskan CPU hanya untuk menjalankan thread-thread itu secara bergiliran.
Mengapa Ada ratusan hingga ribuan thread, misalnya karena setiap koneksi dibuatkan thread sendiri → Akibatnya Biaya context switching (pergantian thread yang berjalan) dan cache miss meningkat → Di layar CPU sibuk tetapi throughput rendah dan tick tidak beraturan, sehingga terjadi patah-patah atau slow motion
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)
Tugas Tim Pengembang Game
Sesuaikan jumlah thread dengan jumlah core, gunakan I/O asinkron (epoll, IOCP).
Tugas Tim Infrastruktur
Pantau jumlah context switching dan jumlah thread yang menunggu dijalankan (cs dan r di vmstat).
Kisaran angka
Satu kali context switching memakan beberapa µs, dan menjadi lebih besar jika ditambah biaya cache miss sesudahnya.
Di grafik
Naik mengikuti beban · Jumlah context switching per detik, jumlah thread yang menunggu dijalankan
Yang diperiksa
Bandingkan cs (context switching per detik) dan r (jumlah yang sedang berjalan atau menunggu CPU) di vmstat 1 dengan jumlah core, lalu periksa context switching voluntary (cswch/s) dan involuntary (nvcswch/s) per thread server game dengan pidstat -w -t
Cocok jika
Saat jumlah pemain online bertambah, r naik jauh melebihi jumlah core dan cs ikut melonjak, serta ada ratusan thread dengan banyak context switching involuntary
Tidak cocok jika
r tetap sama dengan atau di bawah jumlah core: bukan penyebab ini. Hanya context switching voluntary yang banyak: thread sedang menunggu lock atau I/O (“Perebutan lock”, “Arsitektur I/O blocking”)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Sumber
Quantifying The Cost of Context Switch (ExpCS 2007)ACM Biaya langsung context switching sekitar 3,8 µs; biaya tidak langsung termasuk efek cache berkisar dari beberapa µs hingga lebih dari 1.000 µs (sesuai lingkungan pengukuran)
vmstat(8) — Linux manual pageprocps-ng Kolom cs (jumlah context switching per detik) dan r (jumlah proses yang sedang berjalan atau menunggu dijalankan)
I/O Completion PortsMicrosoft Memproses banyak I/O asinkron dengan thread pool yang dibuat lebih dulu dan IOCP, serta menyesuaikan jumlah thread yang berjalan bersamaan dengan konkurensi CPU
pidstat(1) — Linux manual pagesysstat cswch/s pada -w adalah context switching voluntary (thread berhenti sendiri karena menunggu sumber daya), nvcswch/s adalah context switching involuntary (dipaksa berganti karena time slice habis), -t untuk melihat per thread