Netzwerklatenzmessung (Linux)

8

Ich möchte die Netzwerklatenz für SNMP-GET-Anforderungen messen. Es gibt ein kostenloses Befehlszeilentool, mit timedem Zeitstatistiken für verschiedene Befehle abgerufen werden können. Zum Beispiel kann es snmpgetfolgendermaßen verwendet werden:

$ 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

Laut Handbuch besteht die Statistik aus:

  • die verstrichene Echtzeit zwischen Aufruf und Kündigung,

  • die Benutzer-CPU-Zeit (die Summe der
    Werte tms_utime und tms_cutime in einer Struktur tms, wie von
    times (2) zurückgegeben),

  • die System-CPU-Zeit (die Summe der
    Werte tms_stime und tms_cstime in einer Struktur tms, wie von
    times (2) zurückgegeben).

Wie Sie sehen, ermöglicht keine dieser Optionen die Messung der tatsächlichen Netzwerklatenzzeit (mit ausgeschlossenen anderen Statistiken zur Programmausführungszeit). Gibt es eine Möglichkeit dazu? Vielleicht nicht mit dem Zeitwerkzeug, sondern mit einigen Kernel-Hacks?

Ich wollte fragen, bevor ich anfange, mein eigenes Programm zu schreiben.

Danke, Piotr

OM Nom Nom
quelle

Antworten:

5

Das Flag des tcpdump(8)Programms -tttkann genau das sein, was Sie brauchen:

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

Der Zeitstempel am Anfang der Zeilen zeigt die Zeit in Mikrosekunden seit dem vorherigen Paket. Wenn Sie -tin der Befehlszeile eine andere Anzahl von angeben, können Sie entweder absolute Zeiten, relative Zeiten seit dem ersten Paket oder relative Zeiten zwischen Paketen abrufen.

Ich habe gerade zufällige MDNS und Webdatenverkehr angezeigt, da dies auf meinem System leicht zu finden ist. Sie können problemlos nach SNMP-Verkehr filtern tcpdump(8), um nur die Pakete zu erhalten, an denen Sie interessiert sind. (Dies wäre eine gute Idee, da das Dumping des gesamten Verkehrs von ausgelasteten Systemen eine enorme Last erzeugen kann .)

Sarnold
quelle
-tttttkann auch nützlich sein - anstatt Mikrosekunden seit dem letzten Paket anzuzeigen, werden Mikrosekunden seit dem Beginn des Trace angezeigt.
Alex D
8

Versuchen Sie es mit Ping:

$ ping -U 192.168.1.3

Aus dem Ping-Handbuch:

-U Gibt die vollständige Latenzzeit von Benutzer zu Benutzer aus (das alte Verhalten). Normalerweise druckt Ping die Netzwerk-Roundtrip-Zeit, die beispielsweise aufgrund von DNS-Fehlern unterschiedlich sein kann.

Francisco R.
quelle
Vielen Dank für die Antwort, aber ich möchte die Latenz messen, die für die SNMP-Abrufanforderung spezifisch ist.
5

Führen Sie Ihr Programm aus und erfassen Sie in der Zwischenzeit den Netzwerkverkehr mit tcpdumpoder wireshark. Überprüfen Sie den Zeitpunkt der Anfrage und der Antwort und führen Sie eine einfache Subtraktion durch.

Karoly Horvath
quelle