O whitepaper do fornecedor diz: 5Mpps sem problemas. Já estou batendo na parede a 120kpps. Onde está o gargalo?

O whitepaper do fornecedor diz: 5Mpps sem problemas. Já estou batendo na parede a 120kpps. Onde está o gargalo?

HPwhitepaper sobre seus adaptadores QLogic (fka Broadcom) NetXtreme II, que inclui a NIC específica que estou testando, afirma (página 7) que o desempenho de pacotes pequenos para pacotes de até 256 bytes/pacote está acima de 5.000.000 pacotes/seg.

Em meus testes com um aplicativo onde desabilitei todo o processamento, exceto a mera parte de recebimento de UDP, posso ir até 120.000 pacotes/s apenas. Os pacotes são distribuídos uniformemente em 12 grupos multicast.

notei que existeum núcleo(de 12 núcleos cada nos 2 soquetes) cuja carga aumenta gradualmente quando eu aumento a taxa de envio UDP eatinge o máximo em cerca de 120.000. Mas não sei o que esse núcleo está fazendo e por quê. Não é um gargalo de thread único em meu aplicativo, porque não importa se eu executo uma única instância do aplicativo para todos os grupos multicast ou 12 instâncias que lidam com 1 grupo multicast cada. Portanto, o gargalo não é meu aplicativo receptor.

MSI está ativado (verificado através doVisualização "recursos por tipo" no gerenciador de dispositivos) e o RSS também está habilitado nas configurações da NIC, com 8 filas. Então, o que está preso a esse núcleo? Todos os recursos de descarregamento da NIC estão ativados, mas desligá-los não ajudou.

Então, onde poderia estar o gargalo?

Detalhes do sistema:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3 (2 x 12 núcleos)
  • Placa de rede HP FlexFabric 10 Gb 2 portas 536FLB
  • Janelas 2012 R2

Responder1

O RSS também está habilitado nas configurações da NIC, com 8 filas.

O que infelizmente não significava que o RSS estivesse sendo empregado, como

netsh int tcp show global

mostrou:

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

Depois de executar (aliás, sem reiniciar)

netsh int tcp set global rss=enabled

O RSS começou a funcionar e a carga que anteriormente era acumulada naquele núcleo ruim agora é distribuída uniformemente por muitos núcleos em um dos 2 nós NUMA.

Não verifiquei se isso me permitiria lidar com as cargas de Mpps anunciadas, mas o teto foi elevado o suficiente para avaliar o que eu precisava.

informação relacionada