Medição de latência de rede (Linux)

7

Gostaria de medir a latência da rede para solicitações SNMP GET. Existe uma ferramenta de linha de comando livre time que pode ser usada para encontrar estatísticas de tempo para vários comandos. Por exemplo, pode ser usado com snmpget da seguinte maneira:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

De acordo com o manual, as estatísticas consistem em:

  • o tempo real decorrido entre invocação e rescisão,

  • o tempo de CPU do usuário (a soma dos Valores tms_utime e tms_cutime em um struct tms conforme retornado pelo
    tempos (2)),

  • o tempo de CPU do sistema (a soma dos valores tms_stime e tms_cstime em um struct tms conforme retornado pelo
    vezes (2)).

Como você pode ver, nenhuma dessas opções permite medir o tempo real de latência da rede (excluindo outras estatísticas de tempo de execução do programa). Existe alguma maneira de fazer isso? Talvez não usando ferramenta de tempo, mas sim alguns hacks de kernel?

Eu queria perguntar, antes de começar a escrever meu próprio programa.

Obrigado Piotr

    
por Piotr De 24.06.2011 / 12:45

3 respostas

6

A tcpdump(8) flag do -ttt do programa pode ser exatamente o que você precisa:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

O registro de data e hora no início das linhas mostra o tempo em microssegundos desde o pacote anterior. Ao fornecer um número diferente de -t na linha de comando, você pode obter tempos absolutos, tempos relativos desde o primeiro pacote ou tempos relativos entre os pacotes.

Acabei de mostrar mdns aleatórios e tráfego na web, porque é isso que é fácil de encontrar no meu sistema; você poderia filtrar facilmente o tráfego SNMP com tcpdump(8) para obter apenas os pacotes nos quais está interessado. (O que seria uma boa ideia, já que descarregar todo o tráfego de sistemas ocupados pode gerar uma carga enorme . )

    
por 25.06.2011 / 01:40
5

Execute o programa e, enquanto isso, capture o tráfego de rede com tcpdump ou wireshark . Verifique a hora da solicitação e a resposta e faça uma subtração simples.

    
por 24.06.2011 / 12:50
3

Tente ping:

$ ping -U 192.168.1.3

Do manual do ping:

-U Print full user-to-user latency (the old behaviour). Normally ping prints network round trip time, which can be different f.e. due to DNS failures.

    
por 24.06.2011 / 14:03