O whitepaper da HP em seus adaptadores QLogic (fka Broadcom) NetXtreme II , que inclui a NIC específica que estou testando, afirma (página 7) que seu desempenho de pacotes pequenos para pacotes de até 256 bytes / pacote está acima de 5.000.000 pacotes / s.
Nos meus testes com um aplicativo em que 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 igualmente por 12 grupos multicast.
Percebi que há um núcleo (de 12 núcleos cada um nos 2 soquetes) cuja carga aumenta gradualmente quando eu acelero a taxa de envio UDP e atinge 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 no meu aplicativo, porque não importa se eu executo uma única instância do aplicativo para todos os grupos de difusão seletiva ou 12 instâncias que lidam com 1 grupo de difusão seletiva cada. Portanto, o gargalo não é meu aplicativo receptor.
O MSI está ativado (verificado através da visualização "recursos por tipo" no gerenciador de dispositivos ) e o RSS também está ativado nas configurações da NIC, com 8 filas. Então, o que se apega a esse núcleo? Atualmente, todos os recursos de descarregamento da NIC estão ativados, mas desativá-los não ajudou.
Então, onde poderia estar o gargalo?
Detalhes do sistema:
- ProLiant BL460c Gen9
- Intel Xeon E5-2670 v3 (2 x 12cores)
- Placa de rede HP FlexFabric 10Gb 2 portas 536FLB
- Windows 2012 R2