El documento técnico del proveedor dice: 5Mpps no hay problema. Ya estoy chocando contra una pared a 120 kpps. ¿Dónde está el cuello de botella?

El documento técnico del proveedor dice: 5Mpps no hay problema. Ya estoy chocando contra una pared a 120 kpps. ¿Dónde está el cuello de botella?

HPdocumento técnico sobre sus adaptadores QLogic (antes Broadcom) NetXtreme II, que incluye la NIC específica que estoy probando, indica (página 7) que su rendimiento de paquetes pequeños para paquetes de hasta 256 bytes/paquete está por encima de 5.000.000 paquetes/seg.

En mis pruebas con una aplicación en la que deshabilité todo el procesamiento excepto la parte de recepción UDP, solo puedo alcanzar 120.000 paquetes/seg. Los paquetes se distribuyen uniformemente en 12 grupos de multidifusión.

Noté que hayun núcleo(de 12 núcleos cada uno en los 2 sockets) cuya carga aumenta gradualmente cuando aumento la velocidad de envío UDP yalcanza un máximo de alrededor de 120.000. Pero no sé qué está haciendo ese núcleo y por qué. No es un cuello de botella de un solo subproceso en mi aplicación, porque no importa si ejecuto una sola instancia de la aplicación para todos los grupos de multidifusión o 12 instancias que manejan 1 grupo de multidifusión cada una. Entonces el cuello de botella no es mi aplicación receptora.

MSI está habilitado (verificado a través delVista "recursos por tipo" en el administrador de dispositivos) y RSS también está habilitado en la configuración de NIC, con 8 colas. Entonces, ¿qué se aferra a ese núcleo? Todas las funciones de descarga de NIC están activadas actualmente, pero desactivarlas no ayudó.

Entonces, ¿dónde podría estar el cuello de botella?

Detalles del sistema:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3 (2 x 12 núcleos)
  • NIC HP FlexFabric de 10 Gb y 2 puertos 536FLB
  • Ventanas 2012 R2

Respuesta1

RSS también está habilitado en la configuración de NIC, con 8 colas.

Lo que lamentablemente no significa que se estuviera empleando RSS, ya que

netsh int tcp show global

presentado:

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

Después de ejecutar (por cierto, sin reiniciar)

netsh int tcp set global rss=enabled

RSS comenzó a funcionar y la carga que antes se acumulaba en ese núcleo pobre ahora se distribuye uniformemente entre muchos núcleos en uno de los 2 nodos NUMA.

No he verificado si eso me permitiría manejar las cargas de Mpps anunciadas, pero el techo se elevó lo suficiente como para comparar lo que necesitaba.

información relacionada