Ultraschnelle Abfrage mit UDP-Paketen


10

Ich implementiere ein System, bei dem ein Gerät in einem Netzwerk mit einer sehr hohen Frequenz (Hunderte oder Tausende von Abfragen pro Sekunde) abfragt, indem ein kleines UDP-Paket mit etwa 8 Datenbytes gesendet wird. Dies wird von einer anderen Anwendung empfangen, möglicherweise auf einem anderen Gerät, das eine sehr einfache Verarbeitung ausführt und das in einem anderen UDP-Paket verpackte Ergebnis mit wenigen Bytes sendet.

Ich würde gerne wissen, welche Art von Umlaufzeiten mit typischer Hardware möglich sind, bei der die Kommunikationssysteme möglicherweise über kabelgebundenes Ethernet in einem Abstand von einigen Metern verbunden sind, wobei Ausbreitungs- und Übertragungsverzögerungen usw. berücksichtigt werden.

Andere Gedanken und Vorschläge sind ebenfalls willkommen.


2
Sie könnten Latenzen in zehn oder Hunderten von Mikrosekunden sehen ... definitiv eine Latenz von weniger als einer Millisekunde ... basierend auf Ihrer Beschreibung klingt es so, als würden Sie ein Finanzhandelssystem in Betracht ziehen ... die Latenzen, die Sie verlangen, hängen sehr stark von Ihrer spezifischen Hardware ab , und Sie sind viel besser dran, Tests durchzuführen, als um kostenlosen Rat zu bitten
Mike Pennington

Vielen Dank für deine Antwort. In diesem Fall handelt es sich nicht um ein Finanzhandelssystem. Ich wollte nur eine vage Vorstellung davon, was möglich ist, bevor ich mit der Implementierung beginne, mehr als Machbarkeitsstudie als alles andere.
John Smith

Antworten:


11

Ein Beispiel für einen Juniper MX80 mit einer Eingangs-> Ausgangsverzögerung von ca. 8us. Bei einem Cut-Through-Schalter mit geringer Latenz kann er <1us (möglicherweise 0,7us) sein. (Denken Sie daran, dass der Cut-Through-Switch nicht zu 100% durchschneiden kann, nur wenn der Ausgangsport zufällig inaktiv ist!)

1 km Faser entspricht einer Latenz von ca. 5us (wieder in eine Richtung).

Die Serialisierungsverzögerung bei 10 G für eine Nutzlast mit minimaler Größe (46B) beträgt ungefähr 67 ns (0,067 us). Durch Erhöhen der Verbindungsgeschwindigkeit verringern Sie die Serialisierungsverzögerung.

Der IP-Header ist 20B, der UDP-Header ist 8B, Ihre Daten sind 8B, Sie haben also nur 36B Daten, was bedeutet, dass Ihre Ethernet-Nutzdaten 10B Müll enthalten, den Sie senden MÜSSEN , dh wenn Sie etwas zu Ihrer Nutzlast hinzufügen müssen, fügen Sie es hinzu. Es hat 0 Latenzkosten.

Ich hoffe, Sie können RTT daraus extrapolieren, indem Sie die Geräteverzögerung mit der Geräteanzahl multiplizieren und 5us für jeden Kilometer Faser addieren und diese dann mit 2 multiplizieren.


Ich kann nicht widerstehen, ein paar Gedanken über HFT hinzuzufügen.

Demnach halbierte sich das HFT-Volumen zwischen 2009 und 2012. Dies deutet darauf hin, dass die einfachen Gewinne weg sind. Ich würde gerne ein wissenschaftliches Papier oder nur echte Daten über die HFT-Latenz und ihre Auswirkungen auf den Gewinn sehen. Ich vermute, dass die Latenz, die sich auf die Handelsgewinne auswirkt, in einem anderen Ausmaß liegt als die Latenz, über die wir gerade sprechen. Ein Freund von mir, der ein Netzwerk für eine der größten Börsen aufbaut, scheint zu glauben, dass es nur Kunden sind, die "niedriger == besser" sind, ohne die Skalen zu verstehen.
Ich kann vollkommen verstehen, wie nützlich HFT war, als nur wenige Leute es taten, als man beobachten konnte, dass MarktA keine Veränderung sieht, die MarktB sieht und daraus Kapital schlägt. Einige reden über die Verwendung von Regulierung, um HFT zu stoppen, indem jeder Trade besteuert wird, was ihn für alle teuer macht. Ich denke nicht, dass er benötigt wird, ich denke, das Zeitfenster schließt sich bereits.


Ausgezeichnete Antwort und sehr informativ, danke. Sogar ein paar persönliche Gedanken zu HFT!
John Smith

1
@ JohnSmith, vergessen Sie nicht, die Verzögerung zu berücksichtigen, die in Ihren Endpunkten (wie dem OS-Scheduler oder der Kernel-Verarbeitung) eingeführt wurde. Dies kann erheblich zu der Verzögerung beitragen, die ich in einem früheren Kommentar erwähnt habe.
Mike Pennington

Hervorragender Punkt bei Verwendung der vollen Mindestpaketgröße bei 0 Latenzkosten.
Generalnetworkerror

1

Ich denke, auf herkömmlicher halboptimierter Hardware sollten Sie in der Lage sein:

  1. Gehen Sie aus Ihrem Host-Netzwerk-Stack
  2. Richten Sie Ihren nächsten Netzwerkstapel ein
  3. Sichern Sie diesen Netzwerkstapel mit Ihrem "neuen" Paket

In ~ 10 uns bei 10gig. Wenn Sie die Dinge wirklich sperren, kann diese Zahl erheblich niedriger sein.

Fast die gesamte Latenz, die Sie sehen werden, stammt nicht von Netzwerkhardware / -kabeln, sondern von Ihren Hostsystemen. Ein vernünftiger Cut-Through-Schalter (Arista, Gnodal, New Cisco usw.) wird unter 1us liegen.

Stellen Sie zunächst sicher, dass die Prozesse, die die UDP-Pakete verbrauchen, an denselben Kern gebunden sind wie Ihre NIC-Interrupts. Stellen Sie von dort aus sicher, dass das Zusammenführen auf Ihrer Netzwerkkarte deaktiviert ist, und stellen Sie von dort aus sicher, dass MSI-X und DCA aktiviert sind.

Wenn Sie es ernst meinen ... schauen Sie sich OpenOnload von SolarFlare an. Sie verfügen über eine große Auswahl an Tools zum Testen / Überprüfen der Leistung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.