Ho un server con una connessione 10GbE a uno switch e 10 client ciascuno con una connessione 1GbE allo stesso switch.
Eseguendo nuttcp in parallelo su ciascuno dei client, posso inviare simultaneamente 10 flussi di dati TCP al server alla velocità del filo (ovvero appena 100 megabyte al secondo da tutti e 10 i client contemporaneamente).
Tuttavia, quando invertisco la direzione e invio i dati dal server ai client, ovvero 10 flussi TCP, uno diretto a ciascun client, le ritrasmissioni TCP salgono alle stelle e le prestazioni scendono a 30, 20 o addirittura 10 megabyte al secondo per cliente. Voglio aumentare questi numeri, perché questo schema di traffico è rappresentativo di alcune applicazioni a cui tengo.
Ho verificato che il mio server è in grado di saturare un collegamento 10GbE eseguendo lo stesso esperimento su una connessione 10GbE a un server simile. Ho verificato che non ci sono errori su nessuna delle mie porte.
Alla fine, quando forzo (limito) forzatamente le dimensioni della finestra TCP del ricevitore, posso aumentare leggermente la larghezza di banda (30-40 megabyte / sec); e se lo stringo estremamente in basso, posso portare a zero le ritrasmissioni (con la larghezza di banda ridicolmente bassa).
Quindi sono ragionevolmente fiducioso di superare i buffer nel mio switch, con conseguente perdita di pacchetti dovuta alla congestione. Tuttavia, ho pensato che il controllo della congestione di TCP avrebbe dovuto affrontare questo problema, alla fine stabilizzandosi a qualcosa di oltre il 50% della velocità del filo.
Quindi la mia prima domanda è molto semplice: quale algoritmo di controllo della congestione TCP sarebbe la migliore per la mia situazione? Ce ne sono molti disponibili, ma per lo più sembrano mirati a reti con perdita di dati o reti ad alta latenza ad alta larghezza di banda o reti wireless ... Nessuna delle quali si applica alla mia situazione.
Seconda domanda: c'è qualcos'altro che posso provare?