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

Buku Putih Lag Game › L9 Proses game di server

Biaya serialisasi dan kompresi Serialization / compression cost

ID penyebab sp-serialize · Penanggung jawab utama Pengembangan server (Tim Pengembang Game)

Buka kartu interaktif dengan gambar dan simulasi →

Mengubah data yang akan dikirim menjadi byte dan mengompresinya juga memakan CPU, dan biaya ini melonjak saat pemain banyak.

Mengapa Setiap update, struct diubah menjadi byte lalu dikompresi → Akibatnya Biaya naik sebanding dengan kuadrat jumlah pemain → Di layar Pengiriman terlambat sehingga terjadi input lag

Gejala
Input lag
Faktor
Stall, Latensi
Siapa yang mengalami
Lokasi/channel tertentu
Kapan
Saat banyak pemain berkumpul
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Pakai ulang paket yang sudah dibuat sekali untuk banyak pemain, gunakan format yang ringan.
Di grafik
Naik mengikuti beban · Utilisasi CPU server, CPU thread yang membuat paket
Yang diperiksa
Dengan perf top -p, bandingkan porsi fungsi serialisasi, kompresi, dan enkripsi (termasuk fungsi library seperti zlib, LZ4, OpenSSL) dalam waktu CPU proses game saat pemain sedikit dan saat pemain berkumpul
Cocok jika
Makin banyak pemain berkumpul, makin besar porsi fungsi serialisasi, kompresi, dan enkripsi, dan CPU thread yang membuat paket jenuh lebih dulu
Tidak cocok jika
Porsi fungsi-fungsi ini kecil: lebih mungkin perhitungan jarak pandang atau logika game
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Pada koneksi yang mengenkripsi paket (TLS, DTLS, dan sebagainya), enkripsi dan dekripsi juga memakai CPU. Enkripsi dilakukan terpisah untuk setiap koneksi, jadi walaupun paket yang sudah dibuat sekali dipakai ulang untuk banyak pemain, biaya enkripsinya tetap sebanyak jumlah penerima. Cipher simetris seperti AES-GCM cukup cepat sehingga satu core bisa memproses beberapa GB per detik, dan porsinya biasanya kecil. Namun, kecepatannya sangat bergantung pada ukuran unit yang dienkripsi sekaligus (record), sehingga pada game dengan banyak paket kecil, biaya per byte menjadi besar. Pada handshake yang dilakukan sekali per koneksi, server menandatangani dengan kunci sertifikat dan menghitung pertukaran kunci (ECDHE). Satu core hanya sanggup melakukan sekitar 1.100 (RSA 2048) hingga 18.000 (ECDSA P-256) tanda tangan per detik dan sekitar 9.000 pertukaran kunci per detik, sehingga menjadi beban saat login menumpuk.

Sumber

  1. Introduction to Iris in Unreal Engine Epic Games
    State yang akan direplikasi disimpan sebagai satu salinan terkuantisasi sehingga pekerjaan yang mahal berkurang, dan hasil pekerjaan itu dipakai bersama oleh banyak koneksi
  2. VALORANT's 128-Tick Servers Riot Games
    Cara membandingkan variabel replikasi untuk setiap klien di setiap frame lalu mengemas nilai yang berubah adalah pekerjaan lambat yang membaca memori secara acak, sehingga memakan banyak CPU server
  3. How "expensive" is crypto anyway? Cloudflare
    Pengukuran BoringSSL: AES-128-GCM sekitar 3,7 GB per detik (sangat bergantung pada ukuran record); per detik, satu core sanggup melakukan tanda tangan RSA 2048 sebanyak 1.120 kali, tanda tangan ECDSA P-256 sebanyak 18.477 kali, dan ECDHE P-256 sebanyak 9.394 kali; di server edge Cloudflare, CPU yang dipakai library TLS sekitar 1,8%
  4. perf-top(1) — Linux manual page perf
    Menampilkan porsi pemakaian CPU per fungsi (simbol) secara real-time untuk proses (-p) yang sedang berjalan

Lihat juga

Lapisan yang sama: L9 Proses game di server

Penyebab di lapisan lain dengan gejala yang sama (Input lag)

Lihat kartu interaktif dengan gambar dan simulasi