Misurazione della latenza di rete (Linux)


8

Vorrei misurare la latenza di rete per la richiesta GET SNMP. Esiste uno strumento da riga di comando gratuito timeche può essere utilizzato per trovare statistiche di temporizzazione per vari comandi. Ad esempio può essere utilizzato con snmpgetnel modo seguente:

$ 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

Secondo il manuale, le statistiche consistono in:

  • il tempo reale trascorso tra invocazione e cessazione,

  • il tempo della CPU dell'utente (la somma dei
    valori tms_utime e tms_cutime in una struttura tms restituita da
    times (2)),

  • il tempo di CPU del sistema (la somma dei
    valori tms_stime e tms_cstime in una struttura tms restituita dai
    tempi (2)).

Come vedi, nessuna di queste opzioni consente di misurare il tempo di latenza della rete reale (con le statistiche sui tempi di esecuzione di altri programmi esclusi). C'è un modo per farlo? Forse non usando lo strumento tempo, ma piuttosto alcuni hack del kernel?

Volevo chiedere, prima di iniziare a scrivere il mio programma.

Grazie Piotr

Risposte:


5

La bandiera tcpdump(8)del programma -tttpotrebbe essere proprio ciò di cui hai bisogno:

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

Il timestamp all'inizio delle righe mostra l'ora in microsecondi dal pacchetto precedente. Fornendo un numero diverso di -tnella riga di comando, è possibile ottenere tempi assoluti, tempi relativi dal primo pacchetto o tempi relativi tra i pacchetti.

Ho appena mostrato mdns casuali e traffico web perché è quello che è facile da trovare sul mio sistema; potresti facilmente filtrare il traffico SNMP con tcpdump(8)per ottenere solo i pacchetti che ti interessano (il che sarebbe una buona idea, dato che scaricare tutto il traffico dai sistemi occupati può generare un carico enorme ).


-tttttpuò anche essere utile: invece di mostrare i microsecondi dall'ultimo pacchetto, mostra i microsecondi dall'inizio della traccia.
Alex D,

8

Prova il ping:

$ ping -U 192.168.1.3

Dal manuale del ping:

-U Stampa la latenza completa da utente a utente (il vecchio comportamento). Normalmente il ping stampa il tempo di andata e ritorno della rete, che può essere diverso a causa di errori DNS.


Grazie per la risposta, ma vorrei misurare la latenza specifica per la richiesta di richiesta SNMP.

5

Esegui il tuo programma e nel frattempo acquisisci il traffico di rete con tcpdumpo wireshark. Controlla l'ora della richiesta e la risposta ed effettua una semplice sottrazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.