Como posso ver a taxa na qual os dados são enviados?

0

Eu tenho um aplicativo que envia mensagens por UDP em algum formato conhecido. Gostaria de saber a taxa em que essas mensagens são enviadas. Para ser claro, eu poderia me importar menos com o datarate - é um loopback, então é algo perto do infinito + 1 - o que eu preciso saber é quantas vezes mensagens completas saem.

    
por jamesson 03.01.2012 / 20:23

2 respostas

3

Você deve analisar TCPDUMP e WireShark para capturar os dados e depois analisá-los.

Se tudo o que importa é a taxa de pacotes, então executar netstat pode lhe dar a ideia.

No Linux:

'netstat --interfaces=lo -c'

daria uma ideia em intervalos de 1 segundo, mas há sinalizadores semelhantes no SO mais moderno '

    
por 03.01.2012 / 20:32
0

Se por "mensagem" você quer dizer "datagrama", a resposta é 100%. Os datagramas UDP são enviados ou não e chegam ou não. Você nunca deve recvfrom() apenas parte de um datagrama UDP. Se o datagrama acabar sendo maior que o MTU da rede, ele pode estar fragmentado na camada IP, mas qualquer fragmento descartado resultará na eliminação total do datagrama e não em uma mensagem parcial.

A velocidade do loopback não é infinita: é limitada pela CPU. Se você enviar dados muito rapidamente, o buffer de saída do UDP será preenchido. Então, quando você tentar sendto() um datagrama que é muito grande para caber no espaço de buffer restante, você receberá um erro como EAGAIN , ENOBUFS ou EMSGSIZE , dependendo da implementação. Se o receptor chamar recvfrom() lentamente, seu buffer de entrada será preenchido e os datagramas serão silenciosamente descartados.

Uma questão mais relevante é a porcentagem de datagramas enviados que são realmente recebidos. Em taxas bem abaixo da saturação da CPU, isso deve ser 100% no loopback. Mas quando se aproxima a saturação da CPU, ou se o receptor está lento na leitura dos datagramas, ele pode se tornar arbitrariamente baixo.

    
por 13.01.2012 / 17:41