Apakah ada yang punya beberapa data atau perhitungan dasar yang bisa menjawab ketika frame coalescing (NAPI) diperlukan dan ketika satu interupsi per frame sudah cukup?
Perangkat keras saya: IBM BladeServer HS22, Broadcom 5709 perangkat keras NIC Gigabit (MSI-X), dengan prosesor quad-core Xeon E5530 dual Xeon. Tujuan utama adalah server proxy Squid. Switch adalah seri Cisco 6500 yang bagus.
Masalah dasar kami adalah bahwa selama masa sibuk (lalu lintas 100 Mbps, hanya 10.000 pps) latensi dan paket loss meningkat. Saya telah melakukan banyak tuning dan upgrade kernel ke 2.6.38 dan telah meningkatkan paket loss tetapi latency masih buruk. Ping bersifat sporadis; melompat bahkan hingga 200 ms pada LAN Gbps lokal. Respons rata-rata squid melonjak dari 30 ms menjadi 500+ ms meskipun beban CPU / memori baik-baik saja.
Interupsi naik menjadi sekitar 15.000 / detik selama puncak. Ksoftirqd tidak menggunakan banyak CPU; Saya telah menginstal irqbalance untuk menyeimbangkan IRQ (masing-masing 8 untuk eth0 dan eth1) di semua core tetapi itu tidak banyak membantu.
Intel NIC sepertinya tidak pernah memiliki masalah seperti ini, tetapi lakukan fakta dari sistem blades dan perangkat konfigurasi tetap, kami agak terjebak dengan Broadcoms.
Semuanya menunjuk pada NIC sebagai penyebab utama. Ide terbaik yang saya miliki saat ini adalah mencoba mengurangi interupsi sekaligus menjaga latensi rendah dan throughput tetap tinggi.
Sayangnya bnx2 tidak mendukung adaptif-rx atau tx.
Jawaban utas NAPI vs Adaptive Interrupts memberikan pandangan yang baik atas moderasi interupsi tetapi tidak ada informasi konkret tentang cara menghitung pengaturan gabungan ethtool yang optimal untuk solusi yang diberikan. Apakah ada pendekatan yang lebih baik daripada hanya coba-coba?
Apakah beban kerja dan konfigurasi perangkat keras yang disebutkan di atas bahkan perlu NAPI? Atau haruskah bisa hidup dengan interupsi tunggal per paket?