¿Todavía hay un uso para irqbalance en hardware moderno?

39

Esta pregunta se ha hecho antes, pero creo que el mundo ha cambiado lo suficiente como para que se vuelva a hacer.

¿Irqbalance tiene algún uso en los sistemas actuales donde tenemos CPU con capacidad NUMA con memoria compartida entre sus núcleos?

La ejecución irqbalance --oneshot --debugmuestra que un invitado virtual en un entorno VMware ESXi moderno está compartiendo los nodos NUMA entre núcleos.

# irqbalance --oneshot --debug 3
Package 0:  numa_node is 0 cpu mask is 0000000f (load 0)
    Cache domain 0:  numa_node is 0 cpu mask is 0000000f  (load 0)
            CPU number 0  numa_node is 0 (load 0)           
            CPU number 1  numa_node is 0 (load 0)
            CPU number 2  numa_node is 0 (load 0)
            CPU number 3  numa_node is 0 (load 0)

En este caso, irqbalance detectará que se está ejecutando en un sistema NUMA y saldrá. Esto interfiere con nuestro monitoreo de procesos.

¿Deberíamos considerar ejecutar numad en lugar de irqbalance en tales sistemas?

Esto es sobre todo interesante para los servidores virtualizados VMware.

espenfjo
fuente

Respuestas:

27

Aquí hay una respuesta de un técnico en RedHat. Aunque sí creo que la mayoría del hardware empresarial es compatible con NUMA. Y hasta donde sé, VMware también intentará ajustar sus máquinas virtuales en el mismo nodo NUMA siempre que su configuración de CPU se ajuste.

Las experiencias (especialmente con respecto a VMware) serían muy apreciadas.

Esto es cierto "debido" a los servidores modernos. Tenga en cuenta que Multi-CPU / Muli-Core no es lo mismo que NUMA. Hay muchos sistemas Multi-CPU / Core que no tienen NUMA.

Antes de leer mi explicación a continuación, lea el documento de afinidad IRQ anterior, así como las siguientes guías:

Guía de ajuste de rendimiento RHEL 6

Ajuste de rendimiento de baja latencia para RHEL 6

¿Tienes todo lo que lees? ¡Genial, no necesitas saber nada más de mí! ;-) Pero en caso de que estuvieras impaciente, aquí es por qué los quieres ...

IRQbalance evita que todas las solicitudes de IRQ se respalden en una sola CPU. He visto que muchos sistemas con más de 4 núcleos de CPU funcionan lentamente porque todos los procesos en varias CPU están esperando en la CPU 0 para procesar las solicitudes de IRQ de red o almacenamiento. La CPU 0 se ve muy, muy ocupada, todas las otras CPU no están ocupadas, sin embargo, las aplicaciones son muy lentas. Las aplicaciones son lentas porque están esperando sus solicitudes de E / S de la CPU 0.

IRQbalance intenta equilibrar esto de manera inteligente en todas las CPU y, cuando es posible, coloca el procesamiento de IRQ lo más cerca posible del proceso. Puede ser el mismo núcleo, un núcleo en el mismo dado que comparte el mismo caché o un núcleo en la misma zona NUMA.

Debe usar irqbalance a menos que:

Está anclando manualmente sus aplicaciones / IRQ a núcleos específicos por una muy buena razón (baja latencia, requisitos en tiempo real, etc.)

Invitados virtuales. Realmente no tiene sentido porque, a menos que conecte al huésped a CPU e IRQ específicos y hardware de red / almacenamiento dedicado, es probable que no vea los beneficios que obtendría con el metal desnudo. Pero su host KVM / RHEV DEBE estar usando irqbalance y numad y sintonizado .

Otras herramientas de ajuste muy importantes son los perfiles sintonizados y numad. ¡Lee sobre ellos! ¡Usalos, usalos a ellos!

Numad es similar a irqbalance en que trata de asegurarse de que un proceso y su memoria estén en la misma zona numa. Con muchos núcleos, vemos una reducción significativa en las latencias, lo que resulta en un rendimiento confiable mucho más suave bajo cargas.

Si es hábil, diligente y supervisa regularmente o tiene una carga de trabajo muy predecible, puede obtener un mejor rendimiento al anclar manualmente los procesos / IRQ a las CPU. Incluso en estas situaciones, irqbalance y numad se acercan mucho. Pero si no está seguro o su carga de trabajo es impredecible, debe usar irqbalance y numad.

espenfjo
fuente
55
FWIW, algunos manuales de 10 GbE recomiendan desactivar el desequilibrio para obtener un mejor rendimiento ...
rogerdpack
8
Para obtener el máximo absoluto para que coincida con sus números de referencia, sí, debe unir las cosas de una manera determinada, pero estas referencias generalmente no coinciden con las cargas de trabajo de la vida real. Si tiene UNA aplicación ejecutándose en el servidor con un requisito extremadamente sensible a la latencia en un patrón de uso muy predecible, bien, continúe y configure manualmente la afinidad del procesador por las cosas. Pero si la aplicación es más un caso de uso del mundo real donde las cosas pueden variar en una amplia gama de procesos y cargas, estoy de acuerdo con la tecnología de Red Hat. El equilibrio de Linux NUMA está progresando muy bien.
GeorgeB