Mesure de latence réseau (Linux)

8

Je voudrais mesurer la latence du réseau pour la demande SNMP GET. Il existe un outil de ligne de commande gratuit timequi peut être utilisé pour trouver des statistiques de synchronisation pour diverses commandes. Par exemple, il peut être utilisé avec snmpgetde la manière suivante:

$ 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

Selon le manuel, les statistiques comprennent:

  • le temps réel écoulé entre l'invocation et la fin,

  • le temps CPU de l'utilisateur (la somme des
    valeurs tms_utime et tms_cutime dans une structure tms renvoyée par
    times (2)),

  • le temps CPU du système (la somme des
    valeurs tms_stime et tms_cstime dans une structure tms renvoyée par
    times (2)).

Comme vous le voyez, aucune de ces options ne permet de mesurer le temps de latence réel du réseau (à l'exclusion des autres statistiques de temps d'exécution du programme). Existe-t-il un moyen de le faire? Peut-être n'utilisant pas l'outil de temps, mais plutôt des hacks du noyau?

Je voulais demander, avant de commencer à écrire mon propre programme.

Merci, Piotr

Om Nom Nom
la source

Réponses:

5

Le drapeau tcpdump(8)du programme -tttpeut être exactement ce dont vous avez besoin:

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

L'horodatage au début des lignes indique le temps en microsecondes depuis le paquet précédent. En donnant un nombre différent de -tsur la ligne de commande, vous pouvez obtenir soit des temps absolus, des temps relatifs depuis le premier paquet, soit des temps relatifs entre les paquets.

Je viens de montrer des mdns aléatoires et du trafic Web parce que c'est ce qui est facile à trouver sur mon système; vous pouvez facilement filtrer le trafic SNMP avec tcpdump(8)pour obtenir uniquement les paquets qui vous intéressent. (Ce qui serait une bonne idée, car le vidage de tout le trafic provenant de systèmes occupés peut générer une énorme charge.)

sarnold
la source
-tttttpeut également être utile - au lieu d'afficher les microsecondes depuis le dernier paquet, il affiche les microsecondes depuis le début de la trace.
Alex D
8

Essayez ping:

$ ping -U 192.168.1.3

Depuis le manuel ping:

-U Affiche la latence complète d'utilisateur à utilisateur (l'ancien comportement). Normalement, le ping imprime le temps d'aller-retour du réseau, qui peut être différent en raison des pannes DNS.

Francisco R
la source
Merci pour la réponse, mais j'aimerais mesurer la latence spécifique à la demande d'obtention SNMP.
5

Exécutez votre programme et en attendant capturez le trafic réseau avec tcpdumpou wireshark. Vérifiez l'heure de la demande et de la réponse et effectuez une soustraction simple.

Karoly Horvath
la source