tl; dr
Aby dać jednoznaczną odpowiedź, konieczne są dalsze testy. Jednak poszlaki wskazują, że Linux jest systemem operacyjnym używanym praktycznie wyłącznie w społeczności o bardzo niskim opóźnieniu, która rutynowo przetwarza obciążenia Mpps. Nie oznacza to, że jest to niemożliwe w systemie Windows, ale Windows prawdopodobnie pozostanie trochę w tyle, nawet jeśli możliwe jest osiągnięcie liczb Mpps. Ale to wymaga przetestowania i np. Ustalenia, jaki koszt (procesora) można uzyskać.
NB: To nie jest odpowiedź, którą zamierzam przyjąć. Ma on na celu udzielenie wszystkim zainteresowanym odpowiedzią na pytanie pewnych wskazówek na temat tego, gdzie się znajdujemy i gdzie należy dalej badać.
Len Holgate, który według Google wydaje się być jedynym, który przetestował RIO, aby uzyskać większą wydajność sieci Windows (i opublikował wyniki), wyjaśnił w komentarzu na swoim blogu , że używa jednej kombinacji IP / Port do wysyłania pakietów UDP.
Innymi słowy, jego wyniki powinny być w pewnym stopniu porównywalne z liczbami pojedynczego rdzenia w testach na Linuksie (chociaż używa 8 wątków - które, nie sprawdzając jeszcze swojego kodu, wydają się szkodliwe dla wydajności przy obsłudze tylko jednego strumienia pakietów UDP, a nie wykonując ciężkie przetwarzanie pakietów, a on wspomina, że w rzeczywistości jest używanych tylko kilka wątków, co miałoby sens). To dlatego, że powiedział:
Nie starałem się tak mocno, aby uzyskać maksymalną wydajność, aby porównać względną wydajność między starymi i nowymi interfejsami API, więc nie byłem tak dokładny w testowaniu.
Ale co rezygnuje z (względnej) strefy komfortu standardowego IOCP dla bardziej surowego świata RIO innego niż „ciężkie próby”? Przynajmniej jeśli chodzi o pojedynczy strumień pakietów UDP.
Wydaje mi się, że ma na myśli - próbując różnych podejść projektowych w kilku testach RIO - że nie dopracował np. Ustawień karty sieciowej, aby wycisnąć ostatnią część wydajności. Co np. W przypadku rozmiaru bufora odbiorczego może potencjalnie mieć ogromny pozytywny wpływ na wydajność odbierania UDP i straty pakietów.
Problem przy próbie bezpośredniego porównania jego wyników z wynikami innych testów Linux / Unix / BSD jest następujący: Większość testów, próbując przesunąć granicę „pakietów na sekundę”, używa najmniejszego możliwego rozmiaru pakietu / ramki, tj. Ethernet ramka 64 bajtów. Len przetestował 1024 bajty pakietów (-> ramka 1070 bajtów), które (szczególnie w przypadku UDP No-Nagle) mogą zapewnić ci znacznie wyższe liczby „bitów na sekundę”, ale mogą nie przesunąć granicy pps tak daleko, jak to możliwe przy mniejszych pakietach . Nie byłoby więc uczciwe porównywanie tych danych w obecnej postaci.
Podsumowując wyniki mojej wyprawy do Windows UDP otrzymałem dotychczas wydajność:
- Nikt tak naprawdę nie używa systemu Windows, próbując opracować aplikacje o bardzo niskim opóźnieniu i / lub o wysokiej przepustowości, obecnie używają Linuksa
- Praktycznie wszystkie testy wydajności i raporty z rzeczywistymi wynikami (tj. Nie tylko reklama produktu) są obecnie w Linuksie lub BSD (dzięki Len za to, że był pionierem i dał nam przynajmniej jeden punkt odniesienia!)
- Czy UDP (standardowe gniazda) w systemie Windows jest szybszy / wolniejszy niż w systemie Linux? Nie wiem jeszcze, musiałbym zrobić własne testy
- Czy wysokowydajny UDP (RIO vs mapa) w systemie Windows jest szybszy / wolniejszy niż w systemie Linux? Linux z łatwością radzi sobie z pełną prędkością linii 10 Gb z jednym rdzeniem przy 900 MHz, Windows, w najlepszym przypadku opublikowanym może wzrosnąć do 43% lub 492 kpps dla dużego pakietu UDP o wielkości 1024, tj. Liczby bps dla mniejszych rozmiarów prawdopodobnie będą znacznie gorzej, chociaż liczby pps prawdopodobnie wzrosną (chyba że ograniczeniem jest obsługa przerwań lub inny narzut przestrzeni jądra).
To, dlaczego używają Linuksa, musi być tak dlatego, że opracowywanie rozwiązań obejmujących zmiany jądra, takie jak netmap lub RIO - konieczne przy zwiększaniu wydajności do granic możliwości - jest prawie niemożliwe w zamkniętym systemie, takim jak Windows, chyba że twoje wypłaty wypadną z Redmond, lub masz specjalną umowę z Microsoft. Właśnie dlatego RIO jest produktem MS.
Wreszcie, aby podać kilka ekstremalnych przykładów tego, co odkryłem, było i dzieje się w Linuksie:
Już 15 lat temu niektórzy otrzymywali 680kpps przy użyciu procesora Pentium III 800 mHz, 133 MHz szyny frontowej na karcie sieciowej 1GbE. Edycja : korzystali z Click , routera w trybie jądra, który omija znaczną część standardowego stosu sieciowego, tzn. „Oszukuje”.
W 2013 roku udało się zdobyć Argon Design
zaznacz, aby opóźnić wymianę już od 35ns [nano sekund]
Przy okazji twierdzą, że tak
Zdecydowana większość istniejących kodów obliczeniowych do handlu jest obecnie napisana dla systemu Linux na architekturze procesorów x86.
a Argon używa przełącznika Arista 7124FX , który (oprócz FPGA) ma system operacyjny
zbudowany na standardowym jądrze Linuksa.