Ainda existe um uso do irqbalance em hardware moderno?

39

Esta pergunta já foi feita antes, mas acredito que o mundo mudou o suficiente para ser novamente solicitado.

O irqbalance tem alguma utilidade nos sistemas atuais, onde temos CPUs compatíveis com NUMA com compartilhamento de memória entre seus núcleos?

A execução irqbalance --oneshot --debugmostra que um convidado virtual em um ambiente moderno do VMware ESXi está compartilhando os nós NUMA entre os 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)

O irqbalance, nesse caso, detectará que está sendo executado em um sistema NUMA e sairá. Isso mexe com o nosso monitoramento de processos.

Devemos olhar para a execução de numad em vez de irqbalance em tais sistemas?

Isso é principalmente interessante para servidores virtualizados da VMware.

espenfjo
fonte

Respostas:

27

Aqui está uma resposta de um técnico no RedHat. Embora eu acredite que a maioria dos hardwares corporativos seja compatível com NUMA. E, tanto quanto eu sei, a VMware também tentará ajustar suas VMs no mesmo nó NUMA, desde que a configuração da CPU seja adequada.

As experiências (especialmente relacionadas ao VMware) seriam muito apreciadas.

Isso é verdade "por causa" dos servidores modernos. Lembre-se de que Multi-CPU / Muli-Core não é o mesmo que NUMA. Existem muitos sistemas com várias CPUs / núcleos que não possuem NUMA.

Antes de ler minha explicação abaixo, leia o documento IRQ Affinity acima, bem como os seguintes guias:

Guia de ajuste de desempenho do RHEL 6

Ajuste de desempenho de baixa latência para RHEL 6

Tem tudo o que ler? Ótimo, você não precisa ouvir mais nada de mim! ;-) Mas, caso você estivesse impaciente, eis por que você os quer ...

O IRQbalance evita o backup de todas as solicitações de IRQ em uma única CPU. Vi muitos sistemas com 4 ou mais núcleos de CPU com desempenho lento, porque todos os processos em várias CPUs estão aguardando na CPU 0 para processar solicitações de IRQ de rede ou armazenamento. A CPU 0 parece muito, muito ocupada, todas as outras CPUs não estão ocupadas, mas os aplicativos são muito lentos. Os aplicativos são lentos porque estão aguardando suas solicitações de E / S da CPU 0.

O IRQbalance tenta equilibrar isso de maneira inteligente em todas as CPUs e, quando possível, coloca o processamento do IRQ o mais próximo possível do processo. Pode ser o mesmo núcleo, um núcleo na mesma matriz que compartilha o mesmo cache ou um núcleo na mesma zona NUMA.

Você deve usar o irqbalance, a menos que:

Você está fixando manualmente seus aplicativos / IRQs em núcleos específicos por um motivo muito bom (baixa latência, requisitos em tempo real etc.)

Convidados virtuais. Realmente não faz sentido porque, a menos que você esteja fixando o convidado em CPUs e IRQs específicos e hardware de rede / armazenamento dedicado, provavelmente não verá os benefícios que teria no bare metal. Mas o seu host KVM / RHEV DEVE usar irqbalance, numad e tuned .

Outras ferramentas de ajuste muito importantes são perfis ajustados e numad. Leia sobre eles! Usa-os!

O Numad é semelhante ao irqbalance, na medida em que tenta garantir que um processo e sua memória estejam na mesma zona de numa. Em muitos núcleos, vemos uma redução significativa nas latências, resultando em um desempenho muito mais confiável e confiável sob cargas.

Se você é habilidoso, diligente e monitora regularmente ou tem uma carga de trabalho muito previsível, poderá obter melhor desempenho fixando manualmente processos / IRQs nas CPUs. Mesmo nessas situações, irqbalance e numad aproximam-se muito da correspondência. Mas se você não tiver certeza ou sua carga de trabalho for imprevisível, use irqbalance e numad.

espenfjo
fonte
5
FWIW, alguns manuais de 10GbE recomendam desativar irqbalance para obter melhor rendimento ...
rogerdpack
8
Para obter o máximo absoluto para corresponder aos números de referência, sim, você precisa juntar as coisas de uma certa maneira, mas essas referências geralmente não correspondem às cargas de trabalho da vida real. Se você tiver UM aplicativo em execução no servidor com um requisito extremamente sensível à latência, em um padrão de uso muito previsível, tudo bem, vá em frente e configure manualmente a afinidade do processador. Mas se o aplicativo é mais um caso de uso do mundo real, onde as coisas podem variar em uma ampla gama de processos e cargas, concordo com a tecnologia da Red Hat. O balanceamento do Linux NUMA está progredindo muito bem.
GeorgeB