¿Cómo se distribuyen los hilos entre los núcleos en un sistema multiprocesador?

¿Cómo se distribuyen los hilos entre los núcleos en un sistema multiprocesador?

Actualmente estoy comprobando los límites de una aplicación de servidor en un sistema con dos procesadores de 12 núcleos, es decir, 24 núcleos. (Hyper-threading actualmente deshabilitado).

Estoy ejecutando 12 instancias con mucha recepción UDP de esa misma aplicación en esa caja, y maximiza los 12 núcleos de uno de los 2 sockets, según el Administrador de tareas. Pero el otro enchufe está inactivo. También intenté iniciar una instancia número 13 de esa aplicación, pero aún se ejecuta en el primer socket, que ya está ocupado.

¿Por qué? ¿Cuáles son las reglas según las cuales los subprocesos se programan en los núcleos de un sistema multiprocesador?

Algunas ideas:

  • ¿Podría tener que ver con RSS (escalado lateral de recepción), que está habilitado y estaría involucrado en la selección de núcleos al menos para el subproceso receptor de nuestra aplicación (pero la aplicación también tiene otros subprocesos que requieren mucho trabajo)?
  • ¿RSS (o MSI/MSI-X) está limitado a un socket?
  • ¿Podría/se ejecutará una única instancia de aplicación en varios sockets al mismo tiempo?

Detalles del sistema:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3
  • Ventanas 2012 R2

Respuesta1

Algunas ranuras/dispositivos IO se comunican directamente con uno de los procesadores (otras ranuras pueden comunicarse con el otro). Hay ventajas en realizar el trabajo generado por esa tarjeta/dispositivo IO en ese procesador.

Por ejemploDDIOfunciona mejor para el procesador conectado a la(s) ranura(s) PCI/dispositivo IO.

información relacionada