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.197Pinging host 192.168.200.197 : 192.168.200.197ICMP Echo Reply:TTL 53 time = 84 msICMP Echo Reply:TTL 53 time = 80 msICMP Echo Reply:TTL 53 time = 81 msICMP Echo Reply:TTL 53 time = 96 msHost 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' -privilegedready 09:12:42telnet 192.168.200.197 6666Trying...telnet: Unable to connect to remote host: The connection was refused.ready 09:12:53telnet 192.168.200.197 6666Trying...telnet: Unable to connect to remote host: The connection was refused.ready 09:12:56telnet 192.168.200.197 6666Trying...telnet: Unable to connect to remote host: The connection was refused.ready 09:12:58telnet 192.168.200.197 6666Trying...telnet: Unable to connect to remote host: The connection was refused.ready 09:12:58stop_process packet_monitor -no_ask Stopping Noah_Davids.CAC (packet_monitor).ready 09:13:07d packet_monitor.out%phx_vos#m16_mas>SysAdmin>Noah_Davids>packet_monitor.out 09-11-13 09:13:17 mstNoah_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 causepacket_monitor to bind to ALL interfaces on the module,greatly increasing the amount of Streams memory used!!!*********************************************************** dir                                                 icmp type+     tcphh: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 RAready 09:13:07Process 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 == 83msSie 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 1tping 192.168.200.197 23 1Success/Tries=Percent    min/average/max success times1/1=100.000%             83.284/83.284/83.284     Connection in 83.284 ms2/2=100.000%             81.697/82.490/83.284     Connection in 81.697 ms3/3=100.000%             80.858/81.946/83.284     Connection in 80.858 ms4/4=100.000%             80.858/81.895/83.284     Connection in 81.743 ms^C | 
