Desempenho do aplicativo e afinidade de interrupção

1

Citando o ajuste de desempenho do RedHat Guia

3.3.7. Setting interrupt affinity

Interrupt requests have an associated affinity property, smp_affinity, that defines the processors that will handle the interrupt request. To improve application performance, assign interrupt affinity and process affinity to the same processor, or processors on the same core. This allows the specified interrupt and application threads to share cache lines.

Eu tenho um aplicativo que recebe e processa grandes quantidades de dados UDP. Se eu estiver procurando reduzir o tempo entre o pacote UDP chegando e o aplicativo processando o pacote completamente, devo atribuir a mesma afinidade à placa de rede que está recebendo os pacotes & a aplicação? Ou devo atribuir-lhes diferentes afinidades? Eu sinto que a citação acima sugere o primeiro, mas eu teria pensado que o último poderia ser mais benéfico.

Qualquer ajuda seria ótima.

Obrigado

    
por user3513346 27.05.2015 / 07:22

1 resposta

1

Embora apenas um benchmark direcionado possa realmente responder à sua pergunta, a aposta mais segura é executar IRQs e aplicativos na mesma CPU / soquete, mas em núcleos diferentes. Dessa forma, a potência da CPU disponível é maximizada e, ao mesmo tempo, o cache L3, comum em todos os servidores recentes, permite o compartilhamento rápido de dados entre IRQs e aplicativos.

Se você realmente estiver interessado em manter a latência entre o recebimento e o processamento de pacotes, você deve ajustar o buffer de pacotes do adaptador Ethernet e as configurações de coalescência de IRQ.

Você pode usar o ótimo ethtool para fazer isso:

  • ethtool -c fornece uma visão geral das configurações padrão de combinação de pacotes, enquanto ethtool -C permite alterá-las.
  • ethtool -g mostra as configurações do buffer de anel, enquanto com ethtool -G você pode alterá-las.
por 27.05.2015 / 10:07