Re: [FUG-BR] Interface de rede perdendo pacotes UDP

2017-05-08 Por tôpico Eduardo Schoedler
Em 8 de maio de 2017 14:27, Otacílio  escreveu:
> Que bloqueia o processo até que o socket esteja pronto para receber mais
> pacotes. Acontece que embora tenha melhorado um pouco, a perda de pacotes
> ainda existe e do que vi na Internet o problema é que está enchendo os
> buffers do sistema antes dele poder enviar. A solução que vi sugerida é
> aumentar o tamanho do buffer do sistema.
>
> Alguém já passou por experiência semelhante ou pode me dizer quais são os
> parâmetros que devo configurar?

Tive um problema parecido com um servidor dns recursivo (unbound).

Tente aumentar:
sysctl -w kern.ipc.maxsockbuf=26214400


Referência:
[1] 
https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Web_Platform/5/html/Administration_And_Configuration_Guide/jgroups-perf-udpbuffer.html
[2] https://wiki.freebsd.org/NetworkPerformanceTuning


Abs.

-- 
Eduardo Schoedler
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


[FUG-BR] Interface de rede perdendo pacotes UDP

2017-05-08 Por tôpico Otacílio

Olá pessoal

Olhe só este cenário. Desenvolvi um software de streaming de vídeo em 
tempo real para uso próprio. O software hoje é capaz de transmitir o 
vídeo com os quadros codificados em H264, MPEG2, como sequencias de 
imagens MJPEG e em formato "raw" YUYV422. O software está usando UDP no 
canal de dados e TCP no de controle. Ele faz a quebra dos quadros em 
vários pacotes UDP e a remontagem e reordenação nos clientes. Acontece 
que venho percebendo que nas situações em que o fluxo de vídeo é alto 
(gerando então vários pacotes), como em resoluções altas ou quadros 
MJPEG e YUYV422 a interface de rede está perdendo os pacotes e 
obviamente eu preciso descartar os quadros incompletos no cliente. 
Entendi então que eu estava enviando os pacotes antes da interface 
mandar para a outra ponta e isto estaria forçando a interface a 
descartar os pacotes. Escrevi então esta rotina:


void waitSocketAvail(int socket)
{
static int primeiro = 1;
static fd_set writefds[FD_SETSIZE];
int desP;

if(primeiro==1){
FD_ZERO(writefds);
primeiro = 0;
}

for(;;){
FD_SET(socket, writefds);
desP = select(socket+1, NULL, writefds, NULL, NULL);
if(desP>=0 || errno!=EINTR)
break;
}
FD_CLR(socket, writefds);
}

Que bloqueia o processo até que o socket esteja pronto para receber mais 
pacotes. Acontece que embora tenha melhorado um pouco, a perda de 
pacotes ainda existe e do que vi na Internet o problema é que está 
enchendo os buffers do sistema antes dele poder enviar. A solução que vi 
sugerida é aumentar o tamanho do buffer do sistema.


Alguém já passou por experiência semelhante ou pode me dizer quais são 
os parâmetros que devo configurar?


[]'s

-Otacílio

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd