A máquina falha parcialmente quando uma interface de rede é desassociada do DPDK

6

Estou usando um servidor Ubuntu 14.04.4, executando sshd OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8, OpenSSL 1.0.1f 6 Jan 2014 .

O servidor também está executando a estrutura DPDK da Intel, para desenvolver software de rede; parte de fazer isso envolve derrubar interfaces no nível do Linux para vinculá-las ao DPDK. No entanto, a interface de rede usada para o ssh de fora nunca é ativada ou desativada, apenas outras são tocadas.

Na maioria das vezes o ssh funciona bem, mas uma vez a cada poucos dias ele pára de funcionar; As sessões ssh são interrompidas e, ao tentar reconectar executando ssh -v , a mensagem Local version string SSH-2.0 ... (ou seja, o cliente pode estabelecer uma conexão, é a parte SSH que falha).
Conectar-se diretamente à máquina também não funciona, a interface de linha de comando não aparece, apenas uma tela em branco.
As conexões TCP podem ser estabelecidas e a máquina ainda responde a pings.

Isso é muito chato, já que o servidor precisa ser reinicializado.

Eu habilitei os logs debug3 no servidor, e o login em /var/log/auth.log quando um cliente tenta (e falha) se conectar tem esta aparência:

sshd[1688]: debug3: fd 5 is not O_NONBLOCK
sshd[1688]: debug1: Forked child 39149.
sshd[1688]: debug3: send_rexec_state: entering fd = 13 config len 724
sshd[1688]: debug3: ssh_msg_send: type 0
sshd[1688]: debug3: send_rexec_state: done
sshd[39149]: debug3: oom_adjust_restore
sshd[39149]: Set /proc/self/oom_score_adj to 0
sshd[39149]: debug1: rexec start in 5 out 5 newsock 5 pipe 12 sock 13

Este log não parece diferente daquele para conexões bem-sucedidas, exceto que ele pára por aí, enquanto conexões bem-sucedidas continuam (a próxima linha é debug1: inetd sockets after dupping: ... ).

O problema parece surgir quando uma interface é ligada ou não do DPDK.

O que poderia estar causando isso? Existem soluções alternativas?

    
por Solal Pirelli 16.01.2017 / 11:55

1 resposta

1

Eu tive problemas com o tempo limite do ssh, encontrei uma solução alternativa usando:

 sudo sysctl -w net.ipv4.tcp_keepalive_time=50 \
 net.ipv4.tcp_keepalive_intvl=10 \
 net.ipv4.tcp_keepalive_probes=5  
    
por Colin Ian King 21.01.2017 / 20:45

Tags