Die Auswirkung der Latenz der Kommunikationsschicht wird in der Regel unterschätzt, wenn man versucht, Probleme mit der Anwendungsleistung zu beheben, aber das richtige Verständnis ist entscheidend, wenn man seine Bemühungen auf praktische Lösungen ausrichten will.
Erstens meine ich mit Latenz der Kommunikationsschicht die Zeit, die ein Paket braucht, um vom lokalen System zum entfernten System und wieder zurück zu gelangen. Der größte Faktor bei der Latenz der Kommunikationsschicht ist die Entfernung - zumindest bei geografisch getrennten Hosts. Die andere wichtige Komponente ist die Anzahl der Geräte zwischen dem lokalen und dem entfernten Host, die die Pakete verarbeiten; dazu gehören Dinge wie Router und Firewalls. Die Bandbreite der Verbindungen spielt eine Rolle, aber nicht so stark, wie die meisten Leute denken. Die Bandbreite wirkt sich auf die Einfügungsverzögerung aus - wie lange es dauert, ein Paket auf die Leitung zu bringen, aber das Signal auf der Leitung bewegt sich mit einer Geschwindigkeit, die auf dem Medium basiert, nicht auf der Bandbreite. Im weiteren Verlauf dieser Diskussion werde ich nur noch von Latenz sprechen, wenn ich die Latenz der Kommunikationsschicht meine.
Um zu demonstrieren, wie sich die Latenzzeit auf Ihre Anwendung auswirkt, nehmen wir an, Sie geben einige Daten in eine Client-Anwendung ein und drücken die Return-Taste. Die Client-Anwendung sendet eine Nachricht an eine Server-Anwendung, wartet auf eine Antwort und sendet dann eine weitere Nachricht, wartet auf eine Antwort usw., und zwar für eine bestimmte Anzahl N von "Runden". Am Ende von N Runden präsentiert die Client-Anwendung Ihnen die Ergebnisse.
Angenommen, es sind 10 Abrufe erforderlich und die Serveranwendung benötigt 1 ms, um die Client-Nachricht zu verarbeiten und eine Antwort zurückzusenden. Bei einer Latenzzeit von 1 ms ergibt sich eine Antwortzeit von 10 * (1 ms + 1 ms) oder 20 ms. Steigen Sie nun in ein Flugzeug und reisen Sie nach Chicago, der Server bleibt in Boston, so dass Sie nun eine Latenzzeit von sagen wir 50 ms und eine Antwortzeit von 10 * (50 ms + 1 ms) oder 550 ms haben. Das ist genug, um sich bemerkbar zu machen, aber nicht schmerzhaft. Erhöhen Sie die Anzahl der Umdrehungen auf 100 und Sie haben nun eine schmerzhafte Reaktionszeit von 5,5 Sekunden. Sie halten 100 Umdrehungen vielleicht für übertrieben, aber einige komplexe Datenbankabfragen oder Anwendungen, die komplexe Formulare ausfüllen, können genau das erreichen. Wissen Sie, wie viele Umdrehungen Ihre Anwendungen benötigen?
Auch bei der Ausführung einer copy_file über OSL zeigt sich dieses Verhalten. OSL sendet eine Datei in 4K-Transaktionen. Jede Transaktion erfordert eine Antwort, so dass für eine Datei mit 1.000.000 Byte 1.000.000 / 4.096 = 245 Transaktionen oder Umdrehungen erforderlich sind, um die Nomenklatur aus dem vorherigen Absatz zu verwenden. Wiederum unter der Annahme von 1 ms für die Verarbeitung der Transaktion und einer Latenzzeit von 1 ms benötigt copy_file 490 ms. Wenn wir die Latenzzeit auf 50 ms erhöhen, dauert es 12,495 Sekunden. Bei einer Vergrößerung der Datei auf 1.000.000.000 Bytes sind 244.141 Transaktionen erforderlich, mit entsprechenden Zeiten von 488,282 Sekunden bei einer Latenz von 1 ms und 12.451,191 Sekunden oder fast 3,5 Stunden bei einer Latenz von 50 ms.
Die einfachste Methode zur Messung der Latenzzeit ist der Ping.
ping 192.168.200.197 Pinging host 192.168.200.197 : 192.168.200.197 ICMP Echo Reply:TTL 53 time = 84 ms ICMP Echo Reply:TTL 53 time = 80 ms ICMP Echo Reply:TTL 53 time = 81 ms ICMP Echo Reply:TTL 53 time = 96 ms Host 192.168.200.197 replied to all 4 of the 4 pings |
start_process 'packet_monitor -numeric -time_stamp -filter -host A.B.C.D -port NNN' -privileged
”. Geben Sie dann den Befehl "telnet A.B.C.D NNN
”. Sie sollten mehrere Verbindungen herstellen und einen Durchschnittswert erhalten. Beachten Sie, dass ich eine Verbindung zu einem ungenutzten Port auf dem entfernten Host herstelle. Dadurch wird die Anzahl der Pakete in der Aufzeichnung reduziert, aber wenn eine Firewall den Port blockiert, müssen Sie möglicherweise einen aktiven Port verwenden.
start_process 'packet_monitor -numeric -time_stamp -filter -host 192.168.200.197 + -port 6666' -privileged ready 09:12:42 telnet 192.168.200.197 6666 Trying... telnet: Unable to connect to remote host: The connection was refused. ready 09:12:53 telnet 192.168.200.197 6666 Trying... telnet: Unable to connect to remote host: The connection was refused. ready 09:12:56 telnet 192.168.200.197 6666 Trying... telnet: Unable to connect to remote host: The connection was refused. ready 09:12:58 telnet 192.168.200.197 6666 Trying... telnet: Unable to connect to remote host: The connection was refused. ready 09:12:58 stop_process packet_monitor -no_ask Stopping Noah_Davids.CAC (packet_monitor). ready 09:13:07 d packet_monitor.out %phx_vos#m16_mas>SysAdmin>Noah_Davids>packet_monitor.out 09-11-13 09:13:17 mst Noah_Davids.CAC logged in on %phx_vos#m16 at 09-11-13 09:12:42 mst. packet_monitor -numeric -time_stamp -filter -host 192.168.200.197 -port 6666 *********************************************************** WARNING: failure to specify a specific interface will cause packet_monitor to bind to ALL interfaces on the module, greatly increasing the amount of Streams memory used!!! *********************************************************** dir icmp type + tcp hh:mm:ss.ttt len proto source destination src port dst p +ort type 9:12:52.984 T 0004 TCP 172.16.77.128 192.168.200.197 62515 + 6666 S 9:12:53.067 R 0000 TCP 192.168.200.197 172.16.77.128 6666 + 62515 RA 9:12:56.643 T 0004 TCP 172.16.77.128 192.168.200.197 62516 + 6666 S 9:12:56.724 R 0000 TCP 192.168.200.197 172.16.77.128 6666 + 62516 RA 9:12:58.003 T 0004 TCP 172.16.77.128 192.168.200.197 62517 + 6666 S 9:12:58.086 R 0000 TCP 192.168.200.197 172.16.77.128 6666 + 62517 RA 9:12:58.805 T 0004 TCP 172.16.77.128 192.168.200.197 62518 + 6666 S 9:12:58.887 R 0000 TCP 192.168.200.197 172.16.77.128 6666 + 62518 RA ready 09:13:07 Process finished. Terminating Noah_Davids.CAC (packet_monitor). Process stopped by Noah_Davids.CA +C. |
Latency times: 58.887 - 58.805 = 0.082 == 82ms
58.086 - 58.003 = 0.083 == 83ms
56.724 - 56.643 = 0.081 == 81ms
53.067 - 52.984 = 0.083 == 83ms
Sie können auch ein von mir geschriebenes Programm verwenden, das die Verbindungen zeitlich erfasst, ohne dass Sie packet_monitor verwenden müssen. Siehe http://members.cox.net/ndav1/self_published/stcp_tping.doc. Der Befehl stcp_tping setzt voraus, dass Sie sich mit einem aktiven Port auf dem entfernten Host verbinden. In diesem Fall verwende ich Port 23 (telnet), aber jeder aktive Port funktioniert. Die Zahl 1 am Ende des Befehls bedeutet, dass einmal pro Sekunde eine Anfrage gesendet wird.
stcp_tping 192.168.200.197 23 1 tping 192.168.200.197 23 1 Success/Tries=Percent min/average/max success times 1/1=100.000% 83.284/83.284/83.284 Connection in 83.284 ms 2/2=100.000% 81.697/82.490/83.284 Connection in 81.697 ms 3/3=100.000% 80.858/81.946/83.284 Connection in 80.858 ms 4/4=100.000% 80.858/81.895/83.284 Connection in 81.743 ms ^C |