Il white paper del venditore dice: 5Mpps no prob. Sto già colpendo un muro a 120kpps. Dov'è il collo di bottiglia?


17

Il white paper di HP sugli adattatori QLogic (fka Broadcom) NetXtreme II , che include la scheda NIC specifica che sto testando, afferma (pagina 7) che le prestazioni dei pacchetti piccoli per pacchetti fino a 256 byte / pacchetto sono superiori a 5.000.000 di pacchetti / sec.

Nei miei test con un'app in cui ho disabilitato tutta l'elaborazione tranne la semplice parte di ricezione UDP, posso arrivare solo a 120.000 pacchetti / sec. I pacchetti sono distribuiti uniformemente su 12 gruppi multicast.

Ho notato che esiste un core (su 12 core ciascuno sui 2 socket) il cui carico aumenta gradualmente quando accendo la velocità di invio UDP e raggiunge il massimo a circa 120.000 . Ma non so cosa stia facendo quel core e perché. Non è un collo di bottiglia a thread singolo nella mia app, perché non importa se eseguo una singola istanza dell'app per tutti i gruppi multicast o 12 istanze che gestiscono 1 gruppo multicast ciascuno. Quindi il collo di bottiglia non è la mia app per ricevitore.

L'MSI è abilitato (verificato tramite la vista "risorse per tipo" in Gestione dispositivi ) e anche l'RSS è abilitato nelle impostazioni NIC, con 8 code. Quindi, cosa si aggrappa a quell'unico core? Tutte le funzionalità di offload della NIC sono attualmente attive, ma disattivarle non ha aiutato.

Quindi dove potrebbe essere il collo di bottiglia?

Dettagli del sistema:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3 (2 x 12cores)
  • NIC HP FlexFabric 10Gb a 2 porte 536FLB
  • Windows 2012 R2

2
Probabilmente tutti gli interrupt rx e tx sono gestiti dallo stesso core. Non so molto di Windows, ma dovrebbe esserci qualche affinità SMP da configurare per diffondere IRQ uniformemente rilevanti.
Xavier Lucas,

Risposte:


13

Anche l'RSS è abilitato nelle impostazioni della NIC, con 8 code.

Il che sfortunatamente non significava che fosse utilizzato RSS, come

netsh int tcp show global

ha mostrato:

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled

Dopo l'esecuzione (a proposito senza riavviare)

netsh int tcp set global rss=enabled

L'RSS ha iniziato a funzionare e il carico precedentemente accumulato su quel povero core ora viene distribuito uniformemente su molti core su uno dei 2 nodi NUMA.

Non ho verificato se ciò mi permettesse di gestire i carichi di Mpps pubblicizzati, ma il tetto è stato alzato a sufficienza per confrontare ciò di cui avevo bisogno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.