Maior valor de rmem_max levando a mais perda de pacotes

6

A configuração rmem_max Linux define o tamanho do buffer que recebe pacotes UDP.
Quando o tráfego fica muito ocupado, a perda de pacotes começa a ocorrer.

Eu fiz um gráfico mostrando como a perda de pacotes aumenta dependendo da largura de banda de entrada.
(eu uso IPerf para gerar tráfego UDP entre duas instâncias de VMs .
As cores diferentes são para diferentes valores rmem_max :

Comovocêpodever,definirrmem_maxto26214400(azulescuro)resultaemperdadepacotesmaiscedodoquevaloresmenores.OvalorpadrãodoLinuxé131071(verdeescuro)parecerazoável.

Nessascondições,porquea documentação do JBoss recomende definir rmem_max para 26214400 ?
É porque se espera que o tráfego UDP seja superior a 350 MBytes / segundo? Eu não acho que nada funcionaria com mais de 1% de perda de pacotes ...

O que estou perdendo?

Detalhes: usei sysctl -w net.core.rmem_max=131071 (por exemplo) nos dois nós e usei como servidor iperf -s -u -P 0 -i 1 -p 5001 -f M e o outro como cliente iperf -c 172.29.157.3 -u -P 1 -i 1 -p 5001 -f M -b 300M -t 5 -d -L 5001 -T 1 .

    
por Nicolas Raoul 23.07.2012 / 11:24

2 respostas

5

Mais buffer não implica necessariamente mais velocidade. Mais buffer simplesmente implica mais buffer. Abaixo de um determinado valor, você verá um estouro, pois os aplicativos não podem necessariamente atender os dados recebidos com rapidez suficiente. Isso é ruim, mas no ponto em que há um buffer suficiente para o aplicativo atender a uma taxa razoável, mesmo no caso de um aumento ocasional no tráfego, qualquer outra coisa provavelmente será desperdiçada.

Se você for muito grande, estará colocando uma carga muito maior no kernel para localizar e alocar memória, o que, ironicamente, pode levar à perda de pacotes. Meu palpite é de que isso pode ser o que você está vendo, mas algumas outras métricas precisam ser confirmadas.

É provável que o número 2.5M venha das recomendações sobre configuração de valores rmem e wmem para TCP - em que a relação entre o dimensionamento da janela e as configurações de buffer pode ter efeitos significativos sob certas circunstâncias. Dito isto, TCP! = UDP - mas algumas pessoas supõem que, se ajudar o TCP, também ajudará o UDP. Você tem a informação empírica correta. Se eu fosse você, ficaria com o valor de 256K e ligaria mesmo.

    
por 24.07.2012 / 03:14
1

O problema é que geralmente há vários comutadores no caminho entre os dois pontos de extremidade (isto é, servidores). Enquanto com rmem você pode aumentar o tamanho dos buffers nos terminais, isso não afeta os buffers nos switches, que são bastante limitados. Então você pode perder pacotes devido a transbordamentos nos buffers de comutadores.

    
por 05.01.2016 / 17:56