Tuesday, March 5, 2013

Messen der Netzwerklatenz bei TCP/IP Verbindungen

Bei Client Server Anwendungen wie z.B. Lotus Notes spielt nicht nur die Bandbreite sondern auch die Netzwerklatenz der Verbindung eine große Rolle. Unter Netzwerklatenz versteht man die Zeit die es braucht bis auf eine Anfrage eine Antwort vom Server zurückkommt. Wenn man weiß, dass Lotus Notes beim Öffnen eines Dokuments sämtliche Abfragen, wie DBLookups und ähnliches synchron hintereinander durchführt, spielt es schon eine große Rolle, ob jeder Netzwerkzugriff unter 1 Millisekunde oder eher im 100 Millisekundenbereich dauert. Dazu ein Beispiel: Das Öffnen von einem Notes Dokument benötigt 15 NRPC Aufrufe. Wenn nun die Netzwerklatenz 1 ms beträgt, dann ist der Overhead durch das Netzwerk nur 15 Millisekunden. Wenn man aber über einen WAN Link mit langsamer Latenz (ca. 100 ms)  arbeitet, dann ist der Overhead durch die Netzwerklatenz schon 1,5 Sekunden. Damit sollte klar sein, warum Notes ohne lokalen Repliken so bescheiden über WAN Links funktioniert.

Wie kann man nun aber die Netzwerklatenz messen. Eine ganz rudimentäre Möglichkeit bietet der Befehl "PING" den alle Betriebssysteme bereits mitbringen. Aber ping hat den Nachteil, dass es erstens nur kleine ICMP Pakete zum Messen verschickt, die unter Umständen wesentlich besser performen als große Datenpakete wie sie in Anwendungen normalerweise auftreten. Weiters kann es die Latenz nur mit einer Auflösung von 1 ms angeben.

Doch es gibt ein Ping Tool von Microsoft (Sysinternals), dass alle diese Probleme lösen kann.

Nach dem Entpacken des Download kopiert man den "PSPING.EXE" Befehl einmal auf den Client und einmal auf den Server zwischen denen man die Latenz messen will. Danach startet man auf dem Server PSPING im Sever Modus.

psping -s x.x.x.x:y

x.x.x.x ist dabei die Adresse der Netzwerkschnittstelle im Server z.B. 10.0.0.15.
y ist die Portnummer auf der PSPING auf eingehende Anfragen antworten soll.

Natürlich muss man auf dem Server auch noch den gewählten Port auf der  Windows Firewall freigeben, oder die Windows Firewall während der Messung deaktivieren.

Auf dem Client kann man dann die Messung mit folgenden Befehl starten.

psping -l 4096 -n 500 -h 20 x.x.x.x:y


Der Befehl sendet 500 4k große Datenpakete an den Server x.x.x.x:y und misst die Latenzzeit. Nach Abschluss der Messung gibt er dann die geringste, die durchschnittliche und die maximale Latenz aus. Weiters erstellt er eine Verteilung der einzelnen Messungen. Die Anzahl der Verteilungen wird über den Paramter -h gesteuert.

Hier ein Beispiel für eine schnelle LAN Verbindung:

TCP latency test connecting to x.x.x.x:y: Connected
505 iterations (warmup 5) sending 4096 bytes latency test: 100%

TCP roundtrip latency statistics (post warmup):
  Sent = 500, Size = 4096, Total Bytes: 2048000,
  Minimum = 0.26ms, Maxiumum = 7.41ms, Average = 0.34ms

Latency Count
0.26    496
0.63    2
1.01    0
1.39    1
1.76    0
2.14    0
2.51    0
2.89    0
3.27    0
3.64    0
4.02    0
4.40    0
4.77    0
5.15    0
5.52    0
5.90    0
6.28    0
6.65    0
7.03    1
7.41    0


 und das selbe über ein WAN Link:
 
TCP latency test connecting to x.x.x.x:y: Connected
505 iterations (warmup 5) sending 4096 bytes latency test: 100%

TCP roundtrip latency statistics (post warmup):
  Sent = 500, Size = 4096, Total Bytes: 2048000,
  Minimum = 42.39ms, Maxiumum = 445.09ms, Average = 50.24ms

Latency Count
42.39   457
63.59   37
84.78   2
105.98  0
127.17  0
148.36  0
169.56  0
190.75  0
211.95  0
233.14  0
254.34  0
275.53  0
296.73  2
317.92  0
339.12  0
360.31  0
381.51  0
402.70  1
423.90  1
445.09  0


Vor allem wenn man bei seinem WAN Link sehr viele Ausreißer nach oben hat, sollte man unbedingt an seinem Netzwerk arbeiten. z.B. Quality of Service einführen. Nach den Tuningmassnahmen kann man dann wieder bequem mit PSPING prüfen, ob die Massnahmen auch etwas gebracht haben.







No comments:

Post a Comment

ad