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)
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
Scaling in the Linux Networking StackLinux 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
How to receive a million packets per secondCloudflare 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