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

Buku Putih Lag Game › L7 OS server (kernel)

Thread berlebihan dan context switching Thread oversubscription, context switching

ID penyebab so-context · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

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

Gejala
Patah-patah, Slow motion
Faktor
Stall, Jitter
Siapa yang mengalami
Seluruh server
Kapan
Saat banyak pemain berkumpul
Penanggung jawab
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

  1. 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)
  2. vmstat(8) — Linux manual page procps-ng
    Kolom cs (jumlah context switching per detik) dan r (jumlah proses yang sedang berjalan atau menunggu dijalankan)
  3. I/O Completion Ports Microsoft
    Memproses banyak I/O asinkron dengan thread pool yang dibuat lebih dulu dan IOCP, serta menyesuaikan jumlah thread yang berjalan bersamaan dengan konkurensi CPU
  4. pidstat(1) — Linux manual page sysstat
    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

Lihat juga

Lapisan yang sama: L7 OS server (kernel)

Penyebab di lapisan lain dengan gejala yang sama (Patah-patah)

Lihat kartu interaktif dengan gambar dan simulasi