Das erste empfangene Ethernet-UDP-Paket ist verzögert. Warum?

434
Adam Z

Ich habe einen PC, der Daten über Gigabit-Ethernet mit benutzerdefinierter Hardware austauscht. Mein Problem ist, dass, wenn Daten physisch auf der Netzwerkkarte ankommen (mit einem Oszilloskop überprüft), der erste Frame vom Betriebssystem mit einer Verzögerung von ungefähr 1 ms registriert wird. Alle nachfolgenden Frames werden mit sehr geringer Verzögerung registriert.

Wenn ich einen großen Datenblock übertragen müsste, wäre dies akzeptabel, da die Verzögerung nur für den ersten Frame vorhanden wäre. In meiner Anwendung muss ich jedoch ein einzelnes Paket senden und auf eine Antwort warten. Diese Verzögerung von 1 ms bei jedem empfangenen Paket verringert meine Bandbreite erheblich.

ARP-Verhandlung ist nicht das Problem, da ich den Eintrag als statisch festgelegt habe. Ich beobachte das empfangene Paket-Timing mit Wireshark. Weiß jemand, was eine Verzögerung verursachen könnte, nur im ersten Lesetelegramm?

1
Was * genau * bedeutet "vom Betriebssystem registriert"? Läuft Ihre App bereits oder wird sie von launchd oder inetd oder einem anderen Daisy-Lazy-Launch gestartet, der den Port tatsächlich abhört? Spiff vor 7 Jahren 0
Mit registriert meine ich die Zeit, die es dauert, in Wireshark zu zeigen. Ich gehe davon aus, dass dies der Zeitpunkt ist, zu dem es den Empfangspuffer erreicht. App läuft bereits, ich habe einen UDP-Listener in einer Endlosschleife (C #). Ich habe auch kommerzielle Terminals wie Paketsender ausprobiert. Adam Z vor 7 Jahren 0
Können Sie genau definieren, was Sie unter "erster Frame" verstehen? Erst nach dem Linken? Zuerst von diesem IP-Host? Zuerst dieser UDP-Fluss? Zuerst diesen großen Puffer auf die sendende Seite schreiben? Wird EEE (802.3az) für diesen Link verwendet? Wo genau hast du den O'scope angeschlossen? War es bei GMII oder woanders? Ist die kundenspezifische Hardware die Gigabit-Ethernet-Netzwerkkarte des PCs selbst oder bezieht sich dies auf das Gerät am anderen Ende der Gigabit-Ethernet-Verbindung? Spiff vor 7 Jahren 0
Hintergrund: Ich sende Frames mit einem RGMII-Phy an ein FPGA. Wenn der FPGA den Frame empfängt, sendet er sofort denselben Frame erneut, sodass die Verzögerung vom Empfang / Senden sehr gering ist. Wenn ich während der Aufwärtsverbindung zu irgendeinem Zeitpunkt ein einzelnes Bild sende, wird das Bild mit einer Verzögerung von 1 ms zurückgegeben. Wenn ich fortlaufende Frames vom PC sende, wird der Stream mit einer Verzögerung von 1 ms empfangen (der erste Frame erscheint also 1 ms zu spät im Betriebssystempuffer, der Rest der Frames kommt jedoch sofort danach). Adam Z vor 7 Jahren 0
Wenn ich kontinuierlich sende / empfange / sende, ist die Verzögerung von 1 ms nur auf dem ersten Frame in der Sequenz vorhanden. Wenn ich jedoch das Senden / Empfangen für mehr als ungefähr 2 ms stoppe, wird die Verzögerung von 1 ms auf dem ersten Frame erneut beobachtet. Durch die Beobachtung des RGMII-Timings bin ich ziemlich sicher, dass die Verzögerung von 1 ms von der Betriebssystemseite stammt. Adam Z vor 7 Jahren 0

0 Antworten auf die Frage