Qualcuno ha alcuni dati o calcoli di base che possono rispondere quando è richiesta la coalescenza di frame (NAPI) e quando è sufficiente un singolo interrupt per frame?
Il mio hardware: IBM BladeServer HS22, hardware Broadcom 5709 Gigabit NIC (MSI-X), con doppi processori quad-core Xeon E5530. Lo scopo principale è il server proxy Squid. Switch è una bella serie Cisco 6500.
Il nostro problema di base è che durante le ore di punta (traffico di 100 Mbps, solo 10.000 pps) aumenta la latenza e la perdita di pacchetti. Ho fatto molto tuning e aggiornamento del kernel alla 2.6.38 e ha migliorato la perdita di pacchetti ma la latenza è ancora scarsa. I ping sono sporadici; saltando anche a 200ms sulla LAN Gbps locale. La risposta media del calamaro passa da 30ms a 500 + ms anche se il carico CPU / memoria va bene.
Le interruzioni salgono a circa 15.000 / secondo durante il picco. Ksoftirqd non utilizza molta CPU; Ho installato irqbalance per bilanciare gli IRQ (8 ciascuno per eth0 ed eth1) su tutti i core, ma ciò non ha aiutato molto.
Le schede di rete Intel non sembrano mai avere questo tipo di problemi, ma a causa del sistema blade e dell'hardware di configurazione fissa, siamo un po 'bloccati con le Broadcom.
Tutto indica la NIC come il principale colpevole. L'idea migliore che ho in questo momento è provare a ridurre gli interrupt mantenendo sia la latenza bassa che la velocità effettiva elevate.
Sfortunatamente il bnx2 non supporta adattivo-rx o tx.
La risposta al thread NAPI vs Interruzioni adattive fornisce una visione d'insieme della moderazione degli interruzioni ma nessuna informazione concreta su come calcolare le impostazioni ottimali di coalescenza ettool per una determinata soluzione. Esiste un approccio migliore quindi solo tentativi ed errori?
Il carico di lavoro e la configurazione hardware sopra menzionati richiedono persino NAPI? O dovrebbe essere in grado di vivere su un singolo interrupt per pacchetto?