lowsounder
Goto Top

Unterschiedliche Latenzen beim Senden

Hallo,
Ich habe eine Fachanwendung die auf einem Server mit Java Daten an verschiedene Clients schickt. Bei Clients mit Windows 7 32bit Systemen habe ich eine Latenz von 200-250ms und Clients mit Windows 10 64bit haben eine Latenz von 4-5ms.

Gibt es irgendjemand, der mir das halbwegs erklären kann warum das so ist? Der Standort der verschiedenen Clients ist der Selbe. Eigentlich sind alle Bedingungen die Gleichen bis auf das Betriebssystem. Die Datenmengen sind extrem gering.

Content-Key: 399133

Url: https://administrator.de/contentid/399133

Printed on: April 28, 2024 at 09:04 o'clock

Member: sabines
sabines Jan 23, 2019 at 12:39:18 (UTC)
Goto Top
Moin,

teste mal wie sich das bei W7/64 verhält und so generell wirst Du hierzu nicht viel Input bekommen.
Wie genau hast Du die Latenzen gemessen, Wireshark?
Eventuell sind Deine W10 Rechner von Haus aus performanter, egal bei was.

Gruss
Member: Pjordorf
Pjordorf Jan 23, 2019 at 14:08:29 (UTC)
Goto Top
Hallo,

Zitat von @lowsounder:
Bei Clients mit Windows 7 32bit Systemen habe ich eine Latenz von 200-250ms und Clients mit Windows 10 64bit haben eine Latenz von 4-5ms.
In welcher Richtung, Server zu Client oder Client zu Server?
Ist die Client Hardware Identisch (eher nicht) oder fast Identisch oder grundlegend unterschiedlich?
Sind die gleichen (Identische) Switche in der Kommunikationskette und sind diese Identisch bzw. gleich Konfiguriert?
Und dann hast du die wie und womit die Latenz bei deiner Java Applikation festgestellt bzw. gemessen?

Gruß,
Peter
Member: NetzwerkDude
NetzwerkDude Jan 23, 2019 updated at 16:47:08 (UTC)
Goto Top
200ms kligt nach dem W7 fuckup bei der implementierung des sog. Nagle-Algorithmus.
https://de.wikipedia.org/wiki/Nagle-Algorithmus

Sehr kurz gefasst: Das ist ein eigentlich eine sehr sinnvolle Idee um den TCP Traffic zu reduzieren - leider ist es bei Windows7 so das es einen default timeout von 200ms hat - und Falls die Anwendung etwas ungünstig kommuniziert, kann es sein das du immer wieder 200+x ms latenzen bekommst.

Man kann die Werte selbst in der Registry bestimmen, hier der direkte Powershell code der auf der aktiven Netzwerkkarte den Ack-Delay komplett abschaltet:
$strGUIDS=[array](Get-WmiObject win32_networkadapter -filter "netconnectionstatus = 2" | select -expand GUID)  
foreach ($strGUID in $strGUIDS) {
New-ItemProperty -path HKLM:\System\CurrentControlSet\services\Tcpip\Parameters\Interfaces\$strGUID -propertytype DWORD -name TcpAckFrequency -value 1}
(Dannach ist aber noch ein Reboot nötig)

Die Auswirkungen sind übrigens nicht allzu Schlimm auf das Netzwerk, mit der TcpAckFrequency =1 wird jeder TCP Paket mit einem ACk beantwortet, mit der default einstelllung jedes zweite - d.h. theoretisch ein unterschied von 100% - aber in der Praxis sind es nur 1-2% - also zu vernachlässigen.

Ansonsten Google mal nach "windows 7 200ms tcp ack delay"
Member: lowsounder
lowsounder Jan 28, 2019 at 07:15:13 (UTC)
Goto Top
Das mit dem Nagle Algorithmus ist ein guter Hinweis. Morgen kann ich der Sache näher auf den Grund gehen (dadurch, das externe Dienstleister mit am Board sind, zieht sich immer alles).

Ich konnt allerdings bisher feststellen, dass Windows 2008 Server sowie Windows 7 64 Bit auch Latenzen über 200ms erzeugen.
Member: NetzwerkDude
NetzwerkDude Jan 28, 2019 at 09:03:32 (UTC)
Goto Top
Server 2008 = Vista, da weiß ich nicht ob da schon die TCP Einstellugnen gefixt wurden, vermutlich nicht.
und bei W7 ist es egal ob 32 oder 64 bit, beide haben das Problem