Red Hat Training

A Red Hat training course is available for RHEL 8

20.5. Ajuste de sistemas de afinidade de interrupção

Um pedido de interrupção ou IRQ é um sinal para atenção imediata enviado de uma peça de hardware para um processador. A cada dispositivo de um sistema é atribuído um ou mais números IRQ que permitem que ele envie interrupções únicas. Quando as interrupções são ativadas, um processador que recebe uma solicitação de interrupção pausa imediatamente a execução do tópico de aplicação atual, a fim de atender à solicitação de interrupção.

Como a interrupção interrompe a operação normal, altas taxas de interrupção podem degradar severamente o desempenho do sistema. É possível reduzir o tempo de interrupção configurando a afinidade da interrupção ou enviando uma série de interrupções de menor prioridade em um lote (coalescendo uma série de interrupções).

Os pedidos de interrupção têm uma propriedade de afinidade associada, smp_affinity, que define os processadores que tratam do pedido de interrupção. Para melhorar o desempenho da aplicação, atribuir afinidade de interrupção e afinidade de processo ao mesmo processador, ou processadores no mesmo núcleo. Isto permite que as linhas de interrupção e de aplicação especificadas compartilhem as linhas de cache.

Em sistemas que suportam a direção de interrupção, modificando a propriedade smp_affinity de um pedido de interrupção configura o hardware para que a decisão de fazer uma interrupção com um determinado processador seja tomada no nível do hardware sem intervenção do kernel.

20.5.1. O balanceamento é interrompido manualmente

Se sua BIOS exporta sua topologia NUMA, o serviço irqbalance pode servir automaticamente as solicitações de interrupção no nó que é local para o serviço de solicitação de hardware.

Procedimento

  1. Verifique quais dispositivos correspondem às solicitações de interrupção que você deseja configurar.
  2. Encontre a especificação de hardware para sua plataforma. Verifique se o chipset em seu sistema suporta interrupções de distribuição.

    1. Se isso acontecer, você pode configurar a interrupção da entrega como descrito nos passos seguintes. Além disso, verifique qual algoritmo seu chipset usa para equilibrar as interrupções. Algumas BIOSes têm opções para configurar a interrupção da entrega.
    2. Caso contrário, seu chipset sempre roteia todas as interrupções para uma única CPU estática. Você não pode configurar qual CPU é utilizada.
  3. Verifique qual modo de Controlador de Interrupção Programável Avançado (APIC) está em uso em seu sistema:

    $ journalctl --dmesg | grep APIC

    Aqui,

    • Se seu sistema usa um modo diferente de flat, você pode ver uma linha similar a Setting APIC routing to physical flat.
    • Se você não puder ver tal mensagem, seu sistema usa o modo flat.

      Se seu sistema usa o modo x2apic, você pode desativá-lo adicionando a opção nox2apic à linha de comando do kernel na configuração bootloader.

      Somente o modo flat não-físico (flat) suporta a distribuição de interrupções para várias CPUs. Este modo está disponível somente para sistemas que tenham até 8 CPUs.

  4. Calcule o smp_affinity mask. Para mais informações sobre como calcular o smp_affinity mask, ver Seção 20.5.2, “Colocando a máscara smp_affinity”.