tl; dr
Pour donner une réponse définitive, d'autres tests semblent nécessaires. Mais des preuves indirectes suggèrent que Linux est le système d'exploitation utilisé pratiquement exclusivement dans la communauté à latence ultra faible, qui traite également régulièrement les charges de travail Mpps. Cela ne signifie pas que c'est impossible avec Windows, mais Windows sera probablement à la traîne un peu, même s'il peut être possible d'obtenir des nombres Mpps. Mais cela nécessite des tests pour être vérifié, et par exemple pour déterminer à quel coût (CPU) ces chiffres peuvent être atteints.
NB Ce n'est pas une réponse que j'ai l'intention d'accepter. Il vise à donner à toute personne intéressée par une réponse à la question quelques indications sur notre position et sur les points à approfondir.
Len Holgate, qui selon Google semble être le seul à avoir testé RIO pour obtenir plus de performances du réseau Windows (et publié les résultats), vient de préciser dans un commentaire sur son blog qu'il utilisait un seul combo IP / Port pour l'envoi des paquets UDP.
En d'autres termes, ses résultats devraient être quelque peu comparables aux chiffres du noyau unique dans les tests sur Linux (bien qu'il utilise 8 threads - qui, sans avoir encore vérifié son code, semble néfaste pour les performances lors de la gestion d'un seul flux de paquets UDP et non faire tout traitement lourd des paquets, et il mentionne que peu de threads sont réellement utilisés, ce qui aurait du sens). C'est malgré lui en disant:
Je n'essayais pas si fort d'obtenir des performances maximales juste pour comparer les performances relatives entre les anciennes et les nouvelles API et je n'étais donc pas si minutieux dans mes tests.
Mais qu'est-ce qui abandonne la zone de confort (relative) de l'IOCP standard pour le monde RIO plus rude autre que "essayer dur"? Au moins en ce qui concerne un seul flux de paquets UDP.
Je suppose que ce qu'il veut dire - car il a essayé diverses approches de conception dans plusieurs tests de RIO - est qu'il n'a pas, par exemple, affiné les paramètres NIC pour extraire le dernier bit de performance. Ce qui, par exemple dans le cas de la taille de la mémoire tampon de réception, pourrait potentiellement avoir un impact positif énorme sur les performances de réception UDP et les chiffres de perte de paquets.
Cependant, le problème lorsque vous essayez de comparer directement ses résultats avec ceux d'autres tests Linux / Unix / BSD est le suivant: La plupart des tests, lorsque vous essayez de repousser la limite des "paquets par seconde", utilisent la plus petite taille de paquet / trame possible, c'est-à-dire un Ethernet trame de 64 octets. Len a testé des paquets de 1024 octets (-> une trame de 1070 octets), qui (en particulier pour No-Nagle UDP) peuvent vous obtenir des chiffres "bits par seconde" beaucoup plus élevés, mais ne peuvent pas pousser la limite pps aussi loin que possible avec des paquets plus petits . Il ne serait donc pas juste de comparer ces chiffres tels quels.
Pour résumer les résultats de ma quête dans Windows UDP, je reçois les performances jusqu'à présent:
- Personne n'utilise vraiment Windows pour développer des applications à latence ultra faible et / ou à haut débit, ces derniers utilisent Linux
- Presque tous les tests de performance et les rapports avec des résultats réels (c'est-à-dire pas une simple publicité de produit) sont de nos jours sur Linux ou BSD (merci Len d'être un pionnier et de nous avoir donné au moins un point de référence!)
- UDP (sockets standard) sous Windows est-il plus rapide / plus lent que sous Linux? Je ne peux pas encore le dire, je devrais faire mes propres tests
- L'UDP hautes performances (RIO vs netmap) sous Windows est-il plus rapide / plus lent que sous Linux? Linux gère facilement la vitesse de ligne complète de 10 Go avec un seul cœur à 900 MHz, Windows, dans le meilleur des cas, publié est capable d'aller jusqu'à 43% ou 492 kpps pour une grande taille de paquet UDP de 1024, c'est-à-dire que les chiffres en bps pour les petites tailles seront probablement significativement pire, bien que les chiffres pps augmenteront probablement (à moins que la gestion des interruptions ou un autre surcharge d'espace du noyau ne soit le facteur limitant).
Quant à savoir pourquoi ils utilisent Linux, cela doit être dû au fait que développer des solutions qui impliquent des modifications du noyau comme netmap ou RIO - nécessaires pour pousser les performances à la limite - est presque impossible avec un système fermé comme Windows, à moins que vos chèques de paie ne viennent de Redmond, ou vous avez un contrat spécial avec Microsoft. C'est pourquoi RIO est un produit MS.
Enfin, pour donner quelques exemples extrêmes de ce que j'ai découvert et qui se passait sous Linux:
Il y a déjà 15 ans, certains recevaient 680 kpp en utilisant un processeur Pentium III 800 mHz, un bus frontal 133 mHz sur une carte réseau 1 GbE. Edit : Ils utilisaient Click , un routeur en mode noyau qui contourne une grande partie de la pile réseau standard, c'est-à-dire qu'ils ont "triché".
En 2013, Argon Design a réussi à obtenir
tick pour échanger des latences aussi faibles que 35ns [nano secondes]
Btw, ils affirment également que
La grande majorité du code informatique existant à échanger aujourd'hui est écrite pour Linux sur des architectures de processeur x86.
et Argon utilisent le commutateur Arista 7124FX , qui (en plus d'un FPGA) a un système d'exploitation
construit sur un noyau Linux standard.