tl; dr
Um eine eindeutige Antwort zu geben, scheinen weitere Tests erforderlich zu sein. Indizien deuten jedoch darauf hin, dass Linux das Betriebssystem ist, das praktisch ausschließlich in der Community mit extrem geringer Latenz verwendet wird, die auch routinemäßig Mpps-Workloads verarbeitet. Das bedeutet nicht, dass es mit Windows unmöglich ist, aber Windows wird wahrscheinlich einiges hinterherhinken, obwohl es möglicherweise möglich ist, Mpps-Zahlen zu erreichen. Dazu müssen jedoch Tests durchgeführt werden, um beispielsweise herauszufinden, zu welchen (CPU-) Kosten diese Zahlen erreicht werden können.
NB Dies ist keine Antwort, die ich akzeptieren möchte. Es ist beabsichtigt, jedem, der an einer Antwort auf die Frage interessiert ist, einige Hinweise zu geben, wo wir stehen und wo wir weitere Untersuchungen durchführen können.
Len Holgate, der laut Google der einzige zu sein scheint, der RIO getestet hat, um mehr Leistung aus Windows-Netzwerken herauszuholen (und die Ergebnisse veröffentlicht hat), hat gerade in einem Kommentar in seinem Blog klargestellt, dass er eine einzige IP / Port-Kombination verwendet zum Senden der UDP-Pakete.
Mit anderen Worten, seine Ergebnisse sollten in gewisser Weise mit den Single-Core-Zahlen in Tests unter Linux vergleichbar sein (obwohl er 8 Threads verwendet - was, ohne seinen Code noch überprüft zu haben, die Leistung beeinträchtigt, wenn nur ein einziger UDP-Paketstrom verarbeitet wird und nicht Er erwähnt, dass nur wenige Threads tatsächlich verwendet werden, was Sinn machen würde. Das ist, obwohl er sagt:
Ich habe mich nicht so sehr bemüht, maximale Leistung zu erzielen, nur um die relative Leistung zwischen alten und neuen APIs zu vergleichen, und deshalb war ich bei meinen Tests nicht so gründlich.
Aber was gibt die (relative) Komfortzone des Standard-IOCP für die rauere RIO-Welt auf, außer "hart zu versuchen"? Zumindest was einen einzelnen UDP-Paketstrom betrifft.
Ich denke, was er meint - da er in mehreren RIO-Tests verschiedene Designansätze ausprobiert hat - ist, dass er zB die NIC-Einstellungen nicht fein abgestimmt hat, um das letzte Stück Leistung herauszuholen. Dies kann sich beispielsweise im Fall der Empfangspuffergröße möglicherweise erheblich positiv auf die UDP-Empfangsleistung und die Paketverlustzahlen auswirken.
Das Problem beim Versuch, seine Ergebnisse direkt mit denen anderer Linux / Unix / BSD-Tests zu vergleichen, ist jedoch folgendes: Die meisten Tests verwenden beim Versuch, die Grenze "Pakete pro Sekunde" zu verschieben, die kleinstmögliche Paket- / Rahmengröße, dh ein Ethernet Rahmen von 64 Bytes. Len testete 1024-Byte-Pakete (-> einen 1070-Byte-Frame), wodurch (insbesondere für No-Nagle-UDP) viel höhere "Bits pro Sekunde" -Zahlen erzielt werden können, die pps-Grenze jedoch möglicherweise nicht so weit verschoben wird, wie dies bei kleineren Paketen möglich ist . Es wäre also nicht fair, diese Zahlen so zu vergleichen, wie sie sind.
Das Zusammenfassen der Ergebnisse meiner Suche in Windows UDP erhält bisher Leistung:
- Niemand verwendet Windows wirklich, wenn er versucht, Anwendungen mit extrem geringer Latenz und / oder hohem Durchsatz zu entwickeln. Heutzutage verwenden sie Linux
- Praktisch alle Leistungstests und Berichte mit tatsächlichen Ergebnissen (dh nicht nur Produktwerbung) finden heutzutage unter Linux oder BSD statt (danke Len, dass er ein Pionier ist und uns mindestens einen Bezugspunkt gibt!)
- Ist UDP (Standard Sockets) unter Windows schneller / langsamer als unter Linux? Ich kann es noch nicht sagen, müsste meine eigenen Tests machen
- Ist Hochleistungs-UDP (RIO vs Netmap) unter Windows schneller / langsamer als unter Linux? Linux verarbeitet problemlos die volle 10-Gbit-Leitungsgeschwindigkeit mit einem einzigen Kern bei 900 MHz. Windows kann im besten Fall bei einer großen UDP-Paketgröße von 1024 bis zu 43% oder 492 kpps erreichen, dh die BPS-Werte für kleinere Größen werden wahrscheinlich erheblich sein Schlimmer, obwohl die pps-Zahlen wahrscheinlich steigen werden (es sei denn, die Interrupt-Behandlung oder ein anderer Kernel-Speicher-Overhead ist der begrenzende Faktor).
Der Grund, warum sie Linux verwenden, muss daran liegen, dass die Entwicklung von Lösungen mit Kerneländerungen wie Netmap oder RIO - die erforderlich sind, um die Leistung an ihre Grenzen zu bringen - mit einem geschlossenen System wie Windows nahezu unmöglich ist, es sei denn, Ihre Gehaltsschecks stammen zufällig aus Redmond. oder Sie haben einen Sondervertrag mit Microsoft. Deshalb ist RIO ein MS-Produkt.
Um nur einige extreme Beispiele dafür zu nennen, was ich im Linux-Land entdeckt habe und was gerade passiert:
Bereits vor 15 Jahren erhielten einige 680 kpps mit einer 800-MHz-Pentium III-CPU und einem 133-MHz-Front-Side-Bus auf einer 1-GbE-Netzwerkkarte. Bearbeiten : Sie verwendeten Click , einen Router im Kernel-Modus, der einen Großteil des Standard-Netzwerkstapels umgeht, dh sie "betrogen" haben.
Im Jahr 2013 Argon Entwurf verwaltet zu bekommen
kreuzen Sie an, um Latenzen von nur 35 ns [Nanosekunden] zu tauschen.
Übrigens behaupten sie das auch
Die überwiegende Mehrheit des heute für den Handel vorhandenen Computercodes ist für Linux auf x86-Prozessorarchitekturen geschrieben.
und Argon verwenden den Arista 7124FX-Switch , der (zusätzlich zu einem FPGA) über ein Betriebssystem verfügt
Aufbauend auf einem Standard-Linux-Kernel.