Taxa de interrupção alta do sistema

5

Meu servidor tem 24 núcleos de CPU, 96G de memória, instalado no CentOS 7.2 x86_64.

Depois de iniciar meu programa com um conjunto de dados grande , meu programa usará cerca de 50G de memória, e o sistema Linux mostrará uma alta taxa de interrupções do sistema, mas a taxa de troca de contexto será baixa. dstat mostrará algo entre 500k int / se 1000k int / s. O uso da CPU estará próximo de 100%, cerca de 40% de nós, 60% sy.

Se o conjunto de dados for pequeno, o programa usará cerca de 5G de memória, e tudo ficará bem, o uso da CPU será de 100%, cerca de 99% de nós, 1% de sy. É esperado.

O programa é escrito por mim, é um programa multi-thread. Não faz nenhum IO de rede, muito pouca IO de disco, principalmente operações de memória e aritmética. O modelo de thread e o algoritmo são os mesmos, independentemente do tamanho do conjunto de dados.

A minha pergunta é: como posso descobrir exatamente quais interrupções são mais usadas pelo meu programa (e me livrar delas para melhorar o desempenho, se possível)?

    
por user416983 06.12.2016 / 13:03

2 respostas

1

Eu assumo que você não possui um único sistema de soquete com 24C de CPU. Então é provavelmente o sistema NUMA com 2x12C. Nesse caso, sugiro que o programa use apenas um nó numa (geralmente socket) e a metade local da RAM.

Quando você usa 50G, isso significa que uma localidade não pode ser assegurada, pois é mais da metade da memória.

Para a verificação do estado real, use numastat. Se você está no RHEL, você pode usar numad para manipular localidade de memória automaticamente. Ou você pode usar um hardware numactl que lhe dará uma visão geral sobre seus nós HW NUMA. Existe um bom tutorial com exemplos:

link

Dessa forma, você pode bloquear seu programa nas CPUs desejadas.

E eu sugiro verificar se você tem o daemon irqbalance em execução, caso contrário você pode ter um núcleo sobrecarregado com interrupções.

    
por 05.09.2017 / 14:48
0

No Linux: watch cat /proc/interrupts mostrará a quantidade de chamadas interrompidas por interrupção e CPU. Eu acho que no seu caso você verá LOC (timer local) e RES (reprogramação).

    
por 08.06.2017 / 15:40