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

Buku Putih Lag Game › L6 Kartu jaringan server

Interrupt NIC terpusat di satu core Single-queue NIC / no RSS

ID penyebab nic-irq · Penanggung jawab utama Infrastruktur server (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

Jika NIC hanya mengirim interrupt kedatangan paket ke satu core CPU, core itu menjadi bottleneck.

Mengapa Hanya ada satu antrean terima (RX queue), atau RSS, yang menyebar paket ke beberapa core, dimatikan → Akibatnya Satu core mencapai 100% sehingga paket tidak diambil tepat waktu → Di layar Saat pemain berkumpul, terjadi packet loss dan latensi di seluruh server (teleport, input lag)

Gejala
Teleport, Rubber banding, Input lag
Faktor
Packet loss, Latensi
Siapa yang mengalami
Seluruh server
Kapan
Saat banyak pemain berkumpul
Penanggung jawab
Penanggung jawab utama Infrastruktur server (Tim Infrastruktur)
Tugas Tim Infrastruktur
Konfigurasikan RSS (disebar oleh NIC) dan RPS (disebar oleh kernel), sebar interrupt ke beberapa core, atur agar antrean untuk UDP dibagi sampai ke port (rx-flow-hash udp4 sdfn pada ethtool -N), pisahkan core pemroses interrupt dari core thread tick game, pantau %soft per core.
Kisaran angka
Jumlah paket yang bisa diproses satu core lewat kernel kira-kira ratusan ribu paket per detik, tergantung ukuran paket dan konfigurasi. Jika di utilisasi per core porsi pemrosesan paket masuk (%soft pada mpstat) hanya menumpuk di satu core, inilah penyebabnya.
Di grafik
Mendatar di batas · %soft per core, jumlah paket diterima per detik
Yang diperiksa
Periksa %soft (persentase pemrosesan software interrupt) per core dengan mpstat -P ALL 1, lalu pastikan ke core mana interrupt setiap antrean NIC pergi dengan /proc/interrupts, jumlah antrean dengan ethtool -l, dan jumlah paket per antrean dengan ethtool -S (namanya berbeda per driver)
Cocok jika
Hanya satu core yang %soft-nya menempel di dekat 100% sementara core lain longgar, dan interrupt serta paket menumpuk di satu antrean. Sejak itu jumlah paket diterima per detik tidak bisa naik lagi
Tidak cocok jika
%soft tersebar merata di beberapa core: bukan penyebab ini. CPU longgar tetapi ada packet loss: lebih mungkin “Batas PPS cloud terlampaui” atau “Ring buffer terlalu kecil”
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Walau ada beberapa antrean, jika sebagian besar trafik datang dari sedikit alamat seperti gateway atau proxy, trafik menumpuk di satu antrean. Untuk UDP, konfigurasi default NIC kadang membagi antrean hanya berdasarkan alamat, jadi harus diubah agar port juga diperhitungkan supaya trafik tersebar merata.

Sumber

  1. Scaling in the Linux Networking Stack Linux kernel
    RSS (NIC menyebar ke beberapa antrean terima) dan RPS (kernel yang menyebar), konfigurasi yang memberi interrupt terpisah untuk setiap antrean dan membaginya ke beberapa core; jika pemrosesan interrupt terima menjadi bottleneck, disarankan RSS
  2. How to receive a million packets per second Cloudflare
    Pengukuran ketika satu antrean terima hanya diproses satu core: core itu mentok di sekitar 350.000–430.000 paket per detik; kasus NIC yang meng-hash UDP hanya dengan alamat IP sehingga trafik menumpuk di satu antrean
  3. ethtool(8) — Linux manual page ethtool
    Opsi ethtool -N rx-flow-hash udp4 untuk memasukkan port (f, n) ke hash UDP
  4. mpstat(1) — Linux manual page sysstat
    %soft: persentase waktu CPU yang dipakai untuk memproses software interrupt; per core dengan -P ALL

Lihat juga

Lapisan yang sama: L6 Kartu jaringan server

Penyebab di lapisan lain dengan gejala yang sama (Teleport)

Lihat kartu interaktif dengan gambar dan simulasi