Ultraszybkie zapytania przy użyciu pakietów UDP

10

Wdrażam system, w którym jedno urządzenie w sieci wysyła zapytania z bardzo wysoką częstotliwością (setki lub tysiące zapytań na sekundę) poprzez wysyłanie małego pakietu UDP z około 8 bajtami danych. Jest to odbierane przez inną aplikację, być może na innym urządzeniu, która wykonuje bardzo proste przetwarzanie i wysyła kilkuminutowy wynik zawinięty w inny pakiet UDP.

Chciałbym wiedzieć, jakie są możliwe czasy podróży w obie strony dla typowego sprzętu, w którym systemy komunikacyjne są być może połączone za pomocą przewodowego Ethernetu w odległości kilku metrów od siebie, biorąc pod uwagę opóźnienia propagacji i transmisji itp.

Inne myśli i sugestie są również mile widziane.

John Smith
źródło
2
możesz zobaczyć opóźnienia w dziesiątkach lub setkach mikrosekund ... zdecydowanie opóźnienie poniżej milisekundy ... w oparciu o twój opis, wygląda na to, że rozważasz system handlu finansowego ... opóźnienia, o które prosisz, są bardzo zależne od twojego konkretnego i znacznie lepiej jest przeprowadzać testy niż poprosić o bezpłatną poradę
Mike Pennington,
Wielkie dzięki za odpowiedź. W tym przypadku tak naprawdę nie dotyczy to systemu handlu finansowego. Chciałem tylko niejasne wyobrażenie o tym, co było możliwe przed rozpoczęciem wdrażania, bardziej jako studium wykonalności niż cokolwiek innego.
John Smith,

Odpowiedzi:

11

Przykład Juniper MX80 ma opóźnienie wejścia>> około 8us, na przełączniku przecinania o niskim opóźnieniu może wynosić <1us (może 0,7us). (Pamiętaj, że przełącznik odcinający nie może wykonać odcinania przez 100% czasu, tylko gdy port wyjściowy jest bezczynny!)

1 km światłowodu to opóźnienie około 5us (ponownie, w jednym kierunku).

Opóźnienie serializacji @ 10G dla minimalnej wielkości ładunku (46B) wynosi około 67ns (0,067us), zwiększając prędkość łącza, zmniejszasz opóźnienie serializacji.

Nagłówek IP to 20B, nagłówek UDP to 8B, dane to 8B, więc masz tylko 36B danych, co oznacza, że ​​twój ładunek ethernetowy będzie zawierał 10B śmieci, które MUSISZ wysłać, tj. Jeśli masz coś do dodania do ładunku, dodaj go, ma 0 latencji koszt.

Mam nadzieję, że możesz ekstrapolować z nich RTT, mnożąc opóźnienie urządzenia przez liczbę urządzeń i dodając 5us za każdy kilometr światłowodu, a następnie pomnożąc to przez 2.


Nie mogę się oprzeć dodaniu kilku przemyśleń na temat HFT.

Zgodnie z tym wolumenem HFT zmniejszył się o połowę w latach 2009-2012. Sugeruje, że wygrane łatwe wygasły. Chciałbym zobaczyć artykuł naukowy lub po prostu prawdziwe dane na temat opóźnienia HFT i jego wpływu na zysk. Podejrzewam, że opóźnienie, które wpływa na zyski z handlu, ma inny rozmiar niż opóźnienie, o którym teraz mówimy. Mój przyjaciel, który buduje sieć dla jednej z największych giełd, wydaje się myśleć, że tylko klient robi „obniż = = lepiej”, nie rozumiejąc skali.
W pełni rozumiem, w jaki sposób HFT był użyteczny, gdy robiło to niewiele osób, kiedy można było obserwować rynek Nie widząc zmiany marketB widzi i korzysta z niego. Niektórzy mówią o stosowaniu regulacji w celu powstrzymania HFT poprzez opodatkowanie każdej transakcji, co czyni ją kosztowną dla wszystkich, nie sądzę, aby była potrzebna, myślę, że okno możliwości już się zamyka.

iti
źródło
Doskonała odpowiedź i bardzo pouczająca, dzięki. Nawet kilka osobistych przemyśleń na temat HFT!
John Smith,
1
@JohnSmith, nie zaniedbuj rozważania opóźnienia wprowadzonego w twoich punktach końcowych (takich jak harmonogram systemu operacyjnego lub przetwarzanie jądra) ... może to znacznie przyczynić się do opóźnienia, o którym wspomniałem w poprzednim komentarzu.
Mike Pennington,
Doskonała uwaga na temat używania pełnego minimalnego rozmiaru pakietu przy zerowym koszcie opóźnienia.
generalnetworkerror
1

Myślę, że na konwencjonalnym częściowo dostrojonym sprzęcie powinieneś być w stanie:

  1. Wyjdź ze stosu sieciowego hosta
  2. Przejdź do następnego stosu sieciowego
  3. Wycofaj ten stos sieciowy swoim „nowym” pakietem

Za ~ 10 nas na 10gig. Jeśli naprawdę zablokujesz, liczba ta może być znacznie niższa.

Prawie WSZYSTKIE opóźnienia, które zobaczycie, nie pochodzą z urządzeń / kabli sieciowych, ale z systemów hosta. Rozsądnym przełącznikiem (Arista, Gnodal, New Cisco itp.) Będzie sub 1us.

Zacznij od upewnienia się, że procesy wykorzystujące pakiety UDP są przypięte do tego samego rdzenia, co przerwania twojej karty sieciowej. Stamtąd upewnij się, że łączenie w twojej karcie sieciowej jest wyłączone, a stamtąd upewnij się, że masz włączone MSI-X i DCA.

Jeśli jesteś poważniejszy ... sprawdź OpenOnload SolarFlare. Mają też świetny zestaw narzędzi do testowania / weryfikacji wydajności.

radikalus
źródło