ifconfig aparentemente mostrando valores errados de RX / TX para o InfiniBand HCA

1

Recentemente, executei um watch -n 1 ipconfig em um de nossos nós de computação em cluster do Linux enquanto ele executava uma execução MPI de 48 processos, distribuída em vários nós. Estranhamente, enquanto os pacotes Ethernet parecem ser contados corretamente (alguns kb / s devido à sessão SSH), parece que o adaptador IB permanece inativo (sem alteração nos pacotes RX / TX e bytes).

MPI sobre IB está definitivamente trabalhando em nosso cluster (fizemos várias verificações e de qualquer maneira as pessoas teriam notado se não) e ainda mais estranhamente, se eu pingar o InfiniBand-HCA de outro nó, de repente os pacotes são contados.

Admito que meu conhecimento sobre IB é bastante limitado, mas sei que um dos principais aspectos para melhorar o desempenho com o InfiniBand é devido ao desvio da pilha de rede (kernel), implementando-a diretamente no hardware (ou assim pensei - por favor me corrija se eu estiver errado!).

Minha explicação seria que o kernel não é capaz de interceptar corretamente o tráfego devido à falta de informações na respectiva camada, pois os pacotes não alcançam o kernel - isso soa razoável? No entanto, não tenho certeza do que está acontecendo no caso do ICMP. Talvez os dados enviados pelo IPoIB disparem as respectivas rotinas do kernel para contagem de pacotes, enquanto os protocolos "IB-native" (verbos, RDMA) não o fazem?

Infelizmente, não encontrei nenhuma informação sobre o assunto na Internet.

    
por andreee 31.03.2017 / 16:03

1 resposta

2

Você está correto com suas suposições. Ao executar o MPI em Infiniband, você normalmente deseja ignorar a pilha de rede e usar a interface RDMA / Verbs para obter desempenho total. Toda a comunicação enviada por essa interface não será contabilizada na interface IPoIB ib0 , por exemplo,

Para monitorar o tráfego que o cartão Infiniband está fazendo, você pode ver em /sys/class/infiniband/mlx4_0/ports/1/counters/ para os contadores. Infelizmente, esses são apenas contadores de 32 bits que são preenchidos rapidamente no Infiniband, portanto, você deve ter instalado o perfquery , que pode coletar os contadores de desempenho em sua malha com contadores de 64 bits.

Para fazer uma consulta simples com perfquery localmente em um nó e obter os contadores de 64 bits, você pode emitir o comando da seguinte forma.

perfquery -x 

Você também pode obter os contadores de desempenho de uma máquina remota adicionando o LID do dispositivo Infiniband de remoção.

perfquery -x -a 2

Onde -a diz todas as portas do LID 2.

Por favor, note que PortXmitData e PortRcvData são números por linha e você tem que multiplicá-los normalmente por 4 para obter Bytes reais. Você também pode adicionar um -r para redefinir os contadores para seu perfquery , o que facilita o cálculo dos valores por segundo.

    
por 31.03.2017 / 16:15