Atrasos de retransmissão TCP - acks perdidos

1

Talvez alguém possa me ajudar com isso. Eu estou tentando descobrir se há algo que pode ser otimizado do lado do servidor para reduzir atrasos em caso de perda de pacotes.

Ambiente: cliente Windows 2012, servidor CentOS 6.x [Couchbase], mesmo datacenter, LAN ocupada com firewalls a serem percorridos. Ambos são grandes servidores físicos com muita capacidade extra.

Problema: conforme medido pelo cliente, os tempos de resposta são bem distribuídos em torno de ~ 1 ms, mas vemos um pico em ~ 200 ms.

Um rastreamento de rede mostra isso:

  1. Cliente - > enviar pedido
  2. Servidor - > respostas (1 ms) com um pacote com {resposta do aplicativo + TCP ack para solicitar o pacote} (78 bytes neste caso)
  3. O pacote NÃO é recebido pelo cliente
  4. após ~ 30 ms, a pilha TCP do cliente retransmite a solicitação original
  5. O servidor responde imediatamente com um DUP ACK (66 bytes, não contém a resposta do aplicativo)
  6. Após ~ 200 ms da solicitação inicial, o servidor retransmite o original resposta (pacote de 78 bytes).

Alguma idéia de onde vem esse atraso de 200 ms e como reduzi-lo? Eu acho que alguma combinação de tcp atrasou acks, nagle e congestionamento / algoritmos RTO, mas o ajuste do kernel do linux é um pouco misterioso para mim.

Alguma sugestão?

    
por PP_2 24.06.2016 / 08:12

1 resposta

0

sim, wireshark de ambos os lados, tcpdump, rastreamentos de rede feitos no nível de comutador (switches Arista 10G high-end), rastreamentos feitos no firewall (Fortinet), etc. etc.

O problema não é porque o cliente não está recebendo a resposta. Essa é uma rede ocupada com tráfego em rajadas, portanto perder um pacote em 10.000 não é inesperado. Mas eu preciso fornecer um SLA mesmo quando eu perder um pacote, e este atraso de 200 ms está jogando fora.

Quero dizer, experimentando em DEV eu posso 'consertar' o problema definindo o TCP RTO para a sub-rede do cliente para 5ms via um comando de rota [lado do servidor]. Com isso, 99,999% dos meus pedidos são respondidos em menos de 10 ms e eu encontraria meu SLA. Tudo bem, mas quais são as desvantagens de fazer isso em produção? O RTO é o problema real, ou estou consertando por acidente? Essa é a melhor solução possível para o problema, ou há algo mais inteligente / melhor (perfil sintonizado? Parâmetro sysctl? Oração para os deuses minix?)?

ri-obrigado

    
por 24.06.2016 / 18:39