Red Hat Training

A Red Hat training course is available for RHEL 8

20.5. Configuración de los sistemas de afinidad de las interrupciones

Una solicitud de interrupción o IRQ es una señal de atención inmediata enviada desde un elemento de hardware a un procesador. A cada dispositivo de un sistema se le asignan uno o más números de IRQ que le permiten enviar interrupciones únicas. Cuando las interrupciones están habilitadas, un procesador que recibe una solicitud de interrupción pausa inmediatamente la ejecución del hilo de aplicación actual para atender la solicitud de interrupción.

Debido a que las interrupciones detienen el funcionamiento normal, las altas tasas de interrupción pueden degradar gravemente el rendimiento del sistema. Es posible reducir el tiempo que tardan las interrupciones configurando la afinidad de las mismas o enviando un número de interrupciones de menor prioridad en un lote (coalescencia de varias interrupciones).

Las solicitudes de interrupción tienen una propiedad de afinidad asociada, smp_affinity, que define los procesadores que manejan la solicitud de interrupción. Para mejorar el rendimiento de la aplicación, asigne la afinidad de la interrupción y la afinidad del proceso al mismo procesador, o a los procesadores del mismo núcleo. Esto permite que los hilos de interrupción y de aplicación especificados compartan líneas de caché.

En los sistemas que soportan la dirección de las interrupciones, la modificación de la propiedad smp_affinity de una solicitud de interrupción configura el hardware de manera que la decisión de atender una interrupción con un procesador en particular se hace a nivel de hardware sin intervención del kernel.

20.5.1. Equilibrar manualmente las interrupciones

Si su BIOS exporta su topología NUMA, el servicio irqbalance puede servir automáticamente las solicitudes de interrupción en el nodo que es local al hardware que solicita el servicio.

Procedimiento

  1. Compruebe qué dispositivos corresponden a las solicitudes de interrupción que desea configurar.
  2. Busca las especificaciones de hardware de tu plataforma. Comprueba si el chipset de tu sistema soporta la distribución de interrupciones.

    1. Si lo hace, puede configurar la entrega de interrupciones como se describe en los siguientes pasos. Además, comprueba qué algoritmo utiliza tu chipset para equilibrar las interrupciones. Algunas BIOS tienen opciones para configurar la entrega de interrupciones.
    2. Si no lo hace, el chipset siempre dirige todas las interrupciones a una única CPU estática. No se puede configurar qué CPU se utiliza.
  3. Compruebe qué modo de controlador de interrupción programable avanzado (APIC) está en uso en su sistema:

    $ journalctl --dmesg | grep APIC

    Aquí,

    • Si su sistema utiliza un modo distinto a flat, puede ver una línea similar a Setting APIC routing to physical flat.
    • Si no ve este mensaje, su sistema utiliza el modo flat.

      Si su sistema utiliza el modo x2apic, puede desactivarlo añadiendo la opción nox2apic a la línea de comandos del kernel en la configuración bootloader.

      Sólo el modo plano no físico (flat) soporta la distribución de interrupciones a múltiples CPUs. Este modo está disponible sólo para sistemas que tienen hasta 8 CPUs.

  4. Calcule el smp_affinity mask. Para más información sobre cómo calcular el smp_affinity mask, véase Sección 20.5.2, “Configuración de la máscara smp_affinity”.