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

8

Gostaria de medir a latência da rede para solicitação SNMP GET. Existe uma ferramenta de linha de comando gratuita timeque pode ser usada para encontrar estatísticas de tempo para vários comandos. Por exemplo, ele pode ser usado snmpgetda 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 a invocação e a rescisão,

  • o tempo de CPU do usuário (a soma dos
    valores tms_utime e tms_cutime em uma estrutura tms, conforme retornado por
    times (2)),

  • o tempo de CPU do sistema (a soma dos valores de
    tms_stime e tms_cstime em uma estrutura tms, conforme retornado por
    vezes (2)).

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

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

Obrigado, Piotr

omnomnom
fonte

Respostas:

5

O sinalizador tcpdump(8)do programa -tttpode 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 -tna linha de comando, você pode obter tempos absolutos, tempos relativos desde o primeiro pacote ou tempos relativos entre pacotes.

Acabei de mostrar mdns aleatórios e tráfego da Web porque é fácil encontrá-lo no meu sistema; você pode filtrar facilmente o tráfego SNMP tcpdump(8)para obter apenas os pacotes nos quais está interessado. (O que seria uma boa idéia, pois despejar todo o tráfego de sistemas ocupados pode gerar uma carga enorme ).

sarnold
fonte
-ttttttambém pode ser útil - em vez de mostrar microssegundos desde o último pacote, mostra microssegundos desde o início do rastreamento.
Alex D
8

Experimente o ping:

$ ping -U 192.168.1.3

No manual do ping:

-U Imprime a latência completa de usuário para usuário (o comportamento antigo). Normalmente, o ping imprime o tempo de ida e volta da rede, que pode ser diferente por causa de falhas no DNS.

Francisco R
fonte
Obrigado pela resposta, mas gostaria de medir a latência específica da solicitação de obtenção do SNMP.
5

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

Karoly Horvath
fonte