J'ai un serveur avec une connexion 10GbE à un commutateur et 10 clients chacun avec une connexion 1GbE au même commutateur.
En exécutant nuttcp en parallèle sur chacun des clients, je peux pousser 10 flux TCP de données vers le serveur simultanément à une vitesse proche du fil (c'est-à-dire un peu moins de 100 mégaoctets par seconde à partir des 10 clients simultanément).
Cependant, lorsque j'inverse la direction et envoie des données du serveur aux clients - c'est-à-dire, 10 flux TCP, un allant à chaque client - les retransmissions TCP montent en flèche et les performances chutent à 30, 20, voire 10 mégaoctets par seconde. par client. Je veux obtenir ces chiffres, car ce modèle de trafic est représentatif de certaines applications qui m'intéressent.
J'ai vérifié que mon serveur est capable de saturer une liaison 10 GbE en effectuant la même expérience sur une connexion 10 GbE à un serveur similaire. J'ai vérifié qu'il n'y a aucune erreur sur aucun de mes ports.
Enfin, lorsque je force (limite) la taille de la fenêtre TCP du récepteur, je peux obtenir une bande passante un peu plus élevée (30 à 40 mégaoctets / s); et si je le serre extrêmement bas, je peux ramener les retransmissions à zéro (avec une bande passante ridiculement faible).
Ainsi, je suis raisonnablement sûr de dépasser les tampons de mon commutateur, ce qui entraîne une perte de paquets en raison de la congestion. Cependant, je pensais que le contrôle de la congestion de TCP était censé gérer cela correctement, se stabilisant finalement à quelque chose au-dessus de 50% de la vitesse du fil.
Ma première question est donc très simple: quel algorithme de contrôle de congestion TCP conviendrait le mieux à ma situation? Il y en a une tonne disponible, mais ils semblent principalement cibler les réseaux avec perte ou les réseaux à haute latence et à large bande passante ou les réseaux sans fil ... Aucun d'entre eux ne s'applique à ma situation.
Deuxième question: puis-je essayer autre chose?