UDP recebe erro de buffer

2

Estamos executando o proxy SIP do opensips em ambiente de alto tráfego, usando o protocolo UDP. Estamos vendo algum erro RX ou erro de overrun na interface. Eu tenho definido rmem_max to 16M mas ainda estou vendo erro é isso que estou vendo no netstat. Alguma idéia de como corrigir esse erro?

Temos 40 CPUs e 64 GB de memória no sistema, por isso não é um problema de recursos.

Mais uma coisa, estamos executando o tcpdump nele e capturando todo o tráfego SIP. você acha que tcpdump pode causar esse problema?

netstat -su

Udp:
    27979570 packets received
    2727 packets to unknown port received.
    724419 packet receive errors
    41731936 packets sent
    322 receive buffer errors
    0 send buffer errors
    InCsumErrors: 55

Dropwatch -l kas

846 drops at tpacket_rcv+5f (0xffffffff815e46ff)
3 drops at tpacket_rcv+5f (0xffffffff815e46ff)
4 drops at unix_stream_connect+2ca (0xffffffff815a388a)
552 drops at tpacket_rcv+5f (0xffffffff815e46ff)
503 drops at tpacket_rcv+5f (0xffffffff815e46ff)
4 drops at unix_stream_connect+2ca (0xffffffff815a388a)
1557 drops at tpacket_rcv+5f (0xffffffff815e46ff)
6 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1203 drops at tpacket_rcv+5f (0xffffffff815e46ff)
2051 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1940 drops at tpacket_rcv+5f (0xffffffff815e46ff)
541 drops at tpacket_rcv+5f (0xffffffff815e46ff)
221 drops at tpacket_rcv+5f (0xffffffff815e46ff)
745 drops at tpacket_rcv+5f (0xffffffff815e46ff)
389 drops at tpacket_rcv+5f (0xffffffff815e46ff)
568 drops at tpacket_rcv+5f (0xffffffff815e46ff)
651 drops at tpacket_rcv+5f (0xffffffff815e46ff)
622 drops at tpacket_rcv+5f (0xffffffff815e46ff)
377 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1 drops at tcp_rcv_state_process+1b0 (0xffffffff81550f70)
577 drops at tpacket_rcv+5f (0xffffffff815e46ff)
9 drops at tpacket_rcv+5f (0xffffffff815e46ff)
135 drops at tpacket_rcv+5f (0xffffffff815e46ff)
217 drops at tpacket_rcv+5f (0xffffffff815e46ff)
358 drops at tpacket_rcv+5f (0xffffffff815e46ff)
211 drops at tpacket_rcv+5f (0xffffffff815e46ff)
337 drops at tpacket_rcv+5f (0xffffffff815e46ff)
54 drops at tpacket_rcv+5f (0xffffffff815e46ff)
105 drops at tpacket_rcv+5f (0xffffffff815e46ff)
27 drops at tpacket_rcv+5f (0xffffffff815e46ff)
42 drops at tpacket_rcv+5f (0xffffffff815e46ff)
249 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1080 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1932 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1476 drops at tpacket_rcv+5f (0xffffffff815e46ff)
681 drops at tpacket_rcv+5f (0xffffffff815e46ff)
840 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1076 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1021 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1 drops at tcp_rcv_state_process+1b0 (0xffffffff81550f70)
294 drops at tpacket_rcv+5f (0xffffffff815e46ff)
186 drops at tpacket_rcv+5f (0xffffffff815e46ff)
313 drops at tpacket_rcv+5f (0xffffffff815e46ff)
257 drops at tpacket_rcv+5f (0xffffffff815e46ff)
132 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1 drops at tcp_rcv_state_process+1b0 (0xffffffff81550f70)
343 drops at tpacket_rcv+5f (0xffffffff815e46ff)
282 drops at tpacket_rcv+5f (0xffffffff815e46ff)
191 drops at tpacket_rcv+5f (0xffffffff815e46ff)
303 drops at tpacket_rcv+5f (0xffffffff815e46ff)
96 drops at tpacket_rcv+5f (0xffffffff815e46ff)
223 drops at tpacket_rcv+5f (0xffffffff815e46ff)
1 drops at tcp_rcv_state_process+1b0 (0xffffffff81550f70)
183 drops at tpacket_rcv+5f (0xffffffff815e46ff)
    
por Satish 16.04.2016 / 05:07

1 resposta

4

Pesquisa tpacket_rcv : está em af_packet.c . AF_PACKET significa tcpdump.

Parece que alguém viu um problema acionado pelo tcpdump, sem resolução: link

Mas eu desconfio sobre quedas em tpacket_rcv. Provavelmente significa saída de função através do rótulo ring_is_full . Parece que os pacotes não chegarão ao tcpdump porque seu buffer está sobrecarregado. No entanto, não acho que isso signifique que o pacote esteja (necessariamente) sendo descartado completamente; ele ainda pode alcançar o soquete UDP. Isso sugere que a sua transcrição do dropwatch não cobriu nenhuma das gotas UDP mostradas nos contadores. Eu não acho que AF_PACKET estão sendo contados como UDP cai só porque são dois soquetes de datagrama. Infelizmente, parece que esses tp_drops não são mostrados por netstat .

Eu gostaria de rodar o dropwatch e filtrar as linhas tpacket_rcv com grep -v . Apenas o suficiente para ver um aumento no seu contador de erros de recepção UDP.

Acho que rmem_max para UDP só ajudará se o aplicativo tentar aumentar os buffers de recebimento. Não há resultados reais de pesquisa para "opensips rmem". Eu tentaria aumentar rmem_default . Mas eu realmente espero que eles sejam mostrados como "receber erros de buffer" se esse fosse o problema ...

E, no entanto, eles não são erros de soma de verificação do UDP ...

Há outro sintonizador chamado netdev_max_backlog . Aparentemente, o contador de estouro correspondente é a segunda coluna de /proc/net/softnet_stat (há uma linha por cpu). Mas isso acontece antes que o pacote seja alimentado na pilha UDP, portanto, isso não deve afetar as estatísticas do UDP ...

Whelp, isso é tudo em que posso pensar agora, é um pouco misterioso: (.

EDITAR :

There is a setting in SIP proxy server related buffer size that size was small to handle high pps rate. After adjust that we are seeing good result. Drops are there, but very very low counts. – Satish

    
por 16.04.2016 / 12:34