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

Buku Putih Lag Game › L11 Disk

Penulisan log sinkron Synchronous logging

ID penyebab dk-sync-log · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

Jika thread game menunggu disk selesai menulis untuk setiap baris log, jalannya game ikut berhenti saat disk sibuk.

Mengapa Log pertempuran dan trade langsung ditulis ke file dari thread game → Akibatnya Jika penyimpanan pasti (fsync) diminta atau buffer tulis OS (page cache) mencapai batasnya, satu kali penulisan butuh puluhan ms saat disk sibuk → Di layar Tersendat sesaat dalam pertempuran yang menghasilkan banyak log

Gejala
Patah-patah, Freeze
Faktor
Stall
Siapa yang mengalami
Lokasi/channel tertentu, 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
Gunakan logging asinkron (buffer memori + thread terpisah), kurangi volume log, jangan memanggil fsync di thread game.
Tugas Tim Infrastruktur
Jalankan rotasi dan kompresi log dengan prioritas I/O rendah, simpan log di disk yang terpisah dari data, pantau latensi tulis disk.
Di grafik
Melonjak acak sesekali · Waktu tick server, latensi tulis disk
Yang diperiksa
Tumpangkan w_await dan aqu-sz di iostat -x 1 dengan waktu tick, lalu dengan perf trace -p PID --duration 10 cari pemanggilan write dan fsync di server game yang memakan lebih dari 10 ms beserta thread-nya
Cocok jika
Saat tick melonjak, pemanggilan write dan fsync di thread game memakan puluhan ms, dan latensi tulis disk juga melonjak di saat yang sama. Sering bertepatan dengan waktu rotasi atau kompresi log
Tidak cocok jika
Tidak ada system call yang lama di thread game tetapi tick melonjak: lebih mungkin penyebab lain seperti GC, lock, atau tick yang melewati budget. Hanya thread khusus log yang lama: tidak memengaruhi jalannya game
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Biasanya OS menampung penulisan di memori (page cache) lebih dulu dan baru menuliskannya ke disk belakangan, jadi satu baris log umumnya langsung selesai. Jeda terjadi saat penyimpanan pasti diminta dengan fsync, saat penulisan yang tertunda melewati batas sehingga OS memblokir pemanggilan write, dan saat file log dirotasi atau dikompresi. Karena itu, tick normal di waktu biasa dan baru melonjak saat disk sedang sibuk.

Sumber

  1. fsync(2) — Linux manual page Linux man-pages
    fsync menuliskan data yang berubah sampai ke disk (termasuk cache disk) dan memblokir sampai perangkat melaporkan selesai
  2. Documentation for /proc/sys/vm/ Linux kernel
    Jika penulisan yang tertunda (dirty) mencapai dirty_ratio, proses yang menulis harus menuliskan data ke disk sendiri
  3. ionice(1) — Linux manual page util-linux
    Tugas yang dijalankan dengan prioritas I/O idle hanya mendapat waktu disk saat program lain tidak memakai disk
  4. iostat(1) — Linux manual page sysstat
    -x: w_await (rata-rata waktu pemrosesan permintaan tulis, termasuk waktu menunggu di antrean), aqu-sz (rata-rata panjang antrean, nama lamanya avgqu-sz)
  5. perf-trace(1) — Linux manual page perf
    -p melacak system call proses yang sedang berjalan; --duration hanya menampilkan pemanggilan yang lebih lama dari jumlah ms yang ditentukan

Lihat juga

Lapisan yang sama: L11 Disk

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

Lihat kartu interaktif dengan gambar dan simulasi